必須使用EclipseLink作為我的Spring Batch Job的JPA實作,因為Hibernate缺乏我需要的一個重要特性。
不幸的是,在用EclipseLink交換了Hibernate之后,我在啟動我的批處理jar時得到了以下錯誤:
$ java -jar my-batch.jar
啟動ApplicationContext錯誤。為了顯示條件報告,在啟用'debug'的情況下重新運行你的應用程式。
2021-09-17 15:52:38.387 ERROR 15708 --- [ main ] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
應用程式未能啟動
***************************
描述。
定義在'transactionManager'類路徑資源[org/springframework/batch/core/configuration/annotation/SimpleBatchConfiguration.class]中的bean 不能被注冊。一個具有該名稱的Bean已經被定義在類路徑資源[path/to/my/EclipseLinkJpaConfiguration.class]中,并且重寫被禁用。
行動。
考慮重命名其中一個Bean,或者通過設定spring.main.allow-bean-definition-overriding=true來啟用覆寫功能。
在我當前的pom.xml中,你可以看到我的依賴關系,以及我如何用EclipseLink交換Hibernate的:
<dependencies>
<dependency>/span>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.12.RELEASE</version>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.3.12.RELEASE</version>/span>
<exclusions>/span>
<exclusion>/span>
<groupId>/span>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</exclusion>/span>
<exclusion>/span>
<groupId>/span>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>/span>
</exclusions>/span>
</dependency>
<dependency>>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-core</artifactId>
<version>/span>4.2.7.RELEASE>
</dependency>
<dependency>>
<groupId>/span>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<version>/span>2.7.5</version>
</dependency>/span>
</dependencies>
除此之外,我還添加了EclipseLinkJpaConfiguration,這是在Spring中使用EclipseLink所需要的:
@Configuration
public class EclipseLinkJpaConfiguration extends JpaBaseConfiguration {
protected EclipseLinkJpaConfiguration(DataSource dataSource,
JpaProperties屬性。
ObjectProvider<JtaTransactionManager> jtaTransactionManager) {
super(dataSource, properties, jtaTransactionManager)。
}
@Override
protected AbstractJpaVendorAdapter createJpaVendorAdapter() {
return new EclipseLinkJpaVendorAdapter()。
}
@Override
protected Map<String, Object> getVendorProperties{
Map<String, Object> map = new HashMap<>()。
map.put(PersistenceUnitProperties.WEAVING, "false") 。
map.put(PersistenceUnitProperties.LOGGING_LEVEL, SessionLog.FINER_LABEL)。
return map。
}
我不知道是什么原因造成的。
添加spring.main.allow-bean-definition-overriding=true顯然是一個臨時解決方案,但我想解決這個問題。
我希望得到任何幫助! 謝謝你的幫助
uj5u.com熱心網友回復:
這是一個已知的問題,見https://github.com/spring-projects/spring-batch/issues/816。該問題計劃在5.0版本中修復,計劃在2022年第四季度完成。
與此同時,您可以允許覆寫 bean 定義,或者將您的 bean 重命名為 transactionManager 以外的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329869.html
標籤:
上一篇:自定義視圖上的多觸發器
