先看一下目錄結構。
網上配置的多數據源有很多,但一定要配置適合自己的,中間很多坑,後邊會一一標出來。
目的就是項目中不同的業務去讀取不同的數據庫,目錄結構配置如上。
直接上代碼
配置springboot的配置文件,配置好的配置文件
配置兩個data類
DataSource1 類
package com.honghe.operations.datasource; 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.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DriverManagerDataSource; import javax.sql.DataSource; //註解到spring容器中 @Configuration //@MapperScan(basePackages = "com.honghe.operations.db.mapper.data1",sqlSessionFactoryRef = "data1SqlSessionFactory") @MapperScan(basePackages = "com.honghe.operations.db.dao.centerservice.data1",sqlSessionFactoryRef = "data1SqlSessionFactory") public class DataSource1 { /** * 返回data1數據庫的數據源 * @return */ @Bean(name="data1Source") //主數據源 @Primary @ConfigurationProperties(prefix = "com.honghe.operations.datasource.DataSource1") public DataSource dataSource(){ // return DataSourceBuilder.create().build(); DriverManagerDataSource ret = new DriverManagerDataSource(); ret.setDriverClassName("com.mysql.jdbc.Driver"); ret.setUsername("root"); ret.setPassword("bhjRjxwC8EBqaJC7"); ret.setUrl("jdbc:mysql://localhost:3306/hht_dmanager?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull"); return ret; } /** * 返回data1數據庫的會話工廠 * @param ds * @return * @throws Exception */ @Bean(name = "data1SqlSessionFactory") @Primary public SqlSessionFactory sqlSessionFactory(@Qualifier("data1Source") DataSource ds) throws Exception{ SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(ds); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/honghe/operations/db/mapper/centerservice/data1/*.xml")); return bean.getObject(); } /** * 返回data1數據庫的會話模板 * @param sessionFactory * @return * @throws Exception */ @Bean(name = "data1SqlSessionTemplate") @Primary public SqlSessionTemplate sqlSessionTemplate(@Qualifier("data1SqlSessionFactory") SqlSessionFactory sessionFactory) throws Exception{ return new SqlSessionTemplate(sessionFactory); } /** * 返回data1數據庫的事務 * @param ds * @return */ @Bean(name = "data1TransactionManager") @Primary public DataSourceTransactionManager transactionManager(@Qualifier("data1Source") DataSource ds){ return new DataSourceTransactionManager(ds); } }
踩坑:
這三個地方小心配置,配置自己項目dao和mapper的路徑,我已經踩過坑。
DataSource2
package com.honghe.operations.datasource; 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.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DriverManagerDataSource; import javax.sql.DataSource; @Configuration//註解到spring容器中 @MapperScan(basePackages = "com.honghe.operations.db.dao.centerservice.data2", sqlSessionFactoryRef = "data2SqlSessionFactory") public class DataSource2 { /** * 返回data2數據庫的數據源 * * @return */ @Bean(name = "data2Source") @ConfigurationProperties(prefix = "com.honghe.operations.datasource.DataSource2") public DataSource dataSource() { // return DataSourceBuilder.create().build(); DriverManagerDataSource ret = new DriverManagerDataSource(); ret.setDriverClassName("com.mysql.jdbc.Driver"); ret.setUsername("root"); ret.setPassword("bhjRjxwC8EBqaJC7"); ret.setUrl("jdbc:mysql://localhost:3306/hht_device_operation?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull"); return ret; } /** * 返回data2數據庫的會話工廠 * * @param ds * @return * @throws Exception */ @Bean(name = "data2SqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("data2Source") DataSource ds) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(ds); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/honghe/operations/db/mapper/centerservice/data2/*.xml")); return bean.getObject(); } /** * 返回data2數據庫的會話模板 * * @param sessionFactory * @return * @throws Exception */ @Bean(name = "data2SqlSessionTemplate") public SqlSessionTemplate sqlSessionTemplate(@Qualifier("data2SqlSessionFactory") SqlSessionFactory sessionFactory) throws Exception { return new SqlSessionTemplate(sessionFactory); } /** * 返回data2數據庫的事務 * * @param ds * @return */ @Bean(name = "data2TransactionManager") public DataSourceTransactionManager transactionManager(@Qualifier("data2Source") DataSource ds) { return new DataSourceTransactionManager(ds); } }
至此,配置完成。雖然只有配置文件和配置類需要配置。但是其中一定要搞明白自己項目db層的路徑,否則就會報各種找不到文件的錯,共勉