Как использовать параметр mybatis.mapper-location в Spring Boot application.yml в среде с несколькими источниками данных? - PullRequest
0 голосов
/ 07 февраля 2019

Как использовать параметр mybatis.mapper-location в Spring Boot application.yml в среде с несколькими источниками данных?

Я устанавливаю код, как показано ниже.

это мое окружение.

spring-boot 2.1.2
multi datasource using hikariCp

это мое приложение .yml

mybatis:
    mapper-locations: 'classpath:mybatis/test/*.xml'
    type-aliases-package: com.test
    configuration:
      cache-enabled: true
      lazy-loading-enabled: true
      multiple-result-sets-enabled: true
      use-column-label: false
      default-statement-timeout: 65000
      map-underscore-to-camel-case: true

spring.datasource:
  test1:
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    jdbc-url: jdbc:log4jdbc:sqlserver://{SERVER};databaseName={DB NAME};sendStringParametersAsUnicode=false
    username: {USER}
    password: '{PW}'

  test2:
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    jdbc-url: jdbc:log4jdbc:sqlserver://{SERVER};databaseName={DB NAME};sendStringParametersAsUnicode=false
    username: {USER}
    password: '{PW}'

это файл .java конфигурации пружины

@Configuration
public class DataSourceConfig {

    @Bean(name = "test1DataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.test1")
    public DataSource test1DataSource() {
        return DataSourceBuilder.create()
                    //.type(HikariDataSource.class)
                    .build();
    }

    @Bean(name = "sqlTest1SessionFactory")
    public SqlSessionFactory sqlTest1SessionFactory(@Qualifier("test1DataSource") DataSource test1DataSource, ApplicationContext applicationContext) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(test1DataSource);
        //sqlSessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:config/testConfig.xml"));
        //sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:mybatis/test/*.xml"));
        return sqlSessionFactoryBean.getObject();
    }

    @Bean(name = "sqlTest1SessionTemplate")
    public SqlSessionTemplate sqlTest1SessionTemplate(SqlSessionFactory sqlTest1SessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlTest1SessionFactory);
    }
}

есть код ошибки.

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.test.**
### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.test.**

Когда я раскомментирую ('// sqlSessionFactoryBean.setMapperLocations'), он работает нормально, поэтому в значении пути нет опечаток.

Почему произошла эта ошибка?

...