我有一个使用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?
(请不要建议使用个人资料。我无法使用个人资料。这是一个政策问题,而非选择事项。)
答案 0 :(得分:0)
如果要告诉JPA不要创建存储库bean,可以将@ Conditional放在存储库接口上,而不是配置类上。
然后RepositoryComponentProvider将遵循您的设置。