1.配置文件配置多数据源(本人spring boot版本2.0以上)
2.java配置多个数据源java配置自动化
- His数据源配置
package com.example.storagefunction.conf; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.Primary; import org.springframework.core.env.Environment; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import javax.sql.DataSource; @Configuration @MapperScan(basePackages = "com.example.storagefunction.mapper.his", sqlSessionTemplateRef = "hisSqlSessionTemplate") public class HisDataSourceConfig { /** * 根据application.properteis系统配置文件中,对应属性的前缀,指明使用其对应的数据 */ @Bean @ConfigurationProperties(prefix = "spring.datasource.hikari.his") @Primary public DataSource hisDataSource() { return DataSourceBuilder.create().build(); } @Bean @DependsOn("hisDataSource") @Primary public SqlSessionFactory hisSqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(hisDataSource()); factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("com/example/storagefunction/mapping/*.xml")); return factoryBean.getObject(); } /** * DefaultSqlSession和SqlSessionTemplate都实现了SqlSession,但我们 * 注入线程安全的SqlSessionTemplate,而不使用默认的线程不安全的DefaultSqlSession */ @Bean @DependsOn("hisSqlSessionFactory") @Primary public SqlSessionTemplate hisSqlSessionTemplate() throws Exception { return new SqlSessionTemplate(hisSqlSessionFactory()); } }
- Pacs数据源配置
package com.example.storagefunction.conf; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import javax.sql.DataSource; @Configuration @MapperScan(basePackages = "com.example.storagefunction.mapper.pacs", sqlSessionTemplateRef = "pacsSqlSessionTemplate") public class PacsDataSourceConfig { /** * 根据application.properteis系统配置文件中,对应属性的前缀,指明使用其对应的数据 */ @Bean @ConfigurationProperties(prefix = "spring.datasource.hikari.pacs") public DataSource pacsDataSource() { return DataSourceBuilder.create().build(); } @Bean @DependsOn("pacsDataSource") public SqlSessionFactory pacsSqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(pacsDataSource()); factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("com/example/storagefunction/mapping/*.xml")); return factoryBean.getObject(); } /** * DefaultSqlSession和SqlSessionTemplate都实现了SqlSession,但我们 * 注入线程安全的SqlSessionTemplate,而不使用默认的线程不安全的DefaultSqlSession */ @Bean @DependsOn("pacsSqlSessionFactory") public SqlSessionTemplate pacsSqlSessionTemplate() throws Exception { return new SqlSessionTemplate(pacsSqlSessionFactory()); } }
3.多个数据源的mapper文件区分开(目的能在多数据源装配的时候定位哪些mapper对应哪个数据源)
4.本人遇到的坑Invalid bound statement (not found):
1.出现这个问题检查.xml文件的namespace 与mapper路径对应的上不
2.如果上面不能解决,检查多数据源配置装配那里配置的.xml扫描路径对不
5.jdbcUrl is required with driverClassName.如果出现这个错是因为2.0版本配置多数据源需要用hikari链接池,如果用的1.0左右版本请在多数据源配置哪里。指定链接,用户名等等