有条件地排除spring数据jpa存储库

时间:2013-07-27 14:29:37

标签: spring jpa configuration repository spring-data-jpa

我们使用spring + spring data jpa repositories + maven作为构建环境。我们在多个云环境中部署项目战争。

对于特定的云环境,我们从数据库中检索登录凭据。 对于前者对于AWS,我们可能有AWSCredentials域对象和AWSCredentialsRepository 对于Azure,我们可能有AzureCredentials域对象和AzureCredentialsRepository

在spring数据jpa中有没有办法可以使用构建脚本中的某些参数有条件地加载存储库?

例如:我想部署到azure云。所以我只需要AzureCredentials域和AzureCredentialsRepository,但不需要AWS

spring中有优雅的方法吗?

2 个答案:

答案 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>

仅为活动配置文件创建存储库。个人档案是你当然应该感兴趣的东西。