• springboot多数据源配置


    因项目需要实现一个同步数据表的功能,即从一个数据库的一张表中查询数据,然后将数据插入到另一个数据库的一张表中

    1.首先在application.properties文件中配置两个数据库的连接信息

     1 #NIV2587W DataSource Configuration
     2 spring.datasource.first.driver-class-name=oracle.jdbc.driver.OracleDriver
     3 spring.datasource.first.jdbc-url=
     4 spring.datasource.first.username=
     5 spring.datasource.first.password=
     6 
     7 #rbccpack DataSource Configuration
     8 spring.datasource.second.driver-class-name=oracle.jdbc.driver.OracleDriver
     9 spring.datasource.second.jdbc-url=
    10 spring.datasource.second.username=
    11 spring.datasource.second.password=

    其中Oracle连接的url有三种写法,可参考https://blog.csdn.net/gnail_oug/article/details/80075263

    2.创建配置类,以一个为例

    @Configuration
    @MapperScan(basePackages = {"com.dao.niv257w"}, sqlSessionTemplateRef = "NIV257WSqlSessionTemplate")
    public class NIV257WDataSourceConfig {
    
        @Bean(name = "NIV257WDataSource")
        @ConfigurationProperties(prefix = "spring.datasource.first")
        public DataSource NIV257WDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean
        public SqlSessionFactory NIV257WSqlSessionFactory(@Qualifier("NIV257WDataSource") DataSource dataSource)  {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            try {
                bean.setMapperLocations(resolver.getResources("classpath*:mapper/niv257w/*.xml"));
                return bean.getObject();
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    
        @Bean
        public SqlSessionTemplate NIV257WSqlSessionTemplate(@Qualifier("NIV257WSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    
        @Bean
        public PlatformTransactionManager NIV257WTransactionManager(@Qualifier("NIV257WDataSource")DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
    }

    创建好两个配置类之后,即完成了对两个数据源的配置,且支持利用注解来进行事务管理

    1     @Override
    2     @Transactional("RBCCPACKTransactionManager")
    3     public void synchronizePlannedOrder() {

    只需用注解指明用到的是哪一个PlatformTransactionManager,即可对方法进行最基本的事务控制

    欢迎指正交流!

  • 相关阅读:
    点滴线程(笔记)
    解决问题的思维方式之Problem->Desgin->Solution(笔记)
    阿朱分享:中国互联网十五年的22个创新模式(转)
    .NET JSON对象序列化和反序列化
    Centos防火墙设置
    跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题
    Mysql 多行转一行
    redis中的缓存穿透 缓存击穿 缓存雪崩
    redis持久化
    redis事物
  • 原文地址:https://www.cnblogs.com/JINJAY/p/10406008.html
Copyright © 2020-2023  润新知