【发布时间】:2011-03-20 23:23:06
【问题描述】:
我们有基本的通用管理器,它 由所有管理者继承。根据 经理被注释 @Transactional 注释。
-
有 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
有可能吗?
【问题讨论】:
标签: java spring transactions