如何在 Spring Boot 中设置 application.yml 中的 liquibase 变量?
How to set liquibase variables in application.yml in Spring Boot?
当Spring Boot 应用程序首次启动时,liquibase 应创建一个用户供运行时使用。密码应该是可配置的,以便它可以因环境而异。我正在努力实现这样的目标:
<changeSet id="2021-12-02 12:00:01" author="author" dbms="mysql">
<sql>
CREATE USER consumer_app IDENTIFIED BY '${spring.datasource.password}';
</sql>
<rollback>
DROP USER IF EXISTS consumer_app;
</rollback>
</changeSet>
和application.yml:
spring:
liquibase:
enabled: true
user: root
password: root
datasource:
url: "jdbc:mysql://localhost:3306/db"
username: consumer_app
password: password
而且它不起作用。密码设置为${spring.datasource.password}
,而不是application.yml中这个属性的值。没有单引号我会得到一个语法错误。
该项目是使用 Maven 构建的。
密码将从 docker-compose 注入,因此 init.sql 和 docker- 管理变量也是一个选项。
您应该改用 insert into mysql.user,并使用 insert liquiabse balise 而不是普通的 SQL 来传递参数值。
在 spring 引导中,您使用以下示例从 yaml 传递参数:
spring:
liquibase:
parameters:
spring.datasource.password: ${spring.datasource.password}
请注意,只有传递给 spring.liquibase.parameters
的参数会被发送到 liquibase 上下文。
当Spring Boot 应用程序首次启动时,liquibase 应创建一个用户供运行时使用。密码应该是可配置的,以便它可以因环境而异。我正在努力实现这样的目标:
<changeSet id="2021-12-02 12:00:01" author="author" dbms="mysql">
<sql>
CREATE USER consumer_app IDENTIFIED BY '${spring.datasource.password}';
</sql>
<rollback>
DROP USER IF EXISTS consumer_app;
</rollback>
</changeSet>
和application.yml:
spring:
liquibase:
enabled: true
user: root
password: root
datasource:
url: "jdbc:mysql://localhost:3306/db"
username: consumer_app
password: password
而且它不起作用。密码设置为${spring.datasource.password}
,而不是application.yml中这个属性的值。没有单引号我会得到一个语法错误。
该项目是使用 Maven 构建的。
密码将从 docker-compose 注入,因此 init.sql 和 docker- 管理变量也是一个选项。
您应该改用 insert into mysql.user,并使用 insert liquiabse balise 而不是普通的 SQL 来传递参数值。
在 spring 引导中,您使用以下示例从 yaml 传递参数:
spring:
liquibase:
parameters:
spring.datasource.password: ${spring.datasource.password}
请注意,只有传递给 spring.liquibase.parameters
的参数会被发送到 liquibase 上下文。