在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;
但是带有Table批注的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}
在相同的YML中,
hibernate.default_schema
和flyway.schemas
是否可以接受像${database.schema}
这样的SPEL表达式? 最佳答案
Spring Boot实际上在application.yml
中不支持SpEL。
如果您注入Environment
和
String property = env.getProperty("database.schema");
您会看到占位符已解析,但SpEL尚未解析。
@Value
必须具有一些其他逻辑才能在更下游解析SpEL。关于java - 在 hibernate 表和飞行 channel 中使用Spel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61416908/