BeanDefinitionOverrideException caused by 2 @EnableJpaReposi



我试图在我的SpringBoot存储库中实现自定义功能,方法是按照这里的说明创建一个新的基本存储库类并将其添加到@EnableJpaRepositories注释中。但是,当我这样做时,我得到以下错误:

异常堆栈

Caused by: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'myRepository' defined in com.my.service.repository.MyRepository defined in @EnableJpaRepositories declared on UpperLevelJpaConfig: Cannot register bean definition [Root bean: class [com.my.data.entity.base.BaseRepositoryFactoryBean]; scope=; abstract=false; lazyInit=true; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in com.my.service.repository.MyRepository defined in @EnableJpaRepositories declared on UpperLevelJpaConfig] for bean 'myRepository': There is already [Root bean: class [com.my.service.repository.BaseRepositoryFactoryBean2]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in com.my.service.repository.MyRepository defined in @EnableJpaRepositories declared on MyServiceApplication] bound.

看完这个关于Exception类型的教程后,我想我明白了它试图创建两次存储库——一次来自我的注释,一次来自另一个注释。

有办法绕过这个吗?我不能更改配置文件或它如何应用于我的服务,因为它来自于项目结构的高层。

提前感谢!

编辑添加更多代码:

My service class:

@SpringBootApplication
@RefreshScope
@EnableConfigurationProperties
@EnableDiscoveryClient
@EnableTransactionManagement
@EnableJpaRepositories(repositoryFactoryBeanClass = BaseRepositoryFactoryBean2.class)
@ComponentScan(
basePackages = {
"com.my.service",
})
public class MyServiceApplication {
}

upperleveljpacconfig类:

@Configuration
@EnableConfigurationProperties(value = {PoolDataSourceConfig.class, JpaProperties.class})
@EnableTransactionManagement
@EnableJpaRepositories(
bootstrapMode = BootstrapMode.LAZY,
basePackages = "${jpa.repositoryPackagePath:null}",
repositoryFactoryBeanClass = BaseRepositoryFactoryBean.class)
public class UpperLevelJpaConfig{
}

我明白了。

我没有配置所有的存储库来使用我的BaseRepositoryImpl,我意识到我只需要一个。

我能够以独立的方法创建存储库,而不是使用标准的JavaConfig或XmlConfiguration。我从我的应用程序类中删除了@EnableJpaRepositories,而是在我的服务impl类中做了以下操作:

public class EventServiceImpl implements EventService {
private EventRepository eventRepository;
@Autowired private EntityManager entityManager;

@PostConstruct // because I need the entityManager to be autowired
public void initializeEventRepo() {
RepositoryFactorySupport factory = 
new BaseRepositoryFactoryBean2<EventRepository,Event, BigInteger>(
EventRepository.class).createRepositoryFactory(entityManager);
this.eventRepository = factory.getRepository(EventRepository.class);
}
然后我像以前一样使用存储库,但是能够调用我的新方法!

最新更新