java - (解决方法)在实体上使用@ConditionalOnProperty

标签 java spring hibernate spring-boot entity

我们有一个带有一些数据库实体类的 Spring-Boot 应用程序。

我们使用 ddl-auto: validate 来确保连接的数据库具有正确的架构。

现在我们要添加一个可以切换以匹配不同环境的功能,NewFeatureService 带有 @ConditionalOnProperty("newfeature.enabled") 注释。

一切正常,直到这里。

问题是该功能需要一个数据库实体。

@Entity
@ConditionalOnProperty("newfeature.enabled")  // <--- doesn't work
public class NewFeatureEnitity{...}

@ConditionalOnProperty 显然不起作用,但如果设置了属性,告诉 Hibernate 仅针对数据库验证此实体的好方法是什么。

我们不想要的:

  • 在所有数据库中添加此表,即使未使用该功能也是如此
  • 拥有不同的工件

最佳答案

为了确保它不受监督,我想提供我的建议作为答案。

它比 O.Badr 提供的答案更多地使用了 spring-boot .

您可以将您的 spring-boot 应用程序配置为仅扫描您的核心实体,如下所示:

@SpringBootApplication
@EntityScan("my.application.core")
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

因此,您可以在像 my.application.features 这样的包中提供您的可选实体(和功能)(可以随意使用任何其他结构,但可以使用先前指定的基础包之外的包) .

@ConditionalOnProperty("newfeature.enabled")
@Configuration
@EntityScan("my.application.features.thefeature")
public class MyFeatureConfiguration {
  /*
  * No Configuration needed for scanning of entities. 
  * Do here whatever else should be configured for this feature.
  */
}

关于java - (解决方法)在实体上使用@ConditionalOnProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45978489/

相关文章:

java - 如果结果大小大于 1,则 Hibernate 返回重复值

java - 将 List<Observable<X[]> 扁平化为 Observable<X[]>

java - 如何处理 JPQL 查询返回的对象类型?

java - 需要一些关于 Java 中的 Lambda 表达式的帮助

java - Spring 启动: 400 Bad request error even when parameter is present

java - 两个用户之间交换屏幕

java - 如何将以毫秒为单位的时间转换为时间秒和offsetInNanos?

java - Spring Boot Solr HighlightPage 不返回高亮信息

xml - <beans :beans> and <beans>之间的区别

java - FUSE 与 CXF 一起 hibernate