springboot+druid+mybatis plus的多数据源配置

注:本文主要介绍基于注解的方式,适合于有一个主库,其他库只使用个别表的情形,我会在文末贴出使用切面方式博客地址。

1、创建工程引入依赖

使用动态数据源不一样的是需要引入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>

2、动态数据源配置

不要忘记配置默认数据源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

3、排除原生Druid的快速配置类

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);
  }
}

4、给使用非默认数据源添加注解@DS

@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();

总结

使用动态数据源主要需要在原始工程基础上 做几步简单操作:

  • 1 引入动态数据源依赖
  • 2 动态数据源配置,注意配置默认数据源
  • 3 排除原始配置类
  • 4 在需要的地方添加@DS注解

附:
使用切面实现
使用springboot + druid + mybatisplus完成多数据源配置
springboot+druid+mybatis plus的多数据源配置

你可能感兴趣的:(SpringBoot)