首页 > 编程语言 > 详细

基于springboot的单应用多数据源的事务管理简单实现

时间:2021-07-02 22:59:56      阅读:28      评论:0      收藏:0      [点我收藏+]

SpringBoot单应用多数据源的分布式事务管理方案:

  • XA实现方案;

    在java中通过Spring+JTA的方式实现

    在pom文件中引入jar包:

     <!--jta+atomikos分布式事务-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jta-atomikos</artifactId>
            </dependency>
    

    编写一个配置数据源的java类:

    @Configuration 
    @MapperScan(basePackages = {"配置该数据源配置对应的数据源(mapper的路径)"}, sqlSessionFactoryRef = "userdbSqlSessionFactory")
    public class UserDBDataSource4jtaConfig {
        @Value("${spring.datasource.userdb.username}")
        private String username;
        @Value("${spring.datasource.userdb.password}")
        private String password;
        @Value("${spring.datasource.userdb.driverClassName}")
        private String driverClassName;
        @Value("${spring.datasource.userdb.jdbcUrl}")
        private String jdbcUrl;
        /**
         * 配置一个数据源的bean
         * @return
         */
        @Bean(name = "userdbDataSource")
        public DataSource userdbDataSource() {
            //创建一个XA数据源
            MysqlXADataSource xaDataSource = new MysqlXADataSource();
            xaDataSource.setUrl(jdbcUrl);
            xaDataSource.setUser(username);
            xaDataSource.setPassword(password);
            AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
            atomikosDataSourceBean.setXaDataSource(xaDataSource);
            atomikosDataSourceBean.setUniqueResourceName("userdbDataSource");
            atomikosDataSourceBean.setMaxPoolSize(30);
            atomikosDataSourceBean.setMinPoolSize(5);
            return atomikosDataSourceBean;
        }
        @Bean(name = "userdbSqlSessionFactory")
        public SqlSessionFactory userdbSqlSessionFactory(@Qualifier("userdbDataSource") DataSource userdbDataSource) throws Exception {
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            sqlSessionFactoryBean.setDataSource(userdbDataSource);
            return sqlSessionFactoryBean.getObject();
        }
        @Bean(name = "userdbSqlSessionTemplate")
        public SqlSessionTemplate userdbSqlSessionTemplate(@Qualifier("userdbSqlSessionFactory") SqlSessionFactory userdbSqlSessionFactory) {
            return new SqlSessionTemplate(userdbSqlSessionFactory);
        }
    }
    

    使用:然后在具体的serviceimpl方法中添加@Transactional注解即可。

基于springboot的单应用多数据源的事务管理简单实现

原文:https://www.cnblogs.com/zhaojunjin/p/14964851.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!