zoukankan      html  css  js  c++  java
  • 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,即可对方法进行最基本的事务控制

    欢迎指正交流!

  • 相关阅读:
    Android控件之ListView探究二
    解决activity页面跳转时显示桌面
    TextView实现滚动显示的效果
    QPainter的坐标系系统的转换
    MODBUS_RTU通信协议
    收藏的博客 -- Qt有关的GitHub/Gitee开源项目
    VS联调多个解决方案的项目
    软件工具——GitGUI使用教程
    Python中对文件的操作
    VMware虚拟机三种网络模式详解 --------- NAT(地址转换模式)
  • 原文地址:https://www.cnblogs.com/JINJAY/p/10406008.html
Copyright © 2011-2022 走看看