У нас есть базовый общий менеджер, который наследуется всеми менеджерами. База менеджер аннотируется с @ Аннотации к транзакции.Несколько менеджеров транзакций с аннотацией @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);
}
}
Скорее всего, мне нужно объединить АОП с @Transactional аннотацию.
На самом деле, я хочу:
1) Уметь настраивать транзакции (только флаг, протагонирование, изоляцию и т. Д.) С помощью аннотации @Transactional.
2) определяют стратегию выбора менеджера транзакций за пределами моих классов (с помощью АОП, например)
xyservice1 * -.> Использовать txManager1
xyservice2 * -.> Использовать txManager2
Можно ?
Я только что прочитал и не читал только методы в базовом менеджере. У меня есть 2 вариант здесь: 1) имеют аннотацию уровня класса @Transactional (ReadOnly = истина) и аннотация уровня метода @Transactional (доступна только для чтения = ложь) для каждого НЕ читать только методы 2) имеет уровень класса аннотации @Transactional (readOnly = false) и аннотации уровня метода @Transactional (readOnly = true) для каждого метода только для чтения В любом случае мне нужно будет переопределить аннотации @transactional уровня метода для сервисов, которым должно управляться txManager2 – Seyran