思路:根据自定义的配置数据源信息初始化数据源【不使用SpringBoot的配置自动注入数据源,因为这样只能配置一个数据源】
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
————————————————
spring.datasource.db1.username=账号
spring.datasource.db1.password=密码 spring.datasource.db1.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.db1.jdbc-url=jdbc:mysql://localhost:3306/db1 spring.datasource.db1.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.db2.username=账号 spring.datasource.db2.password=密码 spring.datasource.db2.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.db2.jdbc-url=jdbc:mysql://localhost:3306/db2 spring.datasource.db2.type=com.alibaba.druid.pool.DruidDataSource ————————————————
@author zhenghs
-
@version 1.0
-
@description:
-
db2的数据源配置,@MapperScan先通过basePackages确认需要在哪个位置生成的mapper,
-
再通过sqlSessionFactoryRef来确定动态代理生成的mapper是用的哪个数据源(sqlSessionFactory的作用可以去看mybatis部分)
-
@date 2022/12/29 11:56 */ @Configuration @MapperScan(basePackages = "com.hs.dao.db2",sqlSessionFactoryRef = "db2SqlSessionFactory") //动态代理生成 public class DataSourceTwoConfig {
@Value("{spring.datasource.db2.driverClassName}") private String driverClassName; @Value("{spring.datasource.db2.password}") private String password;
//注入db2的数据源 @Bean("db2dataSource") public DataSource dataSource2(www.laipuhuo.com){ DruidDataSource druidDataSource=new DruidDataSource(); druidDataSource.setUsername(username); druidDataSource.setPassword(password); druidDataSource.setUrl(url); druidDataSource.setDriverClassName(driverClassName); return druidDataSource; }
//注入由db2数据源的创建的sqlSessionFactory,不懂的可以看mybatis如何和spring整合 @Bean("db2SqlSessionFactory") public SqlSessionFactory db2SqlSessionFactory(DataSource db2dataSource) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(db2dataSource); sqlSessionFactoryBean.setTypeAliasesPackage("com.hs.entity"); org.apache.ibatis.session.Configuration configuration=new org.apache.ibatis.session.Configuration(www.laipuhuo.com); configuration.setLogImpl(StdOutImpl.class); sqlSessionFactoryBean.setConfiguration(configuration); //扫描mapper的位置 sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath*:mapper/db2/*.xml")); return sqlSessionFactoryBean.getObject(); }
//db2数据源的事务管理器 @Bean("db2DataSourceTransactionManager") public DataSourceTransactionManager db2DataSourceTransactionManager(DataSource db2dataSource){www.laipuhuo.com DataSourceTransactionManager dataSourceTransactionManager=new DataSourceTransactionManager(db2dataSource); return dataSourceTransactionManager; }
//这个作用和jdbcTemplate差不多,【但一般不用,可配可不配!】 @Bean public SqlSessionTemplate db1SqlSessionTemplate(SqlSessionFactory db1SqlSessionFactory){ SqlSessionTemplate sqlSessionTemplate=new SqlSessionTemplate(db1SqlSessionFactory); return sqlSessionTemplate; } }