咱們在開發過程當中可能須要用到多個數據源,咱們有一個項目(MySQL)就是和別的項目(SQL Server)混合使用了。其中SQL Server是別的公司開發的,有些基本數據須要從他們平臺進行調取,那麼在項目中就須要支持多數據源,否則就只能獲取到本身的數據源的數據了。固然還有不少其它方面的使用場景,多數據庫,好比有專門負責生成id的數據庫,或者主從庫分離等等。總之多數據源可能在實際中仍是須要用到的。java
在Spring Boot中使用單數據源的配置很簡單,咱們簡單回憶下:只須要在application.properties進行基本的鏈接配置,在pom.xml引入基本的依賴便可。mysql
那麼多數據源的原理呢?其實很簡單,就是讀取配置文件,根據配置文件中的配置的數據源數量,動態建立dataSource並註冊到Spring中。在上一節咱們介紹了使用Java代碼將對象註冊到Spring中,多數據源就是基於這兒基礎進行動態建立的。本節大概須要這麼幾個步驟:web
(1)新建maven java project;spring
(2)在pom.xml添加相關依賴;sql
(3)編寫app.java啓動類;數據庫
(4)編寫application.properties配置文件;apache
(5)編寫多數據源註冊文件;tomcat
(6)編寫測試類springboot
(7)測試mvc
接下來讓咱們按照這個步驟來進行編寫咱們的代碼吧。
(1)新建maven java project;
咱們新建一個maven project進行測試,取名爲:spring-boot-multids
(2)在pom.xml添加相關依賴;
在pom.xml文件中加入依賴的庫文件,主要是springboot基本的,數據庫驅動,spring-jpa支持便可,具體pom.xml文件以下:
<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kfit</groupId>
<artifactId>spring-boot-multids</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-multids</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- jdk版本號,這裏須要你本地進行的jdk進行修改,這裏angel使用的是1.8的版本. -->
<java.version>1.8</java.version>
</properties>
<!--
springboot 父節點依賴,
引入這個以後相關的引入就不須要添加version配置,
springboot會自動選擇最合適的版本進行添加。
在這裏使用的1.3.3版本,可能目前官方有最新的版本了,你們能夠
使用最新的版本。
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<!-- 單元測試包,在這裏沒有使用到.-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- spring boot web支持:mvc,aop...
這個是最基本的,基本每個基本的demo都是須要引入的。
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mysql驅動.
咱們的demo是多數據源,在這裏使用Mysql數據庫.
-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- springjpa
springjpa中帶有自帶的tomcat數據鏈接池;
在代碼中咱們也須要用到.
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
</project>
在上面的配置文件中都有相應的解釋,你們能夠本身解讀下。
(3)編寫app.java啓動類;
編寫spring boot的啓動類:
com.kfit.App:
package com.kfit;
import org.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
/**
*
* @author Angel(QQ:412887952)
* @version v.0.1
*/
@SpringBootApplication
publicclass App {
publicstaticvoid main(String[] args) {
SpringApplication.run(App.class, args);
}
}
(4)編寫application.properties配置文件;
在這裏主要是多數據源的配置:
src/main/resources/application.properties:
########################################################
###配置文件包括1個主數據源和多個數據源,
###其中主數據源在Spring中的beanName默認爲dataSource,
###另外幾個數據源的beanName分包爲:ds一、ds二、ds3
###其中datasource的type屬性能夠具體指定到咱們須要的數據源上面,
###不指定狀況下默認爲:org.apache.tomcat.jdbc.pool.DataSource
###固然你也能夠把這些數據源配置到主dataSource數據庫中,而後讀取數據庫生成多數據源。固然這樣作的必要性並不大,難不成數據源還會常常變嗎。
########################################################
# 主數據源,默認的
#spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
# 更多數據源
custom.datasource.names=ds1,ds2,ds3
#custom.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource
custom.datasource.ds1.driverClassName =com.mysql.jdbc.Driver
custom.datasource.ds1.url=jdbc:mysql://localhost:3306/test1
custom.datasource.ds1.username=root
custom.datasource.ds1.password=root
#custom.datasource.ds2.type=com.zaxxer.hikari.HikariDataSource
custom.datasource.ds2.driverClassName =com.mysql.jdbc.Driver
custom.datasource.ds2.url=jdbc:mysql://localhost:3306/test
custom.datasource.ds2.username=root
custom.datasource.ds2.password=root
#custom.datasource.ds3.type=com.zaxxer.hikari.HikariDataSource
custom.datasource.ds3.driverClassName =com.mysql.jdbc.Driver
custom.datasource.ds3.url=jdbc:mysql://localhost:3306/test
custom.datasource.ds3.username=root
custom.datasource.ds3.password=root
# 下面爲鏈接池的補充設置,應用到上面全部數據源中
spring.datasource.maximum-pool-size=100
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
spring.datasource.validation-query=SELECT 1
spring.datasource.test-on-borrow=false
spring.datasource.test-while-idle=true
spring.datasource.time-between-eviction-runs-millis=18800