我正在使用一个遗留的 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”依赖就毫无意义了吗?
最佳答案
是的,如果您不想显式声明 spring-tx 与 spring-boot-starter-data-jpa 一起使用的版本,则毫无意义。
您想要显式声明传递依赖项的唯一情况是因为其他依赖项依赖于该传递依赖项版本。
示例:
A -> B -> C
D -> C
依赖项 A 需要 B 需要 C,但是依赖项 D 也需要 C。但是由于导入依赖项 C 的最短路径是依赖项 D,因此它将导入依赖项 D 的版本。如果此导入版本较低并且不兼容如果使用依赖项 A,因为它需要不同的版本,则会出现错误。这时您需要使用满足两个依赖项的版本显式声明依赖项。
关于java - pom.xml 和事务中包含 spring-boot-starter-data-jpa 和 spring-tx 的旧版 spring boot 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67066920/