Spring Boot + Spring Data Envers在entityManagerFactory bean未初



我想在我的项目中使用Spring-Data-Envers审计一些表,但我得到一些错误。我有2个春季启动项目,Claims和InsureConnect。InsureConnect是Claims中的一个依赖项。

Claims有Spring Data Envers依赖

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-envers</artifactId>
<version>2.6.4</version>
</dependency>

Project Claims中的JPA配置如下。我在Claims项目中有JPA存储库

@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "claimsTransEntityManagerFactory",
transactionManagerRef = "claimsTransTransactionManager", basePackages={"com.metamorphosys.claims.jpa.transaction"})
public class ClaimsTransactionConfig {
private static final Logger LOGGER =  LoggerFactory.getLogger(ClaimsTransactionConfig.class);

@Bean
PlatformTransactionManager claimsTransTransactionManager() {
return new JpaTransactionManager(claimsTransEntityManagerFactory().getObject());
}
@Bean
LocalContainerEntityManagerFactoryBean claimsTransEntityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
//code...
}

ClaimsApplication.java

@SpringBootApplication(scanBasePackages ={"com.metamorphosys"})
@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)
public class ClaimsApplication{
//code
}

下面的InsureConnect项目是transactionConfig.java.

@Configuration
public class TransactionConfig {
private static final Logger LOGGER =  LoggerFactory.getLogger(TransactionConfig.class);

@Bean
@Primary
PlatformTransactionManager transTransactionManager() {
return new JpaTransactionManager(transEntityManagerFactory().getObject());
}
@Bean
@Primary
LocalContainerEntityManagerFactoryBean transEntityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
// code
}

InsureConnectApplication.java

@SpringBootApplication
@EnableAsync
@ImportResource({ "classpath*:config/*.xml" })
@EnableJpaRepositories(entityManagerFactoryRef = "transEntityManagerFactory",
transactionManagerRef = "transTransactionManager", basePackages={"com.metamorphosys.insureconnect.jpa.transaction"}
,repositoryFactoryBeanClass = BaseRepositoryFactoryBean.class)
public class InsureConnectApplication implements ApplicationContextAware {
private static final Logger log = LoggerFactory.getLogger(InsureConnectApplication.class);
}

Insureconnect没有Spring-Data-Envers依赖

现在当我运行索赔项目时,我在insureConnect项目中得到以下TransactionConfig错误。

Cannot create inner bean '(inner bean)#64ba4522' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#64ba4522': Cannot resolve reference to bean 'transEntityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transEntityManagerFactory' defined in class path resource [com/metamorphosys/insureconnect/dataobjects/transaction/TransactionConfig.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javassist/bytecode/ClassFile

项目运行良好,如果我删除Spring-Data-Envers依赖。

谁能帮我理解为什么错误是发生在使用Envers?提前谢谢。

注意-我使用2.6.4 v的Spring-Data-envers。

我的应用程序也有类似的问题。我最终将jpa starter添加到我的pom中,之后我的应用程序开始工作:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

我认为这个starter加载了一些spring-data-envers没有的额外的/或加载。

最新更新