spring boot 2.x 使用druid+ mybatis 配置多数据源
2020-01-11 16:28
567 查看
POM 依赖
使用的spring boot
2.1.9 RELEASE;druid的版本是
1.1.20;mybatis的版本是
2.1.0
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.20</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency>
application.yaml配置
参考druid官方说明:
Spring Boot 2.X 版本不再支持配置继承,多数据源的话每个数据源的所有配置都需要单独配置,否则配置不会生效
所以在多个数据源的配置需要单独配置。这里需要注意的是多个数据源的配置区分是要在druid后面。开始参考其他的
"one"写在datasource 之后:
datasource-one,但是实际下面的参数都么有起作用。
spring: datasource: # 数据源one druid-one: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: yskj2018%%% url: jdbc:mysql://192.168.3.188:3306/fqpay?useUnicode=true&characterEncoding=utf-8 type: com.alibaba.druid.pool.DruidDataSource initial-size: 10 max-active: 100 min-idle: 10 max-wait: 10000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 30000 validation-query: select 'x' # 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true test-on-borrow: false # 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true test-on-return: false #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 test-while-idle: true pool-prepared-statements: true max-open-prepared-statements: 20 filter: stat: enabled: true log-slow-sql: true slow-sql-millis: 10000 db-type: mysql # 数据源two druid-two: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: yskj2018%%% url: jdbc:mysql://192.168.3.188:3306/xffq?useUnicode=true&characterEncoding=utf-8 type: com.alibaba.druid.pool.DruidDataSource initial-size: 10 max-active: 100 min-idle: 10 max-wait: 10000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 30000 validation-query: select 'x' # 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true test-on-borrow: false # 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true test-on-return: false #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 test-while-idle: true pool-prepared-statements: true max-open-prepared-statements: 20 filter: stat: enabled: true log-slow-sql: true slow-sql-millis: 10000 db-type: mysql
DataSource的配置
@Configuration public class DataSourceConfig { //指定名称 @Bean(name = "oneDataSource") @Qualifier("oneDataSource") //指定配置的前缀 @ConfigurationProperties(prefix = "spring.datasource.druid-one") public DataSource dataSourceOne(){ //这里使用DruidDataSourceBuilder return DruidDataSourceBuilder.create().build(); } @Bean(name="twoDataSource") @Qualifier("twoDataSource") @ConfigurationProperties(prefix = "spring.datasource.druid-two") public DataSource dataSourceTwo() { return DruidDataSourceBuilder.create().build(); } //分别配置事物管理 @Bean(name = "oneTransaction") public DataSourceTransactionManager db1TransactionManager( @Qualifier("oneDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "twoTransaction") public DataSourceTransactionManager db2TransactionManager( @Qualifier("twoDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } }
Mybatis 配置
同样,在配置文件中进行区分
# mybatis mybatis-one: type-aliases-package: com.demo.model.one #mapper映射文件 #mapper-locations: "classpath*:mapper/one/*.xml" #mybaits配置文件 #config-location: configuration: # 数据库下划线自动转化成驼峰规则 map-underscore-to-camel-case: true # 打印SQL语句 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mybatis-two: type-aliases-package: com.demo.model.two #mapper映射文件 #mapper-locations: "classpath*:mapper/two/*.xml" #mybaits配置文件 #config-location: configuration: # 数据库下划线自动转化成驼峰规则 map-underscore-to-camel-case: true # 打印SQL语句 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
分别来配置 mybatis
one数据源的:
@Configuration @MapperScan ( basePackages = {"com.demo.model.one" }, sqlSessionFactoryRef = "oneSqlSessionFactoryBean" ) @Slf4j public class MyBatisOneConfig { @Resource ( name = "oneDataSource" ) private DataSource dataSource; private static final String MAPPER_XML = "classpath:mapper/one/*.xml"; @Bean ( name = "oneSqlSessionFactoryBean" ) @ConfigurationProperties ( prefix = "mybatis-one" ) public SqlSessionFactory oneSqlSessionFactoryBean () throws Exception { try { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean (); sessionFactory.setDataSource (dataSource); sessionFactory.setMapperLocations ( new PathMatchingResourcePatternResolver () .getResources (MAPPER_XML)); return sessionFactory.getObject (); } catch ( Exception e ) { log.error ("Could not confiure mybatis session factory" + e.getMessage (), e); return null; } } }
two数据源:
@Configuration @MapperScan(basePackages = {"com.demo.model.two"}, sqlSessionFactoryRef = "twoSqlSessionFactoryBean") @Slf4j public class MyBatisTwoConfig { @Resource( name = "twoDataSource") private DataSource dataSourceTwo; private static final String XFFQ_XML = "classpath:mapper/two/*.xml"; @Bean(name = "twoSqlSessionFactoryBean") @ConfigurationProperties (prefix = "mybatis-two") public SqlSessionFactory twoSqlSessionFactoryBean() throws Exception { try { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource (dataSourceTwo); sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(XFFQ_XML)); return sessionFactoryBean.getObject (); } catch (Exception e) { log.error("Could not confiure mybatis session factory"+e.getMessage(),e); return null; } } }
这里说明一下,两个数据源的mapper是分开的,XML配置文件也是分开的,@MapperScan是分别扫描。
事物,在service的是类中,可以在需要增加事物的方法体上加上事物注解,
如下:
@Transactional (value ="twoTransaction", rollbackFor = Exception.class) @Override public void saveEntity ( TestEntity entity ) { mapper.insertEntity (entity); if (1<2){ throw new RuntimeException("事物测试"); } }
上述为个人学习记录,如有错误,请指出。
最后待解决的是 多数据源的数据一致性问题。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)
- 从0开始学习SpringCould(5)--SpringBoot 集成Mybatis使用Druid数据源
- SpringBoot+Druid+Mybatis配置多数据源
- spring-boot | 使员Druid 整合Mybatis 最简配置多数据源
- SpringBoot整合Mybatis配置druid多个数据源
- SpringBoot使用Druid数据源的配置方法
- (十一)Spring Boot整合Mybatis使用druid实现多数据源自动切换
- SpringBoot2.x 整合Druid数据源(详解及配置配置)
- 通过springboot+mybatis+druid配置动态数据源
- spring+mybatis使用druid配置数据源
- spring boot + mybatis + druid 配置双数据源
- mybatis使用spring-druid数据源连接池配置log4j打印sql语句以及开启监控平台
- Mybatis在非spring环境下配置文件中使用外部数据源(druidDatasource)
- SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例
- 记录SpringBoot使用Druid和Mybatis配置
- Springboot+Mybatis配置多数据源使用PageHelper分页
- Spring Boot : 集成mybatis、pagehelper插件、开启事务、druid数据源配置、mybatis-generator(十一)
- 数据源--Springboot配置使用Druid数据源
- spring boot druid mybatis 多数据源 配置
- spring boot druid mybatis 多数据源 配置