java - 在@Transactional注释中设置默认事务管理器?

标签 java spring hibernate jpa

我有一个带有 JPA/Hibernate 的 Spring Boot 2.x 应用程序和 2 个独立的事务管理器:每个租户 1 个,应用程序范围 1 个。所有实体、存储库和服务都分离在不同的包中。

每当我在服务中使用 @Transactional 时,我都需要将 txManager 显式限定为 @Transactional(value = "tenantTransactionManager")@Transactional (值=“applicationTransactionManager”)

这非常冗长且容易出错,因为它们只是文字字符串。

有没有办法可以在包级别设置事务管理器,这样我就不必在每次使用时都显式设置它?

基于 Multiple transaction managers with @Transactional annotation 中给出的答案,我创建了一个 @TenantTransactional@ApplicationTransactional 元注释,但这不允许我设置 readOnly 标志,这是必要的 -方法。

最佳答案

给定the answer事实上,您已经有了 @TenantTransactional@ApplicationTransactional 您只需使用 alias对于只读。可以使用 @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 注释的其他属性执行此操作。

关于java - 在@Transactional注释中设置默认事务管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56665811/

相关文章:

java - 在子类中设置一些属性后调用父类(super class)方法的实现

java - 时区更新程序不起作用

java - Android Httpclient [NoSuchMethodError :org. apache.http.entity.ContentType.create]

java - Spring - ModelAttribute 和参数名称

java - hibernate java.lang.NoClassDefFoundError : org/apache/lucene/analysis/standard/StandardAnalyzer

hibernate - 哪个是适用于 Scala 和 PostgreSQL 的 Play 框架的最佳数据访问选项?

java - Maven Dropwizard 中的 Hibernate 数据库连接错误

Java JNI : possible to manage cache, 历史记录,IExplorer 中的临时文件?

java - Maven : Not able to download dependencies jta:1. 0.1B

java - @ExceptionHandler 未触发