最近工程中需要配置双数据源,按照网络上教程配置以后不能用。
主要的错误有两个,一个是找不到mapper文件。一个是无法连接数据库。
通过网上各种百度最后把问题解决。
解决第一个问题需要一下几点
无法找到mapper最容易想到的问题可以参考一下博文
https://blog.csdn.net/sundacheng1989/article/details/81630370
简单的说就是名字对不上或则路径写错。
我遇到的问题如下
1、@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) 去掉默认数据源的初始化。
2、另外mapper接口文件和mapper的xml文件的配置最好也是在每个数据源的地方进行配置。而不是单一数据源时在properties文件中进行配置。
其中一个的数据源配置文件如下
@Configuration @MapperScan(basePackages = "com.xxx.yyy.dao.icpmg", sqlSessionFactoryRef = "dataSecondSqlSessionFactory") public class DataSourceSecond { /** * 返回data2数据库的数据源 * * @return */ @Bean(name = "dataSecondSource") @ConfigurationProperties(prefix = "spring.datasource.data2") public DataSource dataSource() { return DataSourceBuilder.create().build(); } /** * 返回data2数据库的会话工厂 * * @param ds * @return * @throws Exception */ @Bean(name = "dataSecondSqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSecondSource") DataSource ds) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(ds); bean.setMapperLocations( // 设置mybatis的xml所在位置 new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/icpmg/*.xml")); return bean.getObject(); } /** * 返回data2数据库的会话模板 * * @param sessionFactory * @return * @throws Exception */ @Bean(name = "dataSecondSqlSessionTemplate") public SqlSessionTemplate sqlSessionTemplate(@Qualifier("dataSecondSqlSessionFactory") SqlSessionFactory sessionFactory) throws Exception { return new SqlSessionTemplate(sessionFactory); } /** * 返回data2数据库的事务 * * @param ds * @return */ @Bean(name = "dataSecondTransactionManager") public DataSourceTransactionManager transactionManager(@Qualifier("dataSecondSource") DataSource ds) { return new DataSourceTransactionManager(ds); } }
第二个问题的解决方法,无法连接数据库的问题。
1、配置文件中的数据源配置方法和单一数据源是有差别的。包括url 配置 标签的写法和driver的写法
可以参考的博文
https://blog.csdn.net/m0_37872413/article/details/91352507
https://blog.csdn.net/sundacheng1989/article/details/81630370