这是一个根据包进行划分数据源的
1:配置application.yml
spring: datasource: test: jdbc-url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT&allowMultiQueries=true username: root password: fenghao230. driver-class-name: com.mysql.cj.jdbc.Driver sql-script-encoding: UTF-8 type: com.zaxxer.hikari.HikariDataSource initialization-mode: always continue-on-error: true hikari: minimum-idle: 5 connection-test-query: SELECT 1 FROM DUAL maximum-pool-size: 20 auto-commit: true idle-timeout: 30000 pool-name: SpringBootDemoHikariCP max-lifetime: 60000 connection-timeout: 30000 logging: level: com.qjc.dao.Test: TARCE e3Shop: jdbc-url: jdbc:mysql://localhost:3306/e3shop?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT&allowMultiQueries=true username: root password: fenghao230. driver-class-name: com.mysql.cj.jdbc.Driver sql-script-encoding: UTF-8 type: com.zaxxer.hikari.HikariDataSource initialization-mode: always continue-on-error: true hikari: minimum-idle: 5 connection-test-query: SELECT 1 FROM DUAL maximum-pool-size: 20 auto-commit: true idle-timeout: 30000 pool-name: SpringBootDemoHikariCP max-lifetime: 60000 connection-timeout: 30000 logging: level: com.qjc.dao.e3shop: TARCE logging: file: 001_ManyDataSource.log level: org.springframework.boot.env.PropertySourcesLoader: TRACE org.springframework.web: INFO com.alibaba.nacos: ERROR com.qjc: INFO com.qjc.dao: trace transaction: #事务等待2分钟超时 default-timeout: PT2M #提交的事务失败回滚 rollback-on-commit-failure: true
2:配置一个config包,包下面配置数据源的包,然后在这些包下面配置他们的数据源的配置信息
3:
package com.qjc.config.e3shop; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Qualifier; 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.jdbc.datasource.DataSourceTransactionManager; import tk.mybatis.spring.annotation.MapperScan; import javax.sql.DataSource; /** * @program: student * @description: * @author: QianJianChao * @create: 2020-02-17 13:57 **/ @Configuration @MapperScan(basePackages = {"com.qjc.dao.e3shop"},sqlSessionTemplateRef = "e3shopSqlSessionTemplate") public class e3ShopConfig { /** * @program: student * @description: * @author: QianJianChao * @create: 2020-02-17 13:42 **/ /** * 数据源 * @return */ @Bean("e3shopDataSource") @ConfigurationProperties(prefix = "spring.datasource.e3shop") public DataSource e3shopDataSource() { return DataSourceBuilder.create().build(); } /** * sqlSessionFactory * @param dataSource * @return * @throws Exception */ @Bean("e3shopSqlSessionFactory") public SqlSessionFactory e3shopSqlSessionFactory(@Qualifier("e3shopDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(e3shopDataSource()); return sqlSessionFactoryBean.getObject(); } /** * sqlsessionTemplate * @param sqlSessionFactory * @return */ @Bean(name = "e3shopSqlSessionTemplate") public SqlSessionTemplate e3shopSqlSessionTemplate(@Qualifier("e3shopSqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } /** * dataSource的管理器 * @param dataSource * @return */ @Bean(name = "e3shopTransactionManager") public DataSourceTransactionManager e3shopTransactionManager(@Qualifier("e3shopDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } }
注意多数据源要注意在使用事务管理器的时候要进行选择指定的事务管理器进行控制事务.