在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_schemaflyway.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/

10-10 11:26