У нас есть базовый универсальный менеджер, который наследуется всеми менеджерами.Базовый менеджер снабжен аннотациями @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)xyservice1. * -> использовать txManager1xyservice2. * -> использовать txManager2
Возможно ли это?