zoukankan      html  css  js  c++  java
  • springboot 不同类型多数据源配置及使用

    springboot多数据源配置:

             datasource.master.jdbc=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=true
             datasource.master.username=root
             datasource.master.password=123456
             datasource.master.driver-class-name=com.mysql.jdbc.Driver


            datasource.master.url=jdbc:oracle:thin:@localhost:1521:test
            datasource.master.username=acct
            datasource.master.password=123456
            datasource.master.driver-class-name=oracle.jdbc.driver.OracleDriver
            datasource.master.max-idle=10
            datasource.master.max-wait=10000
            datasource.master.min-idle=5
            datasource.master.initial-size=5
            datasource.master.validation-query=SELECT 1
            datasource.master.test-on-borrow=false
            datasource.master.test-while-idle=true
            datasource.master.time-between-eviction-runs-millis=18800

    第一个数据源实现:

    import javax.sql.DataSource;

    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    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.context.annotation.Primary;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    /**
    * 主数据源配置
    * @author zyl
    *
    */
    @Configuration
    //读取自定义配置文件 datasource.properties
    @PropertySource("classpath:config/datasource.properties")
    //扫描 Mapper 接口并容器管理
    @MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
    public class MasterDataSourceConfig {

    // 精确到 master 目录,以便跟其他数据源隔离
    static final String PACKAGE = "com.acct.dao.master";
    static final String TYPE_ALIASES_PACKAGE = "com.acct.domain.entity.master";
    static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml";

    @Bean(name = "masterDataSource")
    @Primary   
    @ConfigurationProperties(prefix = "datasource.master")
    public DataSource masterDataSource() {
    return DataSourceBuilder.create().build();
    }

    @Bean(name = "masterTransactionManager")
    @Primary
    public DataSourceTransactionManager masterTransactionManager() {
    return new DataSourceTransactionManager(masterDataSource());
    }

    @Bean(name = "masterSqlSessionFactory")
    @Primary
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
    throws Exception {
    final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(masterDataSource);
    sessionFactory.setTypeAliasesPackage(MasterDataSourceConfig.TYPE_ALIASES_PACKAGE);
    sessionFactory.setMapperLocations(
    new PathMatchingResourcePatternResolver().getResources(MasterDataSourceConfig.MAPPER_LOCATION));
    return sessionFactory.getObject();
    }

    }

    @Primary 注解默认为第一个数据源

    第二个数据源实现:

    import javax.sql.DataSource;

    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    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.context.annotation.PropertySource;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;

    /**
    * 从数据源配置
    * @author zyl
    *
    */
    @Configuration
    //读取自定义配置文件 datasource.properties
    @PropertySource("classpath:config/datasource.properties")
    // 扫描 Mapper 接口并容器管理
    @MapperScan(basePackages = ClusterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "clusterSqlSessionFactory")
    public class ClusterDataSourceConfig {
    // 精确到 cluster 目录,以便跟其他数据源隔离
    static final String PACKAGE = "com.acct.dao.cluster";
    static final String TYPE_ALIASES_PACKAGE = "com.acct.domain.entity.cluster";
    static final String MAPPER_LOCATION = "classpath:mapper/cluster/*.xml";
    @Bean(name = "clusterDataSource")
    @ConfigurationProperties(prefix = "datasource.cluster")
    public DataSource clusterDataSource() {
    return DataSourceBuilder.create().build();
    }

    @Bean(name = "clusterTransactionManager")
    public DataSourceTransactionManager clusterTransactionManager() {
    return new DataSourceTransactionManager(clusterDataSource());
    }

    @Bean(name = "clusterSqlSessionFactory")
    public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("clusterDataSource") DataSource clusterDataSource)
    throws Exception {
    final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(clusterDataSource);
    sessionFactory.setTypeAliasesPackage(ClusterDataSourceConfig.TYPE_ALIASES_PACKAGE);
    sessionFactory.setMapperLocations(
    new PathMatchingResourcePatternResolver().getResources(ClusterDataSourceConfig.MAPPER_LOCATION));
    return sessionFactory.getObject();
    }
    }

            

    目录结构:

        

     如有问题:请看我的下一篇文章:https://www.cnblogs.com/haoliyou/p/9604241.html

    启动正常,ok!

  • 相关阅读:
    RedisHelper
    2010年:Socket实践问题求助解决一贴通
    React Hooks 父组件调用子组件的方法
    React Hooks 进入页面以后自动 focus 到某个输入框
    react hooks 太多的useState 显得很冗余,有没有什么规整的方法呢?
    react项目取消部分eslint检查
    使用useMemo优化性能
    react的useEffect 第二个参数
    如何使用 Postman Interceptor(可以拦截浏览器的请求到postman)
    react阻止事件冒泡
  • 原文地址:https://www.cnblogs.com/haoliyou/p/9604452.html
Copyright © 2011-2022 走看看