【问题标题】:Spring Boot @Table annotation, catalog property for different environmentsSpring Boot @Table 注解,不同环境的目录属性
【发布时间】:2018-12-18 06:11:51
【问题描述】:

我正在使用带有 JPA 的 Spring Boot 来连接我的数据库。 我需要在实体的@Table 注释中设置“目录”属性。

基本没问题

@MappedSuperclass
@NoArgsConstructor
@Table(catalog = "catalog_name")
public abstract class AbstractEntity

但我必须找到简单的方法来更改目录值,因为我在不同的环境中有不同的值。

有没有人知道如何通过例如 application.properties 文件而不是硬编码字符串来更改它?

如果有任何解决方案,我将不胜感激。

【问题讨论】:

  • 就像使用 orm.xml 获取 ORM 信息一样(而不是在代码中硬编码),然后您不必重新编译。
  • 感谢您的回答,这似乎是合乎逻辑的。当我使用 Spring Data JPA 时,也许有一些属性?或者你知道在 orm.xml 中配置它的位置吗?因为使用 Spring Data 我根本没有这样的文件。

标签: spring hibernate spring-boot spring-data-jpa


【解决方案1】:

据我所知,您无法动态编辑注释属性。看看this 的帖子。

也许尝试拥有多个具有自己的目录名称的抽象实体,并基于application.properties property 执行switch 以获得正确的实体。

【讨论】:

  • 如何根据属性进行切换?这就是这种情况的困难所在。如果我不能动态编辑注解属性,我想找到一些不同于注解的解决方案。
  • 您可以使用this 获取任何属性。然后在你的方法中实例化基于该属性的类。但是您将需要定义您将使用的所有类以及所有关联的表。
【解决方案2】:

也许这种方法会奏效:

  1. 向 Maven 配置文件添加属性
  2. 将属性 catalog.name 添加到 .properties 文件
  3. 使用 Spring @PropertySource 注解加载属性文件
  4. 做这样的事情:

    @Table(catalog = "${catalog.name}")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多