gpt4 book ai didi

java - 将 spel 与 Hibernate Table 和 Flyway 一起使用

转载 作者:行者123 更新时间:2023-12-02 08:40:32 26 4
gpt4 key购买 nike

在 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}

有什么方法可以让 hibernate.default_schemaflyway.schemas 在同一 YML 中接受像 ${database.schema} 这样的 SPEL 表达式?

最佳答案

Spring Boot 实际上并不支持 application.yml 中的 SpEL。

如果您注入(inject)环境并且

String property = env.getProperty("database.schema");

您将看到占位符已解析,但 SpEL 未解析。

@Value 必须有一些额外的逻辑来解析下游的 SpEL。

关于java - 将 spel 与 Hibernate Table 和 Flyway 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61416908/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com