SpringBoot2.0+與Mybatis-puls整合多數據源(dynamic-datasource-spring-boot-starter)
寫在前面
在我們的項目中不可避免有時候和第三方對接中需要接入多數據源,一般來講我們大多數是採用AOP方式去動態的調整數據源,也有通過Druid去配置主從數據源的,本篇文章主要介紹多個數據源分開使用的情況,我們採用的苞米豆團隊的dynamic-datasource-spring-boot-starter 去實現多數據源
代碼實現部分如下
首先貼出我們的entity,Service,
UserEntity
package org.wuyd.testdockgame.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
/**
* @author wuyd
* 2019/7/11 10:33
*/
@Data
@Builder
@TableName("user")
public class UserEntity implements Serializable {
@TableId("id")
private Integer id;
private String age;
private String name;
private String password;
private String sex;
}
UserMapper
package org.wuyd.testdockgame.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.wuyd.testdockgame.entity.UserEntity;
/**
* @author wuyd
* 2019/7/11 10:40
*/
@Mapper
public interface UserMapper extends BaseMapper<UserEntity> {
}
UserService
package org.wuyd.testdockgame.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.wuyd.testdockgame.entity.UserEntity;
/**
* @author wuyd
* 2019/7/11 10:42
*/
public interface UserService extends IService<UserEntity> {
}
兩個實現類,不同數據源的UserServiceImpl
package org.wuyd.testdockgame.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.wuyd.testdockgame.entity.UserEntity;
import org.wuyd.testdockgame.mapper.UserMapper;
import org.wuyd.testdockgame.service.UserService;
/**
* @author wuyd
* 2019/7/11 10:43
*/
@Service("userService1")
public class UserService1Impl extends ServiceImpl<UserMapper, UserEntity> implements UserService {
}
package org.wuyd.testdockgame.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.wuyd.testdockgame.entity.UserEntity;
import org.wuyd.testdockgame.mapper.UserMapper;
import org.wuyd.testdockgame.service.UserService;
/**
* @author wuyd
* 2019/7/11 10:43
*/
@DS("db2")
@Service("userService2")
public class UserService2Impl extends ServiceImpl<UserMapper, UserEntity> implements UserService {
}
1.不用Druid的情況下
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.wuyd</groupId>
<artifactId>test-dock-game</artifactId>
<version>0.0.1</version>
<packaging>war</packaging>
<name>test-dock-game</name>
<description>測試用項目</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.8.0</version>
</dependency>
</dependencies>
</project>
配置文件
spring:
datasource:
p6spy: true
dynamic:
datasource:
master:
username: root
password:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test1?characterEncoding=utf8&useSSL=true
db2:
username: root
password:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test2?characterEncoding=utf8&useSSL=true
2.看結果
E:\dev\Java\jdk8\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:63232,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.profiles.active=dev -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:C:\Users\wuyd.wuyd\.IntelliJIdea2019.1\system\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "E:\dev\Java\jdk8\jre\lib\charsets.jar;E:\dev\Java\jdk8\jre\lib\deploy.jar;E:\dev\Java\jdk8\jre\lib\ext\access-bridge-64.jar;E:\dev\Java\jdk8\jre\lib\ext\cldrdata.jar;E:\dev\Java\jdk8\jre\lib\ext\dnsns.jar;E:\dev\Java\jdk8\jre\lib\ext\jaccess.jar;E:\dev\Java\jdk8\jre\lib\ext\jfxrt.jar;E:\dev\Java\jdk8\jre\lib\ext\localedata.jar;E:\dev\Java\jdk8\jre\lib\ext\nashorn.jar;E:\dev\Java\jdk8\jre\lib\ext\sunec.jar;E:\dev\Java\jdk8\jre\lib\ext\sunjce_provider.jar;E:\dev\Java\jdk8\jre\lib\ext\sunmscapi.jar;E:\dev\Java\jdk8\jre\lib\ext\sunpkcs11.jar;E:\dev\Java\jdk8\jre\lib\ext\zipfs.jar;E:\dev\Java\jdk8\jre\lib\javaws.jar;E:\dev\Java\jdk8\jre\lib\jce.jar;E:\dev\Java\jdk8\jre\lib\jfr.jar;E:\dev\Java\jdk8\jre\lib\jfxswt.jar;E:\dev\Java\jdk8\jre\lib\jsse.jar;E:\dev\Java\jdk8\jre\lib\management-agent.jar;E:\dev\Java\jdk8\jre\lib\plugin.jar;E:\dev\Java\jdk8\jre\lib\resources.jar;E:\dev\Java\jdk8\jre\lib\rt.jar;E:\dev\IdeaProjects\test-dock-game\target\classes;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-thymeleaf\2.1.6.RELEASE\spring-boot-starter-thymeleaf-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter\2.1.6.RELEASE\spring-boot-starter-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot\2.1.6.RELEASE\spring-boot-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-logging\2.1.6.RELEASE\spring-boot-starter-logging-2.1.6.RELEASE.jar;E:\dev\maven-repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;E:\dev\maven-repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;E:\dev\maven-repository\org\apache\logging\log4j\log4j-to-slf4j\2.11.2\log4j-to-slf4j-2.11.2.jar;E:\dev\maven-repository\org\apache\logging\log4j\log4j-api\2.11.2\log4j-api-2.11.2.jar;E:\dev\maven-repository\org\slf4j\jul-to-slf4j\1.7.26\jul-to-slf4j-1.7.26.jar;E:\dev\maven-repository\org\yaml\snakeyaml\1.23\snakeyaml-1.23.jar;E:\dev\maven-repository\org\thymeleaf\thymeleaf-spring5\3.0.11.RELEASE\thymeleaf-spring5-3.0.11.RELEASE.jar;E:\dev\maven-repository\org\thymeleaf\thymeleaf\3.0.11.RELEASE\thymeleaf-3.0.11.RELEASE.jar;E:\dev\maven-repository\org\attoparser\attoparser\2.0.5.RELEASE\attoparser-2.0.5.RELEASE.jar;E:\dev\maven-repository\org\unbescape\unbescape\1.1.6.RELEASE\unbescape-1.1.6.RELEASE.jar;E:\dev\maven-repository\org\slf4j\slf4j-api\1.7.26\slf4j-api-1.7.26.jar;E:\dev\maven-repository\org\thymeleaf\extras\thymeleaf-extras-java8time\3.0.4.RELEASE\thymeleaf-extras-java8time-3.0.4.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-web\2.1.6.RELEASE\spring-boot-starter-web-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-json\2.1.6.RELEASE\spring-boot-starter-json-2.1.6.RELEASE.jar;E:\dev\maven-repository\com\fasterxml\jackson\core\jackson-databind\2.9.9\jackson-databind-2.9.9.jar;E:\dev\maven-repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;E:\dev\maven-repository\com\fasterxml\jackson\core\jackson-core\2.9.9\jackson-core-2.9.9.jar;E:\dev\maven-repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.9\jackson-datatype-jdk8-2.9.9.jar;E:\dev\maven-repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.9\jackson-datatype-jsr310-2.9.9.jar;E:\dev\maven-repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.9\jackson-module-parameter-names-2.9.9.jar;E:\dev\maven-repository\org\hibernate\validator\hibernate-validator\6.0.17.Final\hibernate-validator-6.0.17.Final.jar;E:\dev\maven-repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;E:\dev\maven-repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;E:\dev\maven-repository\com\fasterxml\classmate\1.4.0\classmate-1.4.0.jar;E:\dev\maven-repository\org\springframework\spring-web\5.1.8.RELEASE\spring-web-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-beans\5.1.8.RELEASE\spring-beans-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-webmvc\5.1.8.RELEASE\spring-webmvc-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-aop\5.1.8.RELEASE\spring-aop-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-context\5.1.8.RELEASE\spring-context-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-expression\5.1.8.RELEASE\spring-expression-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-tomcat\2.1.6.RELEASE\spring-boot-starter-tomcat-2.1.6.RELEASE.jar;E:\dev\maven-repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;E:\dev\maven-repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.21\tomcat-embed-core-9.0.21.jar;E:\dev\maven-repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.21\tomcat-embed-el-9.0.21.jar;E:\dev\maven-repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.21\tomcat-embed-websocket-9.0.21.jar;E:\dev\maven-repository\org\springframework\spring-core\5.1.8.RELEASE\spring-core-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-jcl\5.1.8.RELEASE\spring-jcl-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-configuration-processor\2.1.6.RELEASE\spring-boot-configuration-processor-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\apache\httpcomponents\httpclient\4.5.9\httpclient-4.5.9.jar;E:\dev\maven-repository\org\apache\httpcomponents\httpcore\4.4.11\httpcore-4.4.11.jar;E:\dev\maven-repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;E:\dev\maven-repository\org\apache\commons\commons-lang3\3.9\commons-lang3-3.9.jar;E:\dev\maven-repository\com\baomidou\mybatis-plus-boot-starter\3.1.0\mybatis-plus-boot-starter-3.1.0.jar;E:\dev\maven-repository\com\baomidou\mybatis-plus\3.1.0\mybatis-plus-3.1.0.jar;E:\dev\maven-repository\com\baomidou\mybatis-plus-extension\3.1.0\mybatis-plus-extension-3.1.0.jar;E:\dev\maven-repository\com\baomidou\mybatis-plus-core\3.1.0\mybatis-plus-core-3.1.0.jar;E:\dev\maven-repository\com\baomidou\mybatis-plus-annotation\3.1.0\mybatis-plus-annotation-3.1.0.jar;E:\dev\maven-repository\org\mybatis\mybatis\3.5.0\mybatis-3.5.0.jar;E:\dev\maven-repository\com\github\jsqlparser\jsqlparser\1.4\jsqlparser-1.4.jar;E:\dev\maven-repository\org\mybatis\mybatis-spring\2.0.0\mybatis-spring-2.0.0.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-autoconfigure\2.1.6.RELEASE\spring-boot-autoconfigure-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-jdbc\2.1.6.RELEASE\spring-boot-starter-jdbc-2.1.6.RELEASE.jar;E:\dev\maven-repository\com\zaxxer\HikariCP\3.2.0\HikariCP-3.2.0.jar;E:\dev\maven-repository\org\springframework\spring-jdbc\5.1.8.RELEASE\spring-jdbc-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-tx\5.1.8.RELEASE\spring-tx-5.1.8.RELEASE.jar;E:\dev\maven-repository\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar;E:\dev\maven-repository\com\baomidou\dynamic-datasource-spring-boot-starter\2.4.2\dynamic-datasource-spring-boot-starter-2.4.2.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-aop\2.1.6.RELEASE\spring-boot-starter-aop-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\aspectj\aspectjweaver\1.9.4\aspectjweaver-1.9.4.jar;E:\dev\maven-repository\p6spy\p6spy\3.8.0\p6spy-3.8.0.jar;E:\dev\JetBrains\IntelliJ IDEA 2019.1.3\lib\idea_rt.jar" org.wuyd.testdockgame.TestDockGameApplication
Connected to the target VM, address: '127.0.0.1:63232', transport: 'socket'
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.6.RELEASE)
2019-07-11 14:31:22.411 INFO 15532 --- [ main] o.w.t.TestDockGameApplication : Starting TestDockGameApplication on DESKTOP-4VCGJNP with PID 15532 (E:\dev\IdeaProjects\test-dock-game\target\classes started by wuyd.wuyd in E:\dev\IdeaProjects\test-dock-game)
2019-07-11 14:31:22.413 INFO 15532 --- [ main] o.w.t.TestDockGameApplication : The following profiles are active: dev
2019-07-11 14:31:23.784 DEBUG 15532 --- [ main] c.b.m.a.MybatisPlusAutoConfiguration : Searching for mappers annotated with @Mapper
2019-07-11 14:31:23.784 DEBUG 15532 --- [ main] c.b.m.a.MybatisPlusAutoConfiguration : Using auto-configuration base package 'org.wuyd.testdockgame'
2019-07-11 14:31:25.076 INFO 15532 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 80 (http)
2019-07-11 14:31:25.173 INFO 15532 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-07-11 14:31:25.174 INFO 15532 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.21]
2019-07-11 14:31:25.458 INFO 15532 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/wuyd] : Initializing Spring embedded WebApplicationContext
2019-07-11 14:31:25.458 INFO 15532 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 3014 ms
2019-07-11 14:31:25.807 INFO 15532 --- [ main] com.zaxxer.hikari.HikariDataSource : master - Starting...
2019-07-11 14:31:26.385 INFO 15532 --- [ main] com.zaxxer.hikari.HikariDataSource : master - Start completed.
2019-07-11 14:31:26.385 INFO 15532 --- [ main] com.zaxxer.hikari.HikariDataSource : db2 - Starting...
2019-07-11 14:31:26.418 INFO 15532 --- [ main] com.zaxxer.hikari.HikariDataSource : db2 - Start completed.
2019-07-11 14:31:26.418 INFO 15532 --- [ main] c.b.d.d.DynamicRoutingDataSource : 初始共加載 2 個數據源
2019-07-11 14:31:26.418 INFO 15532 --- [ main] c.b.d.d.DynamicRoutingDataSource : 動態數據源-加載 db2 成功
2019-07-11 14:31:26.418 INFO 15532 --- [ main] c.b.d.d.DynamicRoutingDataSource : 動態數據源-加載 master 成功
2019-07-11 14:31:26.418 INFO 15532 --- [ main] c.b.d.d.DynamicRoutingDataSource : 當前的默認數據源是單數據源,數據源名爲 master
2019-07-11 14:31:26.655 DEBUG 15532 --- [ main] c.b.m.core.toolkit.GlobalConfigUtils : DeBug: MyBatis Plus Global configuration Initializing !
2019-07-11 14:31:27.549 INFO 15532 --- [ main] o.w.t.TestDockGameApplication : Started TestDockGameApplication in 5.697 seconds (JVM running for 7.4)
2019-07-11 14:33:32.196 INFO 15532 --- [p-nio-80-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/wuyd] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-07-11 14:33:32.196 INFO 15532 --- [p-nio-80-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2019-07-11 14:33:32.230 INFO 15532 --- [p-nio-80-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 34 ms
2019-07-11 14:33:32.295 DEBUG 15532 --- [p-nio-80-exec-1] c.b.d.d.DynamicRoutingDataSource : 從默認數據源中返回數據
2019-07-11 14:33:32.413 INFO 15532 --- [p-nio-80-exec-1] o.w.t.controller.ThymeleafController : [UserEntity(id=1, age=12, name=張三, password=123456, sex=男), UserEntity(id=2, age=15, name=張一, password=123456, sex=男), UserEntity(id=3, age=14, name=張四, password=123456, sex=女), UserEntity(id=4, age=13, name=張二, password=123456, sex=男)]
2019-07-11 14:33:32.418 DEBUG 15532 --- [p-nio-80-exec-1] c.b.d.d.DynamicRoutingDataSource : 從 db2 單數據源中返回數據源
2019-07-11 14:33:32.438 INFO 15532 --- [p-nio-80-exec-1] o.w.t.controller.ThymeleafController : [UserEntity(id=1, age=12, name=李一, password=123456, sex=男), UserEntity(id=2, age=11, name=李二, password=123456, sex=男), UserEntity(id=3, age=10, name=李三, password=1236543, sex=女)]
Druid的情況下
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.wuyd</groupId>
<artifactId>test-dock-game</artifactId>
<version>0.0.1</version>
<packaging>war</packaging>
<name>test-dock-game</name>
<description>測試用項目</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.8.0</version>
</dependency>
</dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
</project>
配置文件
spring:
datasource:
druid:
stat-view-servlet:
loginUsername: admin
loginPassword: 123456
dynamic:
druid: #以下是全局默認值,可以全局更改
minIdle: 5
maxActive: 20
filters: stat,wall # 注意這個值和druid原生不一致,默認啓動了stat,wall
stat:
merge-sql: true
log-slow-sql: true
datasource:
master:
username: root
password:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test1?characterEncoding=utf8&useSSL=true
db2:
username: root
password:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test2?characterEncoding=utf8&useSSL=true
2.看結果
E:\dev\Java\jdk8\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:64668,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.profiles.active=dev -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:C:\Users\wuyd.wuyd\.IntelliJIdea2019.1\system\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "E:\dev\Java\jdk8\jre\lib\charsets.jar;E:\dev\Java\jdk8\jre\lib\deploy.jar;E:\dev\Java\jdk8\jre\lib\ext\access-bridge-64.jar;E:\dev\Java\jdk8\jre\lib\ext\cldrdata.jar;E:\dev\Java\jdk8\jre\lib\ext\dnsns.jar;E:\dev\Java\jdk8\jre\lib\ext\jaccess.jar;E:\dev\Java\jdk8\jre\lib\ext\jfxrt.jar;E:\dev\Java\jdk8\jre\lib\ext\localedata.jar;E:\dev\Java\jdk8\jre\lib\ext\nashorn.jar;E:\dev\Java\jdk8\jre\lib\ext\sunec.jar;E:\dev\Java\jdk8\jre\lib\ext\sunjce_provider.jar;E:\dev\Java\jdk8\jre\lib\ext\sunmscapi.jar;E:\dev\Java\jdk8\jre\lib\ext\sunpkcs11.jar;E:\dev\Java\jdk8\jre\lib\ext\zipfs.jar;E:\dev\Java\jdk8\jre\lib\javaws.jar;E:\dev\Java\jdk8\jre\lib\jce.jar;E:\dev\Java\jdk8\jre\lib\jfr.jar;E:\dev\Java\jdk8\jre\lib\jfxswt.jar;E:\dev\Java\jdk8\jre\lib\jsse.jar;E:\dev\Java\jdk8\jre\lib\management-agent.jar;E:\dev\Java\jdk8\jre\lib\plugin.jar;E:\dev\Java\jdk8\jre\lib\resources.jar;E:\dev\Java\jdk8\jre\lib\rt.jar;E:\dev\IdeaProjects\test-dock-game\target\classes;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-thymeleaf\2.1.6.RELEASE\spring-boot-starter-thymeleaf-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter\2.1.6.RELEASE\spring-boot-starter-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot\2.1.6.RELEASE\spring-boot-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-logging\2.1.6.RELEASE\spring-boot-starter-logging-2.1.6.RELEASE.jar;E:\dev\maven-repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;E:\dev\maven-repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;E:\dev\maven-repository\org\apache\logging\log4j\log4j-to-slf4j\2.11.2\log4j-to-slf4j-2.11.2.jar;E:\dev\maven-repository\org\apache\logging\log4j\log4j-api\2.11.2\log4j-api-2.11.2.jar;E:\dev\maven-repository\org\slf4j\jul-to-slf4j\1.7.26\jul-to-slf4j-1.7.26.jar;E:\dev\maven-repository\org\yaml\snakeyaml\1.23\snakeyaml-1.23.jar;E:\dev\maven-repository\org\thymeleaf\thymeleaf-spring5\3.0.11.RELEASE\thymeleaf-spring5-3.0.11.RELEASE.jar;E:\dev\maven-repository\org\thymeleaf\thymeleaf\3.0.11.RELEASE\thymeleaf-3.0.11.RELEASE.jar;E:\dev\maven-repository\org\attoparser\attoparser\2.0.5.RELEASE\attoparser-2.0.5.RELEASE.jar;E:\dev\maven-repository\org\unbescape\unbescape\1.1.6.RELEASE\unbescape-1.1.6.RELEASE.jar;E:\dev\maven-repository\org\thymeleaf\extras\thymeleaf-extras-java8time\3.0.4.RELEASE\thymeleaf-extras-java8time-3.0.4.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-web\2.1.6.RELEASE\spring-boot-starter-web-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-json\2.1.6.RELEASE\spring-boot-starter-json-2.1.6.RELEASE.jar;E:\dev\maven-repository\com\fasterxml\jackson\core\jackson-databind\2.9.9\jackson-databind-2.9.9.jar;E:\dev\maven-repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;E:\dev\maven-repository\com\fasterxml\jackson\core\jackson-core\2.9.9\jackson-core-2.9.9.jar;E:\dev\maven-repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.9\jackson-datatype-jdk8-2.9.9.jar;E:\dev\maven-repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.9\jackson-datatype-jsr310-2.9.9.jar;E:\dev\maven-repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.9\jackson-module-parameter-names-2.9.9.jar;E:\dev\maven-repository\org\hibernate\validator\hibernate-validator\6.0.17.Final\hibernate-validator-6.0.17.Final.jar;E:\dev\maven-repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;E:\dev\maven-repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;E:\dev\maven-repository\com\fasterxml\classmate\1.4.0\classmate-1.4.0.jar;E:\dev\maven-repository\org\springframework\spring-web\5.1.8.RELEASE\spring-web-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-beans\5.1.8.RELEASE\spring-beans-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-webmvc\5.1.8.RELEASE\spring-webmvc-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-aop\5.1.8.RELEASE\spring-aop-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-context\5.1.8.RELEASE\spring-context-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-expression\5.1.8.RELEASE\spring-expression-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-tomcat\2.1.6.RELEASE\spring-boot-starter-tomcat-2.1.6.RELEASE.jar;E:\dev\maven-repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;E:\dev\maven-repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.21\tomcat-embed-core-9.0.21.jar;E:\dev\maven-repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.21\tomcat-embed-el-9.0.21.jar;E:\dev\maven-repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.21\tomcat-embed-websocket-9.0.21.jar;E:\dev\maven-repository\org\springframework\spring-core\5.1.8.RELEASE\spring-core-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-jcl\5.1.8.RELEASE\spring-jcl-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-configuration-processor\2.1.6.RELEASE\spring-boot-configuration-processor-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\apache\httpcomponents\httpclient\4.5.9\httpclient-4.5.9.jar;E:\dev\maven-repository\org\apache\httpcomponents\httpcore\4.4.11\httpcore-4.4.11.jar;E:\dev\maven-repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;E:\dev\maven-repository\org\apache\commons\commons-lang3\3.9\commons-lang3-3.9.jar;E:\dev\maven-repository\com\baomidou\mybatis-plus-boot-starter\3.1.0\mybatis-plus-boot-starter-3.1.0.jar;E:\dev\maven-repository\com\baomidou\mybatis-plus\3.1.0\mybatis-plus-3.1.0.jar;E:\dev\maven-repository\com\baomidou\mybatis-plus-extension\3.1.0\mybatis-plus-extension-3.1.0.jar;E:\dev\maven-repository\com\baomidou\mybatis-plus-core\3.1.0\mybatis-plus-core-3.1.0.jar;E:\dev\maven-repository\com\baomidou\mybatis-plus-annotation\3.1.0\mybatis-plus-annotation-3.1.0.jar;E:\dev\maven-repository\org\mybatis\mybatis\3.5.0\mybatis-3.5.0.jar;E:\dev\maven-repository\com\github\jsqlparser\jsqlparser\1.4\jsqlparser-1.4.jar;E:\dev\maven-repository\org\mybatis\mybatis-spring\2.0.0\mybatis-spring-2.0.0.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-autoconfigure\2.1.6.RELEASE\spring-boot-autoconfigure-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-jdbc\2.1.6.RELEASE\spring-boot-starter-jdbc-2.1.6.RELEASE.jar;E:\dev\maven-repository\com\zaxxer\HikariCP\3.2.0\HikariCP-3.2.0.jar;E:\dev\maven-repository\org\springframework\spring-jdbc\5.1.8.RELEASE\spring-jdbc-5.1.8.RELEASE.jar;E:\dev\maven-repository\org\springframework\spring-tx\5.1.8.RELEASE\spring-tx-5.1.8.RELEASE.jar;E:\dev\maven-repository\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar;E:\dev\maven-repository\com\alibaba\druid-spring-boot-starter\1.1.10\druid-spring-boot-starter-1.1.10.jar;E:\dev\maven-repository\com\alibaba\druid\1.1.10\druid-1.1.10.jar;E:\dev\maven-repository\org\slf4j\slf4j-api\1.7.26\slf4j-api-1.7.26.jar;E:\dev\maven-repository\com\baomidou\dynamic-datasource-spring-boot-starter\2.5.5\dynamic-datasource-spring-boot-starter-2.5.5.jar;E:\dev\maven-repository\org\springframework\boot\spring-boot-starter-aop\2.1.6.RELEASE\spring-boot-starter-aop-2.1.6.RELEASE.jar;E:\dev\maven-repository\org\aspectj\aspectjweaver\1.9.4\aspectjweaver-1.9.4.jar;E:\dev\maven-repository\p6spy\p6spy\3.8.0\p6spy-3.8.0.jar;E:\dev\JetBrains\IntelliJ IDEA 2019.1.3\lib\idea_rt.jar" org.wuyd.testdockgame.TestDockGameApplication
Connected to the target VM, address: '127.0.0.1:64668', transport: 'socket'
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.6.RELEASE)
2019-07-11 15:16:29.200 INFO 14152 --- [ main] o.w.t.TestDockGameApplication : Starting TestDockGameApplication on DESKTOP-4VCGJNP with PID 14152 (E:\dev\IdeaProjects\test-dock-game\target\classes started by wuyd.wuyd in E:\dev\IdeaProjects\test-dock-game)
2019-07-11 15:16:29.202 INFO 14152 --- [ main] o.w.t.TestDockGameApplication : The following profiles are active: dev
2019-07-11 15:16:29.701 DEBUG 14152 --- [ main] c.b.m.a.MybatisPlusAutoConfiguration : Searching for mappers annotated with @Mapper
2019-07-11 15:16:29.702 DEBUG 14152 --- [ main] c.b.m.a.MybatisPlusAutoConfiguration : Using auto-configuration base package 'org.wuyd.testdockgame'
2019-07-11 15:16:30.157 INFO 14152 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 80 (http)
2019-07-11 15:16:30.173 INFO 14152 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-07-11 15:16:30.174 INFO 14152 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.21]
2019-07-11 15:16:30.301 INFO 14152 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/wuyd] : Initializing Spring embedded WebApplicationContext
2019-07-11 15:16:30.302 INFO 14152 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1074 ms
2019-07-11 15:16:30.400 INFO 14152 --- [ main] c.b.d.d.DynamicDataSourceCreator : 動態數據源-檢測到druid存在,如配置中未指定type,druid會默認配置
2019-07-11 15:16:30.529 INFO 14152 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1,master} inited
2019-07-11 15:16:30.530 INFO 14152 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-2,db2} inited
2019-07-11 15:16:30.530 INFO 14152 --- [ main] c.b.d.d.DynamicRoutingDataSource : 初始共加載 2 個數據源
2019-07-11 15:16:30.530 INFO 14152 --- [ main] c.b.d.d.DynamicRoutingDataSource : 動態數據源-加載 db2 成功
2019-07-11 15:16:30.530 INFO 14152 --- [ main] c.b.d.d.DynamicRoutingDataSource : 動態數據源-加載 master 成功
2019-07-11 15:16:30.530 INFO 14152 --- [ main] c.b.d.d.DynamicRoutingDataSource : 當前的默認數據源是單數據源,數據源名爲 master
2019-07-11 15:16:30.769 DEBUG 14152 --- [ main] c.b.d.d.DynamicRoutingDataSource : 從默認數據源中返回數據
2019-07-11 15:16:33.371 INFO 14152 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 80 (http) with context path '/wuyd'
2019-07-11 15:16:33.373 INFO 14152 --- [ main] o.w.t.TestDockGameApplication : Started TestDockGameApplication in 4.446 seconds (JVM running for 5.003)
2019-07-11 15:16:49.660 INFO 14152 --- [p-nio-80-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/wuyd] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-07-11 15:16:49.660 INFO 14152 --- [p-nio-80-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2019-07-11 15:16:49.673 INFO 14152 --- [p-nio-80-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 13 ms
2019-07-11 15:16:49.967 DEBUG 14152 --- [p-nio-80-exec-2] c.b.d.d.DynamicRoutingDataSource : 從默認數據源中返回數據
2019-07-11 15:16:50.347 INFO 14152 --- [p-nio-80-exec-2] o.w.t.controller.ThymeleafController : [UserEntity(id=1, age=12, name=張三, password=123456, sex=男), UserEntity(id=2, age=15, name=張一, password=123456, sex=男), UserEntity(id=3, age=14, name=張四, password=123456, sex=女), UserEntity(id=4, age=13, name=張二, password=123456, sex=男)]
2019-07-11 15:16:50.351 DEBUG 14152 --- [p-nio-80-exec-2] c.b.d.d.DynamicRoutingDataSource : 從 db2 單數據源中返回數據源
2019-07-11 15:16:50.424 INFO 14152 --- [p-nio-80-exec-2] o.w.t.controller.ThymeleafController : [UserEntity(id=1, age=12, name=李一, password=123456, sex=男), UserEntity(id=2, age=11, name=李二, password=123456, sex=男), UserEntity(id=3, age=10, name=李三, password=1236543, sex=女)]