springboot + mybatis FileNotFoundException

Récemment mis à jour la version de springboot

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>${
    
    spring-boot.version}</version>
</dependency>
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>${
    
    mybatis-spring-boot-starter.version}</version>
</dependency>
<spring-boot.version>2.3.9.RELEASE</spring-boot.version>
<mybatis-spring-boot-starter.version>2.2.0</mybatis-spring-boot-starter.version>

Source de données personnalisée et SqlSessionFactoryBean

@Bean("master")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource master() {
    
    
        DruidDataSource druidDataSourceClaims = new DruidDataSource();
        List<Filter> filterList=new ArrayList<>();
        filterList.add(wallFilter());
        druidDataSourceClaims.setProxyFilters(filterList);
        druidDataSourceClaims.setUsername(username);
        druidDataSourceClaims.setUrl(url);
        druidDataSourceClaims.setPassword(password);
        return druidDataSourceClaims;
    }

    @Bean
    public WallFilter wallFilter(){
    
    
        WallFilter wallFilter=new WallFilter();
        wallFilter.setConfig(wallConfig());
        return  wallFilter;
    }
    @Bean
    public WallConfig wallConfig(){
    
    
        WallConfig config =new WallConfig();
        config.setMultiStatementAllow(true);//允许一次执行多条语句
        config.setNoneBaseStatementAllow(true);//允许非基本语句的其他语句
        return config;
    }

    @Bean("sqlSessionFactoryBean")
    @ConfigurationProperties(prefix = "mybatis")
    public SqlSessionFactoryBean sqlSessionFactoryBean() throws IOException {
    
    
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(master());
        return sqlSessionFactoryBean;
    }

fichier de configuration

mybatis:
  type-aliases-package: com.xxxxx.xxxxx.entity
  mapperLocations: classpath:mapper/*.xml
  configuration:
    map-underscore-to-camel-case: true

erreur de démarrage

Caused by: java.io.FileNotFoundException: class path resource [mapper/*.xml] cannot be opened because it does not exist
	at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180) ~[spring-core-5.2.13.RELEASE.jar:5.2.13.RELEASE]
	at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:609) ~[mybatis-spring-2.0.6.jar:2.0.6]
	... 59 common frames omitted

Après vérification du code source

MyBatis-Spring-Boot-Starter va :
Détecter automatiquement une DataSource existante
Créer et enregistrer une instance d'une SqlSessionFactory en passant cette DataSource comme entrée à l'aide du SqlSessionFactoryBean
Créer et enregistrer une instance d'une SqlSessionTemplate issue de la SqlSessionFactory
Analyser automatiquement vos mappeurs , liez-les au SqlSessionTemplate et enregistrez-les dans le contexte Spring afin qu'ils puissent être injectés dans vos beans

L'anglais est trop mauvais, après Google Translate

MyBatis-Spring-Boot-Starter va :
Détecter automatiquement DataSource existant
va créer et enregistrer une instance de transmission SqlSessionFactory DataSource comme entrée en utilisant SqlSessionFactoryBean
va créer et enregistrer une instance de SqlSessionTemplate pour sortir SqlSessionFactory
scanne automatiquement vos mappeurs et les relie à SqlSessionTemplate et les enregistre avec le contexte Spring afin qu'ils puissent être injectés dans vos beans

Source de données unique, MyBatis-Spring-Boot-Starter traitera automatiquement la
solution SqlSessionFactoryBean
1. Supprimez le SqlSessionFactoryBean personnalisé
2. Paramètre manuel setMapperLocations

    @Bean
    @ConfigurationProperties(prefix = "mybatis")
    public SqlSessionFactoryBean sqlSessionFactoryBean() throws IOException {
    
    
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(master());
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        return sqlSessionFactoryBean;
    }

problème résolu

Je suppose que tu aimes

Origine blog.csdn.net/heroguo007/article/details/120158586
conseillé
Classement