只有@Conditional满足时,才启动Spring引导@EnableJpaRepositories

时间:2018-02-16 22:11:17

标签: spring-boot spring-data-jpa

我有一个使用spring-data和jpa写入数据库的Spring-boot应用程序。它有一个用@EnableJpaRepositories@EnabledTransactionManagement注释的配置类,它连接数据源和其他位:

@Configuration
@EnableJpaRepositories( entityManagerFactoryRef=..., transactionManagerRef=..., ... )
@EnableTransactionManagement
public class DatasourceConfiguration {

  @Bean(destroyMethod = "close")
  @Primary
  @ConfigurationProperties("db.pooling")
  ComboPooledDataSource pooledDataSource() {
    return new ComboPooledDataSource();
  } 
  // etc
}

现在我想要更新我的应用程序,以便使用不同的方法记录其事务(写入Kafka,并不重要。)但是,如果禁用此其他方法,我希望它可以依赖于原始的直接到数据库逻辑。

我尝试使用@ConditionalOnProperty注释,因为javadoc表示它可以注释@Configuration类:

@ConditionalOnProperty(prefix="kafka.logging", name="enabled", havingValue = "false", matchIfMissing = true)
@Configuration
@EnableJpaRepositories( ... )
@EnableTransactionManagement
public class DatasourceConfiguration { 

@EnableJpaRepositories@EnableTransactionManagement不尊重条件注释。 (也就是说,它在启动时失败,因为Spring无法找到任何已配置的数据源。)

如果此属性缺失或设置为false,我该如何才启用Spring数据和JPA?

(请不要建议使用个人资料。我无法使用个人资料。这是一个政策问题,而非选择事项。)

1 个答案:

答案 0 :(得分:0)

如果要告诉JPA不要创建存储库bean,可以将@ Conditional放在存储库接口上,而不是配置类上。

然后RepositoryComponentProvider将遵循您的设置。