【问题标题】:Spring boot custom starter and Spring Data JPA - How to correctly provide repositories on my own custom autoconfigure/starter moduleSpring Boot 自定义启动器和 Spring Data JPA - 如何在我自己的自定义自动配置/启动器模块上正确提供存储库
【发布时间】:2020-07-27 13:01:20
【问题描述】:

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

现在,我的自动配置如下所示:

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

}

spring boot reference documentation 中所述,尽管@EnableJpaRepositories 使用组件扫描,但自动配置不应启用组件扫描。

什么是好的替代方法?有没有提供我可以参考的存储库实现的现有 spring boot start 示例?

【问题讨论】:

    标签: spring spring-boot spring-data-jpa spring-boot-starter


    【解决方案1】:

    您正在寻找的可能是 AutoConfigurationPackages#register 方法,我认为常见的方法是实现 ImportBeanDefinitionRegistrar 并使用 @Import 在您的自动配置中导入此实现。在 Axon 框架的 RegisterDefaultEntities 注释和它导入的 DefaultEntityRegistrar 中可以看到一个非常优雅的解决方案。这样,您的包将包含在 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() {
    
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 2020-03-21
      • 1970-01-01
      • 2020-11-06
      • 2018-10-06
      • 2022-01-24
      • 2017-08-22
      • 1970-01-01
      • 2019-08-30
      相关资源
      最近更新 更多