有没有办法使用spring boot auto配置注册存储库基类?

Cès*_*sar 15 java spring-data-jpa spring-boot

我们有一个基础JPA存储库类,以及我们在项目中使用的一些其他实用程序方法.在Spring Data JPA文档之后,我们创建了类并在配置类中使用@EnableJpaRepositories注释,如以下示例所示:

@Configuration
@EnableJpaRepositories(basePackageClasses = MyApplication.class,
    repositoryBaseClass = MyJpaRepositoryImpl.class)
public class SpringDataJpaMyRepositoryConfiguration {
}
Run Code Online (Sandbox Code Playgroud)

我们还设置了basePackageClasses属性,以便找到我们的存储库,因为配置类不在应用程序根包中.一切都按预期工作,所以到目前为止没有任何问题.

现在我们想创建一个spring boot starter,将存储库基类添加到我们的项目中,无需进一步配置,但我们不知道如何操作.如果我们使用EnableJpaRepositories注释创建一个AutoConfiguration类来设置repositoryBaseClass属性,那么在使用@SpringBootApplication注释的类下查找存储库的自动存储库查找策略将不再起作用.

我们不能使用basePackageClasses属性,因为我们不知道使用自动配置的项目的主类或包.

有没有办法做到这一点?也许通过在我们的自动配置中重新定义一些bean?

理想的方法是允许设置存储库基类而不必再次定义所有Spring Data JPA自动配置.

dan*_*nes 2

编辑:我几乎重写了我的答案 - 我误解了原来的问题

这不是最好的解决方案,但我能看到这个工作的唯一方法是在@EnableJpaRepositories.

然后,这可以进入您的自动配置,并@ConditionalOnProperty仅在设置了基本包属性时才用于自动配置

@Configuration
@ConditionalOnProperty("repositories-base-packages")
public class BaseRepositoryAutoConfiguration {

    @Configuration
    @EnableJpaRepositories(
            repositoryBaseClass = MyJpaRepositoryImpl.class,
            basePackages = "${repositories-base-packages}"
    )
    public static class JpaRepositoriesConfig { }

}
Run Code Online (Sandbox Code Playgroud)

然后确保您的应用程序中有一个application.propertiesorapplication.yml定义repositories-base-packages

不确定如何声明多个基础包,我的 SpEL 知识很原始,所以不确定它是否可能。