SpringBoot-多數據源配置-Mysql-SqlServer-Oracle


Maven依賴

        <!-- mysql的jdbc依賴 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
        <!-- sqlserver的jdbc依賴 -->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>7.4.1.jre8</version>
        </dependency>

application.yml配置

注意是jdbc-url不是url,否則報jdbcUrl is required with driverClassName錯誤

spring:
  application:
    name: demo-multi-datasource
  datasource:
    mysql:
      jdbc-url: jdbc:mysql://localhost:3306/demo?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&nullCatalogMeansCurrent=true
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver
    mssql:
      jdbc-url: jdbc:sqlserver://localhost:1433;databasename=demo
      username: sa
      password: sa
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver

mysql配置類

其中com.htkm.demo.mysql.dao是DAO層,

com/htkm/demo/mysql/mapping/dao/是映射文件目錄

package com.htkm.demo.mysql.config;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * @author viwofer
 * @created 2019-12-25 21:44
 */
@Configuration(value="mysql")
@MapperScan(basePackages = "com.htkm.demo.mysql.dao", sqlSessionFactoryRef = "MysqlSqlSessionFactory")
public class DataSourceConfig {
    @Bean(name = "MysqlDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.mysql")
    public DataSource getDateSource() {
        return DataSourceBuilder.create().build();
    }

    /**
     * 配置事務管理
     */
    @Bean(name = "MysqlTransactionManager")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("MysqlDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
    /**
     * 配置工廠
     * @param datasource
     * @return
     * @throws Exception
     */
    @Bean(name = "MysqlSqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("MysqlDataSource") DataSource datasource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath*:com/htkm/demo/mysql/mapping/dao/*.xml"));
        return bean.getObject();
    }

    /**
     * 配置會話
     * @param sessionfactory
     * @return
     */
    @Bean("MysqlSqlSessionTemplate")
    public SqlSessionTemplate testsqlsessiontemplate(
            @Qualifier("MysqlSqlSessionFactory") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }
}

 

mssql配置類

其中com.htkm.demo.mssql.dao是DAO層,

com/htkm/demo/mssql/mapping/dao/是映射文件目錄

 

package com.htkm.demo.mssql.config;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * @author viwofer
 * @created 2019-12-25 21:44
 */
@Configuration(value = "mssql")
@MapperScan(basePackages = "com.htkm.demo.mssql.dao", sqlSessionFactoryRef = "MssqlSqlSessionFactory")
public class DataSourceConfig {
    /**
     * 配置數據源
     * @return
     */
    @Bean(name = "MssqlDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.mssql")
    public DataSource getDateSource() {
        return DataSourceBuilder.create().build();
    }

    /**
     * 配置事務管理
     */
    @Bean(name = "MssqlTransactionManager")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("MssqlDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * 配置工廠
     * @param datasource
     * @return
     * @throws Exception
     */
    @Bean(name = "MssqlSqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("MssqlDataSource") DataSource datasource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath*:com/htkm/demo/mssql/mapping/dao/*.xml"));
        return bean.getObject();
    }

    /**
     * 配置會話
     * @param sessionfactory
     * @return
     */
    @Bean("MssqlSqlSessionTemplate")
    public SqlSessionTemplate testsqlsessiontemplate(
            @Qualifier("MssqlSqlSessionFactory") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }
}

 

Oracle配置

首先要得到Oracle JDBC Driver

1.通過Oracle官方網站下載相應版本:

https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html

2.通過Oracle的安裝目錄獲得,位置在“{ORACLE_HOME}\jdbc\lib\ojdbc14.jar”

手動安裝安裝

命令如下:

mvn install:install-file -Dfile={Path/to/your/ojdbc.jar} -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0 -Dpackaging=jar

pom.xml添加依賴

<dependencies>
    <!-- 添加oracle jdbc driver -->  
    <dependency>    
        <groupId>com.oracle</groupId>    
        <artifactId>ojdbc8</artifactId>    
        <version>11.2.0.4.0</version>
    </dependency>
  </dependencies>
<!--報錯不支持字符集用這個-->
<!-- https://mvnrepository.com/artifact/cn.easyproject/orai18n -->
<dependency>
   <groupId>cn.easyproject</groupId>
   <artifactId>orai18n</artifactId>
   <version>12.1.0.2.0</version>
</dependency>

 

application.ym配置

spring.datasource.jdbc-url=jdbc:oracle:thin:@localhost:1521:data
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

 

jdbcUrl is required with driverClassName

錯誤:Cause: java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.

application.yml:

spring:
  application:
    name: demo-multi-datasource
  datasource:
    mysql:
      url: jdbc:mysql://localhost:3306/demo?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&nullCatalogMeansCurrent=true
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver
    mssql:
      url: jdbc:sqlserver://localhost:1433;databasename=demo
      username: sa
      password: sa
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver

將url更改為jdbc-url

spring:
  application:
    name: demo-multi-datasource
  datasource:
    mysql:
      jdbc-url: jdbc:mysql://localhost:3306/demo?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&nullCatalogMeansCurrent=true
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver
    mssql:
      jdbc-url: jdbc:sqlserver://localhost:1433;databasename=demo
      username: sa
      password: sa
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver

spring.datasource.url 數據庫的 JDBC URL。

spring.datasource.jdbc-url 用來重寫自定義連接池

官方文檔的解釋是:

因為連接池的實際類型沒有被公開,所以在您的自定義數據源的元數據中沒有生成密鑰,而且在IDE中沒有完成(因為DataSource接口沒有暴露屬性)。另外,如果您碰巧在類路徑上有Hikari,那么這個基本設置就不起作用了,因為Hikari沒有url屬性(但是確實有一個jdbcUrl屬性)。在這種情況下,您必須重寫您的配置。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM