zoukankan      html  css  js  c++  java
  • SpringBoot添加多数据源mysql和oracle

    项目结构

              多数据源配置文件

       MultiDataSourceConfig.java

       SqlSessionTemplate1.java

       SqlSessionTemplate2.java

    package com.holytax.accenture_fp_in.datasource;
    
    import javax.sql.DataSource;
    
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    
    /**
     * 配置多数据源
     * 
     * 
     *
     */
    @Configuration
    public class MultiDataSourceConfig {
    
        @Bean(name = "primaryDataSource")
        @Qualifier("primaryDataSource")
        @Primary // 定义主数据源
        @ConfigurationProperties(prefix = "spring.datasource")
        public DataSource primaryDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "secondaryDataSource")
        @Qualifier("secondaryDataSource")
        @ConfigurationProperties(prefix = "custom.datasource.ds1")
        public DataSource secondaryDataSource() {
            return DataSourceBuilder.create().build();
        }
    }
    package com.holytax.accenture_fp_in.datasource;
    
    import javax.sql.DataSource;
    
    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.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    
    /**
     * spring 整合 mybatis 配置SqlSessionTemplate
     * 
     *
     */
    @Configuration
    @MapperScan(basePackages = "com.holytax.accenture_fp_in.mapper", sqlSessionTemplateRef  = "primarySqlSessionTemplate")
    public class SqlSessionTemplate1 {
        
        @Bean(name = "primarySqlSessionFactory")
        @Primary
        public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource)
                throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
            return bean.getObject();
        }
    
        //配置声明式事务管理器
        @Bean(name = "primaryTransactionManager")
        @Primary
        public PlatformTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "primarySqlSessionTemplate")
        @Primary
        public SqlSessionTemplate primarySqlSessionTemplate(
                @Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
        
    }
    package com.holytax.accenture_fp_in.datasource;
    
    import javax.sql.DataSource;
    
    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.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    
    @Configuration
    @MapperScan(basePackages = "com.holytax.accenture_fp_in.oracleMapper", sqlSessionTemplateRef = "secondarySqlSessionTemplate")
    public class SqlSessionTemplate2 {
    
        @Bean(name = "secondarySqlSessionFactory")
        public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource)
                throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            bean.setMapperLocations(
                    new PathMatchingResourcePatternResolver().getResources("classpath:oracleMapper/*.xml"));
            return bean.getObject();
        }
    
        @Bean(name = "secondaryTransactionManager")
        public PlatformTransactionManager secondaryTransactionManager(
                @Qualifier("secondaryDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "secondarySqlSessionTemplate")
        public SqlSessionTemplate secondarySqlSessionTemplate(
                @Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }

             这里是对多数据源,扫描做了处理。mapper 对应Mysql的部分处理 SqlSessionTemplate1.java。oracleMapper 对应oracle的部分处理 SqlSessionTemplate2.java.

          就是业务层的Mapper文件,不同数据源扫描不同的包。

       2、 数据库application.properties配置文件

    #Server
    server.port=8081
    #MYBATIS
    mybatis.configLocation:classpath:mybatis-config.xml
    #mybatis.mapper-locations=classpath:mapper/*.xml    //注意在单数据时,这配置文件,和springboot启动文件上配置了,扫描路劲,我们要把他干掉。因为我们上边的,
    #测试                                                // SqlSessionTemplate1.java,SqlSessionTemplate2.java.文件已经对这些内容作了处理。
    spring.datasource.url=jdbc:mysql://localhost:3306/accenture?useSSL=true
    spring.datasource.username=user
    spring.datasource.password=pass
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
    # 更多数据源
    custom.datasource.ds1.driver-class-name=oracle.jdbc.driver.OracleDriver
    custom.datasource.ds1.url=jdbc:oracle:thin:@localhost:1521:testdb
    custom.datasource.ds1.username=user
    custom.datasource.ds1.password=pass
    
    spring.datasource.initialSize=5
    spring.datasource.minIdle=5
    spring.datasource.maxActive=20
    spring.datasource.maxWait=60000
    spring.datasource.timeBetweenEvictionRunsMillis=60000
    spring.datasource.validationQuery=SELECT 1
    spring.datasource.testWhileIdle=true
    spring.datasource.testOnBorrow=false
    spring.datasource.testOnReturn=false
    spring.datasource.poolPreparedStatements=true
    spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
    spring.datasource.filters=stat
    spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    #url params
    spring.holytax.interface-url=http://localohst:8080/hltypt/api/callservice.do
    spring.holytax.interface-company=accenture

      3、services 业务处理层

                                     只需要在,方法加上事务@Transactional,因为我们,配置的不同的扫描包,,就相当动态在方法上指定数据源,只不过,,我们这里作了固定的区分。

    4、pom.xml 文件  添加对于数据库的驱动支持,

    <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.35</version>
            </dependency>
            <!-- 添加oracle jdbc driver -->                //如果maven仓库没有,下载导入本地maven仓库
            <dependency>
                <groupId>com.oracle</groupId>
                <artifactId>ojdbc14</artifactId>
                <version>10.2.0.5.0</version>
            </dependency>

       

  • 相关阅读:
    java 集合中将元素倒序排列
    自定义AccessDeniedHandler
    如何在spring中获取request对象
    mybatis 做 insert操作的时候返回插入的那条数据的id
    Spring Security-用户密码自定义加密
    JS定义类及对象
    HTML5坦克大战(1)绘制坦克
    JSON学习【转自慕课网】
    HTML5之语音识别实例
    绚丽的倒计时(1)---画出时钟
  • 原文地址:https://www.cnblogs.com/aGboke/p/8120322.html
Copyright © 2011-2022 走看看