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自动配置.
编辑:我几乎重写了我的答案 - 我误解了原来的问题
这不是最好的解决方案,但我能看到这个工作的唯一方法是在@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 知识很原始,所以不确定它是否可能。
| 归档时间: |
|
| 查看次数: |
3990 次 |
| 最近记录: |