一个项目想要连接两个不同的数据库,通过mybatis的多数据源配置即可实现,配置如下。
主数据源配置如下:
@Configuration @MapperScan(basePackages = "com.ke.dao.primary", sqlSessionFactoryRef = "primarySqlSessionFactory") public class PrimaryDataSourceConfig { @Bean(name = "primaryDataSource") @Primary @ConfigurationProperties(prefix = "spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "primarySqlSessionFactory") public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); org.apache.ibatis.session.Configuration cfg = new org.apache.ibatis.session.Configuration(); cfg.setMapUnderscoreToCamelCase(true); factoryBean.setConfiguration(cfg); factoryBean.setDataSource(dataSource); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); factoryBean.setMapperLocations(resolver.getResources("classpath*:mapper/primary/**.xml")); return factoryBean.getObject(); } @Bean(name = "primarySqlSessionTemplate") public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
工程结构图
从数据源配置如下:
@Configuration @MapperScan(basePackages = "com.ke.sinan.dao.secondary", sqlSessionFactoryRef = "secondarySqlSssionFactory") public class SecondaryDataSourceConfig { private static Logger LOGGER = LoggerFactory.getLogger(SecondaryDataSourceConfig.class); @Bean(name = "secondaryDataSource") @ConfigurationProperties(prefix = "spring.datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "secondarySqlSssionFactory") public SqlSessionFactory secondarySqlSssionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); org.apache.ibatis.session.Configuration cfg = new org.apache.ibatis.session.Configuration(); cfg.setMapUnderscoreToCamelCase(true); factoryBean.setConfiguration(cfg); factoryBean.setDataSource(dataSource); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); factoryBean.setMapperLocations(resolver.getResources("classpath*:mapper/secondary/**.xml")); LOGGER.info("SecondaryDataSourceConfig - factoryBean:{}",factoryBean); return factoryBean.getObject(); } @Bean(name = "secondSqlSessionTemplate") public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("secondarySqlSssionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
工程结构图
db的yml文件配置
spring: datasource: primary: driver-class-name: com.mysql.jdbc.Driver url: xxx username: xxx password: xxx validationQuery: select 1 testOnBorrow: true initialSize: 50 minIdle: 50 maxActive: 100 secondary: driver-class-name: com.mysql.jdbc.Driver url: xxx username: xxx password: xxx validationQuery: select 1 testOnBorrow: true initialSize: 50 minIdle: 50 maxActive: 100
本人亲用有效,感谢支持!