【问题标题】:Multiple transaction managers - Selecting a one at runtime - Spring多个事务管理器 - 在运行时选择一个 - Spring
【发布时间】:2015-08-23 12:45:39
【问题描述】:

我正在使用 Spring 在我的应用程序中配置事务。我为两个 RabbitMQ 服务器定义了两个事务管理器。

....

@Bean(name = "devtxManager")
public PlatformTransactionManager devtxManager() {
    return new RabbitTransactionManager(devConnectionFactory());
}

@Bean(name = "qatxManager")
public PlatformTransactionManager qatxManager() {
    return new RabbitTransactionManager(qaConnectionFactory());
}

@Bean
public ConnectionFactory devConnectionFactory() {
    CachingConnectionFactory factory = new CachingConnectionFactory();
    factory.setHost(propertyLoader.loadProperty("dev.rabbit.host"));
    factory.setPort(Integer.parseInt(propertyLoader.loadProperty("dev.rabbit.port")));
    factory.setVirtualHost("product");
    factory.setUsername(propertyLoader.loadProperty("dev.sender.rabbit.user"));
    factory.setPassword(propertyLoader.loadProperty("dev.sender.rabbit.password"));
    return factory;
}

@Bean
public ConnectionFactory qaConnectionFactory() {
    CachingConnectionFactory factory = new CachingConnectionFactory();
    factory.setHost(propertyLoader.loadProperty("qa.rabbit.host"));
    factory.setPort(Integer.parseInt(propertyLoader.loadProperty("qa.rabbit.port")));
    factory.setVirtualHost("product");
    factory.setUsername(propertyLoader.loadProperty("qa.sender.rabbit.user"));
    factory.setPassword(propertyLoader.loadProperty("qa.sender.rabbit.password"));
    return factory;
}

...

在我的服务类中,我需要通过传入的 'env' 变量选择正确的事务管理器。(即,如果 env=='qa' 我需要选择 'qatxManager' 否则如果我需要 'env==dev'选择“devtxManager”。

....

@Transactional(value = "qatxManager")
public String requeue(String env, String sourceQueue, String destQueue) {

    // read from queue
    List<Message> messageList = sendReceiveImpl.receive(env, sourceQueue);
....

我怎样才能完成它?

【问题讨论】:

    标签: java spring transactions spring-transactions


    【解决方案1】:

    我认为你需要一个 Facade。定义一个接口并创建2个实现相同接口但具有不同@Transactional(value = "qatxManager")的类

    然后定义一个Facade类,保留2个实现(使用@Qualifier区分)Facade得到envString和正确bean的调用方法

    【讨论】:

    • 嗨,您能为此创建示例吗...提前谢谢
    猜你喜欢
    • 2016-09-04
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2019-12-30
    • 2014-05-27
    相关资源
    最近更新 更多