【问题标题】:Legacy spring boot project with spring-boot-starter-data-jpa and spring-tx in pom.xml and transactions?pom.xml 和事务中带有 spring-boot-starter-data-jpa 和 spring-tx 的旧版 Spring Boot 项目?
【发布时间】:2021-07-08 00:55:00
【问题描述】:

我正在使用一个遗留 Spring Boot 项目,该项目在其 pom.xml 中列出了 spring-boot-starter-data-jpa 依赖项以及 spring-tx 依赖项(用于事务管理),例如 @EnableTransactionManagement 管理注释和这样的。

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
      <version>${spring.boot.version}</version>
    </dependency>

  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>

我的问题是 - 这种依赖是多余的吗? spring-boot-starter-data-jpa 不是默认为你管理事务,这样注释和这个额外的“spring-tx”依赖就没有意义了吗?

【问题讨论】:

    标签: java spring spring-boot maven spring-transactions


    【解决方案1】:

    是的,如果您不想显式声明 spring-tx 与 spring-boot-starter-data-jpa 一起使用的版本是没有意义的。

    您要显式声明传递依赖项的唯一情况是因为其他依赖项依赖于该传递依赖项版本。

    例子:

    A -> B -> C

    D -> C

    依赖 A 需要 B 需要 C 但是依赖 D 也需要 C。但是由于导入依赖 C 的最短路径是依赖 D,因此它将从依赖 D 导入版本。如果此导入的版本较低且不兼容使用依赖项 A 因为它需要不同的版本,则会发生错误。那时您需要使用将满足两个依赖项的版本显式声明依赖项。

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 2017-11-29
      • 2018-08-06
      • 2021-01-18
      • 2021-02-09
      • 2017-12-23
      • 2019-12-26
      • 1970-01-01
      • 2016-06-21
      相关资源
      最近更新 更多