gpt4 book ai didi

java - 带有@Transactional 注释的多个事务管理器

转载 作者:IT老高 更新时间:2023-10-28 13:53:59 25 4
gpt4 key购买 nike

  1. 我们有基本的通用管理器,它由所有管理者继承。根据经理被注释@Transactional 注释。

  2. 有2组事务服务:

    • x.y.service1.* - 必须由 transactionManager1
    • 管理
    • x.y.service2.* - 必须由 transactionManager2
    • 管理

如何在不覆盖所有事务方法并指定事务管理器的情况下配置事务?

@Transactional(readOnly = true)
public abstract class GenericManagerImpl<D extends IGenericDao, T extends BaseObject, PK extends Serializable>
implements IGenericManager<T, PK> {

protected D dao;

@Autowired
public void setDao(D dao) {
this.dao = dao;
}


@Transactional(readOnly = false)
public void save(T object) {
dao.save(object);
}

@Transactional(readOnly = false)
public void remove(T object) {
dao.remove(object);
}


}

@Service
class UserManagerImpl
extends GenericManagerImpl<IUserDao, User, Long>
implements IUserManager {

// Everything is OK. User is managed by txManager1

}

@Service
class BillingManagerImpl
extends GenericManagerImpl<IBillingDao, Billing, Long>
implements IBillingManager {

@Override
@Transactional(readOnly = false, value="txManager2") // <--have to override method only to specify txManager
public void save(final Billing billing ) {
super.save(billing);
}

@Override
@Transactional(readOnly = false, value="txManager2") // <--have to override method only to specify txManager
public void remove(final Billing billing ) {
super.remove(billing);
}
}

很可能我需要将 aop 与 @Transactional 注释结合起来。
其实我想要的是:
1) 能够使用@Transactional 注释配置事务(只读标志、传播、隔离等)。
2) 定义策略以在我的类之外选择事务管理器(例如使用 AOP)
x.y.service1.* -> 使用 txManager1
x.y.service2.* -> 使用 txManager2

有可能吗?

最佳答案

有可能create your own annotations作为 @Transactional(value="tx1") 的快捷方式。 (这些可以在类或方法级别使用)

来自引用文档:

例如定义如下注解

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional("order")
public @interface OrderTx {
}

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional("account")
public @interface AccountTx {
}

允许我们将上一节中的示例编写为

public class TransactionalService {

@OrderTx
public void setSomething(String name) { ... }

@AccountTx
public void doSomething() { ... }
}

关于java - 带有@Transactional 注释的多个事务管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3333133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com