我们使用spring
+ spring data jpa repositories
+ maven
作为构建环境。我们在多个云环境中部署项目战争。
对于特定的云环境,我们从数据库中检索登录凭据。
对于前者对于AWS
,我们可能有AWSCredentials
域对象和AWSCredentialsRepository
对于Azure
,我们可能有AzureCredentials
域对象和AzureCredentialsRepository
。
在spring数据jpa中有没有办法可以使用构建脚本中的某些参数有条件地加载存储库?
例如:我想部署到azure云。所以我只需要AzureCredentials
域和AzureCredentialsRepository
,但不需要AWS
。
在spring
中有优雅的方法吗?
答案 0 :(得分:0)
遗憾的是,我认为这适用于 java-config。 (我必须用这个伏都教替换 applicationContext.xml 才能让“可选的 jpa 存储库”工作。
我找不到 applicationContext.xml .. xml IoC 对这个问题的回答。
就我而言,我希望本地开发人员(spring-profile=default)使用 H2 数据库来存储一些信息,但“真实代码”.... 非默认 spring 配置文件...会遇到 redis-缓存。
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@EnableJpaRepositories(basePackageClasses =
{com.mystuff1.MyJpaRepository1.class, com.mystuff2.MyJpaRepository2.class})
@Configuration
/* jpa:repositories (di.xml) does not support being wrapped in a spring-profile-attributed-bean. this class is a workaround */
/* we only want InternalFhirBundleProviderWrapperJpaRepository "scanned in" as a JpaRepository .. when the spring-profile of "default" is specified. */
@Profile("default")
public class JpaReposInASpecificSpringProfileVoodooWhereWaldoJavaConfig {
}
答案 1 :(得分:-1)
我会使用spring配置文件来实现这一点,例如在spring-context.xml中:
<beans profile="AWS>
<jpa:repostiories base-package="package.repositories.aws"/> <!-- package with aws repository -->
<beans>
<beans profile="Azure">
<jpa:repositories base-package="package.repositories.azure">
<beans>
仅为活动配置文件创建存储库。个人档案是你当然应该感兴趣的东西。