注:本文主要介绍基于注解的方式,适合于有一个主库,其他库只使用个别表的情形,我会在文末贴出使用切面方式博客地址。
使用动态数据源不一样的是需要引入dynamic-datasource-spring-boot-starter包。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.2.RELEASEversion>
parent>
<groupId>com.yichegroupId>
<artifactId>article-rebuildingartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>article-rebuildingname>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.45version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.1.1version>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>dynamic-datasource-spring-boot-starterartifactId>
<version>2.5.4version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>1.1.10version>
dependency>
<dependency>
<groupId>org.apache.velocitygroupId>
<artifactId>velocity-engine-coreartifactId>
<version>2.1version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.jsoupgroupId>
<artifactId>jsoupartifactId>
<version>1.11.3version>
dependency>
<dependency>
<groupId>com.hankcsgroupId>
<artifactId>hanlpartifactId>
<version>portable-1.7.3version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
不要忘记配置默认数据源datasource.dynamic.primary,默认值为master。
server:
port: 8082
datasource:
# 使用druid数据源
# type: com.alibaba.druid.pool.DruidDataSource
dynamic:
primary: news#设置默认的数据源,默认值为master
datasource:
news: #数据源news
url: jdbc:mysql://ip:port/news_library?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false
username: user
password: pwd
driver-class-name: com.mysql.jdbc.Driver
user: #数据源user
url: jdbc:mysql://ip:port/guide?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false
username: user
password: pwd
driver-class-name: com.mysql.jdbc.Driver
druid:
#初始化时建立物理连接的个数
initialSize: 1
#池中最大连接数
maxActive: 20
#最小空闲连接
minIdle: 1
#获取连接时最大等待时间,单位毫秒
maxWait: 60000
#热部署生效
devtools:
restart:
enabled: true
#classpath目录下的WEB-INF文件夹内容修改不重启
exclude: WEB-INF/**
## Mybatis 配置
mybatis-plus:
check-config-location: true
configuration:
map-underscore-to-camel-case: true
#指定xml映射位置
mapper-locations: classpath:mapper/*.xml
#调试输出SQL
#mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
DruidDataSourceAutoConfigure会注入一个DataSourceWrapper,其会在原生的spring.datasource下找url,username,password等。动态数据源URL等配置是在dynamic下,因此需要排除,否则会报错。
排除方式有两种:
1)使用配置文件
spring:
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
2)使用注解
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。
注解在service实现或mapper接口方法上,不要同时在service和mapper注解。
@DS("user")
public interface UserMapper extends BaseMapper<User> {
}
@Service
@DS("user")
public class ModelServiceImpl extends ServiceImpl<ModelMapper, Model> implements IModelService {}
@Select("SELECT * FROM user")
@DS("user")
List<User> selectAll();
使用动态数据源主要需要在原始工程基础上 做几步简单操作:
附:
使用切面实现
使用springboot + druid + mybatisplus完成多数据源配置
springboot+druid+mybatis plus的多数据源配置