我使用Spring Boot的Spring Data JPA启动程序(1.4.1)。它包含Spring Data JPA 1.10.3。但是,我需要使用此版本弹簧数据中尚不存在的@DomainEvents
注释。当我尝试添加最新版本的Spring Data JPA时,我的应用程序运行时会出错。
我的pom例子:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
...
</dependencies>
当我尝试添加最新版本的Spring Data JPA时:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.11.6.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
当我启动我的应用程序时,我会感到愤怒。像这样的错误:
Caused by: java.lang.NoSuchMethodException: org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.<init>()
at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_121]
at java.lang.Class.getDeclaredConstructor(Class.java:2178) ~[na:1.8.0_121]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:80) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
... 53 common frames omitted
如何使用较新版本的Spring Data JPA?我的应用中需要@DomainEvents
。谢谢!
答案 0 :(得分:29)
有多种方法可以让猫在这里皮肤上有所不同的起点和缺点:
最安全的方法是升级到更新版本的Spring Boot。我们通常建议您使用当前主流的最新版本。在你的情况下,1.5是最近的次要,所以我们建议升级到那个(目前为1.5.6)。这通常只需更改您使用的父pom的版本号即可实现。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
以前方法的替代方法是保留您正在使用的Boot版本,但有选择地升级第三方依赖项。执行此操作的首选方法是检查spring-boot-dependencies中存在哪个版本的占位符。然后,您只需重新声明项目中的属性并调整版本。对于Spring Data,它是:
<properties>
<spring-data-releasetrain.version>Ingalls-SR6<spring-data-releasetrain.verion>
</properties>
如果是Spring Data,您可以立即升级整个版本系列,这样如果您只是升级一个模块,就不会在内部遇到Spring Data模块之间的不兼容问题。这是&#34;升级财产的主要原因之一&#34;建议明确地在新版本中重新声明依赖关系(在某些情况下仍然是最后的手段)。
在实践中,我通常会尝试以下步骤:
2和3可能是可以互换的,具体取决于您个人喜欢的内容或您为团队定义的依赖项升级政策。
一般来说,关注Boot版本是一个好主意,并经常尝试将项目干式升级到新版本,但不一定要将升级版本发布到生产版本。这使您可以评估升级风险并估计需要进行此项工作的工作量。 避免升级基本上只是让他们更痛苦,但是,有时候,由于政治原因或者升级在新版本中遇到问题,他们有时无法立即制作。