mar*_*dus 7 java spring spring-data-jpa spring-java-config
在Spring Java Config类中定义EntityManager时,我可以通过调用相应构建器上的方法来添加基础包以扫描Entity类:
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
// Some other configuration here
builder.packages("org.foo.bar", "org.foo.baz");
return builder.build();
}
Run Code Online (Sandbox Code Playgroud)
我需要一些类似于Spring寻找存储库接口的地方.通常的方法是使用@EnableJpaRepositories
注释:
@EnableJpaRepositories(basePackages = {"org.foo.barbaz"})
Run Code Online (Sandbox Code Playgroud)
但我希望有一种动态的方式来定义这些包,类似于上面的Entity位置.像这样的东西:
public SomeJpaRepositoryFactoryBean entityManagerFactory(JpaRepositoryFactoryBuilder builder) {
// Some other configuration here
builder.packages("org.foo.barbaz");
return builder.build();
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用当前的Spring Data JPA版本来做到这一点,这是不是意味着这样做?
Mạn*_*yễn 10
您可以使用@AutoConfigurationPackage
注释将子模块的包添加到scan-packages.
@EnableJpaRepositories
从您的子模块中删除所有内容将@AutoConfigurationPackage
类添加到子模块的顶级目录(类似于@SpringBootApplication
,您必须将此类放在最顶层的目录中以扫描所有子包):
@AutoConfigurationPackage
public class ChildConfiguration {
}
Run Code Online (Sandbox Code Playgroud)创建spring.factories
下文件/resources/META-INF/spring.factories
的孩子模块并添加配置类:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.child.package.ChildConfiguration
现在,您可以@Autowired
从核心项目中获取存储库.(经过测试和工作)
@EnableJpaRepositories
可以在多个@Configuration
班级上使用.也就是说,每个模块都可以通过拥有自己的配置类来声明自己的存储库:
@Configuration
@EnableJpaRepositories(basePackages = "package1")
public class ConfigClass1 { /* ... */ }
@Configuration
@EnableJpaRepositories(basePackages = "package2")
public class ConfigClass2 { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
Spring Data JPA然后计入所有这些(package1
和package2
).
虽然这仍然不是一种程序化的方式,但它解决了我的问题.
归档时间: |
|
查看次数: |
4807 次 |
最近记录: |