Spring Boot JPA 将架构名称外部化到属性文件

Swa*_*tik 5 hibernate jpa spring-data spring-data-jpa spring-boot

我的 Spring Boot 应用程序有 2 个模式,我在实体类中对其进行硬编码,如下所示

@Entity
@Table(name"TABLE_NAME_1", schema="SCHEMA_NAME_1")
public class EntityName1{
...
}

@Entity
@Table(name"TABLE_NAME_2", schema="SCHEMA_NAME_2")
public class EntityName2{
...
}
Run Code Online (Sandbox Code Playgroud)

问题是这个模式名称在每个版本中都会不断变化。因此,每次发布后,我们都必须来到这里对实体文件的架构名称进行必要的更改。

现在我想我们可以在 Spring Boot 中配置 default_schema 但这行不通,因为我们需要外部化两个模式名称。

我们有什么办法可以使用这样的东西: @Entity @Table(name"TABLE_NAME_1", schema="{{default.schema_1}}") public class EntityName1{ ... }

@Entity
@Table(name"TABLE_NAME_2", schema="{{default.schema_2}}")
public class EntityName2{
...
}
Run Code Online (Sandbox Code Playgroud)

我们在外部文件中定义default.schema_1和default.schema_2。

Pio*_*aza 0

您只能通过反射在运行时更改模式的值(或与此相关的任何其他注释值)。例如如何做到这一点请看这里

然后,您可以创建一个 bean 实现,它将执行在您的情况下会在应用程序启动后更改特定实体类上的架构值的ApplicationListener<ApplicationReadyEvent>方法。onApplicationEvent