MyBatis-Plus多数据源配置
MyBatis-Plus多数据源配置
·
1. 需求
公司的项目才用MyBatis-Plus框架,快速实现了CRUD功能,减少大量的代码。近期在有需求需要操作两个MySQL数据库,有如下方案:
- 将另外一个库抽离成一个模块单独进行数据源配置,引入该模块并使用。
- 在同一模块中采用不同的数据源进行查询。
综合考虑到简洁轻便性,故而选用方案二。
2. 实现
2.1 数据库连接组件
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!-- druid 官方 starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.23</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<!-- 动态数据源依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
2.2 数据库连接相关配置
### 连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=10
spring.datasource.druid.max-active=20
spring.datasource.druid.web-stat-filter.exclusions="*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
spring.datasource.druid.stat-view-servlet.login-username=druid
spring.datasource.druid.stat-view-servlet.login-password=druid
spring.datasource.druid.stat-view-servlet.reset-enable=false
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# 动态数据源配置
spring.datasource.dynamic.primary=data-center
spring.datasource.dynamic.strict=false
spring.datasource.dynamic.datasource.product.url=jdbc:mysql://127.0.0.1:3306/product_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.dynamic.product.data-center.username=root
spring.datasource.dynamic.product.data-center.password=123654
spring.datasource.dynamic.product.data-center.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.order.url=jdbc:mysql://127.0.0.1:3306/order_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.dynamic.datasource.order.username=root
spring.datasource.dynamic.datasource.order.password=123654
spring.datasource.dynamic.datasource.order.driver-class-name=com.mysql.cj.jdbc.Driver
# mybatis配置
mybatis.mapper-locations=classpath:/mapper/*/*Mapper.xml
2.3 使用@DS注解切换数据源
@DS 可以注解在方法上或类上,可以在Mapper层或者ServiceImpl层加都是生效的,同时存在就近原则 方法上注解 优先于 类上注解。
注解 | 结果 |
---|---|
没有@DS | 默认数据源 |
@DS(“dsName”) | dsName可以为组名也可以为具体某个库的名称 |
@Service
@DS("data-center")
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
}
3. 踩坑
在多数据源改造之前,我的系统是正常运行在原始的单库配置下的。除了以上的改造,并没有做其他修改,启动应用报错如下:
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
Action:
Consider the following:
If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
If you have database settings to be loaded from a particular profile you may need to activate it (the profiles local are currently active).
根据错误可以看出来是没有读取到数据源的url,但是我确实配置了,最终发现默认走的是DruidDataSourceAutoConfigure的自动配置,因此我要禁用它 的自动配置。在应用启动类上排除掉即可:
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
public class BizExecutorApplication {
public static void main(String[] args) {
SpringApplication.run(BizExecutorApplication.class, args);
}
}
更多推荐
已为社区贡献6条内容
所有评论(0)