如何在 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 上下文。