#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, потому что ему нужна другая версия, то произойдет ошибка. Именно тогда вам нужно явно объявить зависимость с версией, в которой будут удовлетворены обе зависимости.