Spring引导自定义启动器和Spring Data JPA-如何在我自己的自定义自动配置/启动器模块上正确地提供存储库



我正试图为我的一个项目编写一个自动配置/启动模块。该模块通过Spring Data JPA处理持久性。它旨在提供几个春季数据存储库。

现在,我的自动配置是这样的:

@Configuration(proxyBeanMethods = false)
@AutoConfigureAfter(JpaRepositoriesAutoConfiguration::class)
@EnableJpaRepositories(basePackageClasses = [ItemRepository::class])
@EntityScan(basePackageClasses = [ItemRepository::class])
class DomainPersistenceDataJpaAutoConfiguration() {
}

如spring-boot参考文档中所述,尽管@EnableJpaRepositories使用组件扫描,但自动配置不应启用组件扫描。

什么是好的替代方法?有没有任何现有的spring-boot-start的例子,它提供了我可以参考的存储库实现?

您想要的可能是AutoConfigurationPackages#注册方法,我认为常见的方法是实现ImportBeanDefinitionRegistrar,并使用@import在自动配置中导入此实现。在Axon框架的RegisterDefaultEntitys注释和它导入的DefaultEntityRegister中可以看到一个非常优雅的解决方案。通过这种方式,您的包将包含在jpa和实体扫描中。

编辑:添加实际的例子,因为正如评论所指出的,链接可能会随着时间的推移而改变。

在您的情况下,ImportBeanDefinitionRegistrar可能看起来像这样:

import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata; 
public class StarterEntityRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
AutoConfigurationPackages.register(registry, ItemRepository.class.getPackageName());
}
}

你的自动配置就是:

@Configuration(proxyBeanMethods = false)
@AutoConfigureAfter(JpaRepositoriesAutoConfiguration.class)
@Import(StarterEntityRegistrar.class)
class DomainPersistenceDataJpaAutoConfiguration() {
}

最新更新