42.1 Spring Boot多數據源

咱們在開發過程當中可能須要用到多個數據源,咱們有一個項目(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

相關文章
相關標籤/搜索