Устаревший проект весенней загрузки с spring-boot-starter-data-jpa и spring-tx в pom.xml а транзакции?

#java #spring #spring-boot #maven #spring-transactions

Вопрос:

Я использую устаревший проект Spring Boot, в котором зависимость spring-boot-starter-data-jpa указана в его pom.xml также зависимость 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» бессмысленны?

Ответ №1:

Да, это бессмысленно, если вы не хотите явно указывать, какую версию spring-tx использовать с spring-boot-starter-data-jpa.

Единственный случай, когда вы хотите явно объявить переходную зависимость, заключается в том, что другие зависимости зависят от этой версии переходной зависимости.

Пример:

A -> B ->> C

D -> C

Для зависимости A требуется B требуется C, однако для зависимости D также требуется C. Но поскольку кратчайший путь к импорту зависимости C-это зависимость D, она импортирует версию из зависимости D. Если этот импорт имеет более низкую версию и не совместим с зависимостью A, потому что ему нужна другая версия, то произойдет ошибка. Именно тогда вам нужно явно объявить зависимость с версией, в которой будут удовлетворены обе зависимости.