• 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}jdbclibojdbc14.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属性)。在这种情况下,您必须重写您的配置。

  • 相关阅读:
    编译原理笔记 2
    编译原理笔记 1
    初步学习计算机图形学 [闫令琪]
    复杂 Web 前端的设计
    使用 GitHub Actions 部署 .Net 5 程序
    ES 2020 Optional Chain (可选链)
    2020 Web 前端学习记录
    WPF TreeView 支持多选
    linux (CentOS 7)报错:yum 命令报错 “ Cannot find a valid baseurl for repo: base/7/x86_6 ”
    node.js 报错
  • 原文地址:https://www.cnblogs.com/viwofer/p/13149863.html
Copyright © 2020-2023  润新知