【发布时间】:2020-04-24 20:26:43
【问题描述】:
鉴于 spring boot 应用程序的 application.yml 文件中存在这样的 SPEL 表达式 -
database:
schema: '#{"${ENV_VAR:}".equals("")?"DEMO":"DEMO_${ENV_VAR:}"}'
以下代码在代码中工作,如果 ${ENV_VAR} = XYZ 则打印 DEMO_XYZ / DEMO 等替代值
@Value("${database.schema}")
private String schema;
但是带有表注释的 Hibernate JPA 实体无法将此处启用 SPEL 的变量作为模式 -
@Entity
@Table(name = "TABLE_A", schema="${database.schema}") // prints whole spel expression here
public class TableA { ...
即使在下面也无法使用默认模式为 SPEL 使用替换值 -
spring:
jpa:
show-sql: true
properties:
hibernate:
default_schema: ${database.schema} // prints whole value here as well
似乎 flyway 无法使用已经在 application.yml 中定义好的 SPEL 变量
spring:
flyway:
jdbc-url: ...
schemas: ${database.schema}
hibernate.default_schema 和 flyway.schemas 有什么方法可以在同一个 YML 中接受像 ${database.schema} 这样的 SPEL 表达式?
【问题讨论】:
-
@table 和 hibernate 道具不是 spring 的一部分,因此解析不起作用。
标签: java spring hibernate spring-boot spring-el