Установить Менеджер транзакций по умолчанию в аннотациях @Transactional? - PullRequest
0 голосов
/ 19 июня 2019

У меня есть приложение Spring Boot 2.x с JPA / Hibernate и 2 отдельными менеджерами транзакций: 1 на каждого арендатора и 1 на приложение.Все сущности, репозитории и сервисы разделены в разные пакеты.

Всякий раз, когда я использую @Transactional в своих сервисах, мне нужно явно квалифицировать txManager как @Transactional(value = "tenantTransactionManager") или @Transactional(value = "applicationTransactionManager").

* 1007.* Это очень многословно и подвержено ошибкам, так как они являются просто литеральными строками.

Есть ли способ, которым я могу установить Менеджер транзакций на уровне пакета, поэтому мне не нужно явно устанавливать это при каждом использовании?

На основании ответа, данного в Несколько менеджеров транзакций с аннотацией @Transactional , я создал мета-аннотацию @TenantTransactional и @ApplicationTransactional, но это не позволяет мне установить readOnly флаг, который необходим для каждого метода.

1 Ответ

1 голос
/ 19 июня 2019

Учитывая ответ и тот факт, что у вас уже есть @TenantTransactional и @ApplicationTransactional, вы можете просто использовать псевдоним для readOnly.Добавление псевдонима может быть сделано с помощью @AliasFor.

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

  @AliasFor(attribute="readOnly", annotation=Transactional.class)
  boolean readOnly() default false;
}

Конечно, вы можете сделать это и для других свойств аннотации @Transactional.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...