mybatisplus 多数据源配置
一、前言
项目同时用到mysql和oraclel两个数据库,因为兼顾分页就选择了mybatis-plus 多数据源
二、配置
首先在项目中引入依赖:
<!--Oracle 驱动-->
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<!-- MyBatis-Plus多数据源 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
application.yml 中的datasource配置如下:
spring:
application:
name: product-data-packet
datasource:
dynamic:
primary: mysql
datasource:
mysql:
url: jdbc:mysql://10.18.0.10:3306/graph_data?useUnicode=true&characterEncoding=UTF-8&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
hikari:
connection-timeout: 30000
minimum-idle: 5
maximum-pool-size: 20
auto-commit: true
pool-name: product-data-packet
max-lifetime: 1800000
connection-test-query: SELECT 1
oracle:
url: jdbc:oracle:thin:@10.123.0.221:1521:db804
driver-class-name: oracle.jdbc.driver.OracleDriver
username: root
password: 123456
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
typeAliasesPackage: com.allen.platform.**.domain.po
global-config:
db-config:
id-type: AUTO
insert-strategy: NOT_EMPTY
update-strategy: NOT_EMPTY
select-strategy: IGNORED
capital-mode: false
logic-delete-value: 1
logic-not-delete-value: 0
configuration:
map-underscore-to-camel-case: true
cache-enabled: true
#配置JdbcTypeForNull, oracle数据库必须配置
jdbc-type-for-null: 'null'
启动项目默认数据源为primary
同时官网还介绍了其他的一些模式
# 多主多从 纯粹多库(记得设置primary) 混合配置
spring: spring: spring:
datasource: datasource: datasource:
dynamic: dynamic: dynamic:
datasource: datasource: datasource:
master_1: mysql: master:
master_2: oracle: slave_1:
slave_1: sqlserver: slave_2:
slave_2: postgresql: oracle_1:
slave_3: h2: oracle_2:
如果想要切换数据源直接在service上添加注解@DS()
- 使用 @DS 切换数据源。
@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。
注解 | 结果 |
---|---|
没有@DS | 默认数据源 |
@DS(“dsName”) | dsName可以为组名也可以为具体某个库的名称 |
@Service
@DS("slave")
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public List selectAll() {
return jdbcTemplate.queryForList("select * from user");
}
@Override
@DS("slave_1")
public List selectByCondition() {
return jdbcTemplate.queryForList("select * from user where age >10");
}
}