【问题标题】:how configure transactionmanager for multiple databases如何为多个数据库配置事务管理器
【发布时间】:2022-01-12 16:40:14
【问题描述】:

我有一个事务管理器,每个数据库都有多个实体管理器,但如果有任何失败,它不会访问任何一个,我该如何解决这个问题?

@Primary
@Bean
    public ChainedTransactionManager transactionManager( ) {
        return new ChainedTransactionManager(
        new JpaTransactionManager(emR01.getEntityManagerFactory()), new
          JpaTransactionManager(emR02.getEntityManagerFactory()), new
          JpaTransactionManager(emR03.getEntityManagerFactory()), new
          JpaTransactionManager(emR04.getEntityManagerFactory()), new
          JpaTransactionManager(emR05.getEntityManagerFactory()), new
          JpaTransactionManager(emR06.getEntityManagerFactory()), new
          JpaTransactionManager(emR07.getEntityManagerFactory()), new
          JpaTransactionManager(emR08.getEntityManagerFactory()), new
          JpaTransactionManager(emR09.getEntityManagerFactory())
         
                );
    }
    

【问题讨论】:

    标签: java datasource entitymanager


    【解决方案1】:

    您可以创建多个事务管理器,同时将以下代码调用到循环中,并为每个人注册一个唯一的 bean

    在运行时

    public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
    
        JpaTransactionManager transactionManager
                = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory);
        return transactionManager;
    }
    

    bean 注册运行时

    AutowireCapableBeanFactory factory = context.getAutowireCapableBeanFactory();
    

    BeanDefinitionRegistry 注册表 = (BeanDefinitionRegistry) 工厂; registry.removeBeanDefinition("txn01"); context.registerBean("txn01", PlatformTransactionManager.class, () -> transactionManager());

    【讨论】:

    • 在 java 6 中我不能使用 PlatformTransactionManager.class, () -> transactionManager());什么是等价的?
    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2014-05-22
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多