【问题标题】:How to set liquibase variables in application.yml in Spring Boot?如何在 Spring Boot 的 application.yml 中设置 liquibase 变量?
【发布时间】:2022-01-09 07:18:58
【问题描述】:

当 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 注入,因此使用带有 docker-managed 变量的 init.sql 也是一种选择。

【问题讨论】:

  • 你可以试试不带单引号吗? docs.liquibase.com/concepts/basic/…
  • @hovanessyan,没有单引号我得到一个语法错误
  • 查看它在 SQL 示例中所说的文档:“目前,更改日志属性替换在 SQL 格式中不可用。”

标签: spring-boot maven docker-compose liquibase


【解决方案1】:

在 Spring Boot 中,您通过以下示例从 yaml 传递参数:

spring:
  liquibase:
    parameters:
      spring.datasource.password: ${spring.datasource.password}

请注意,只有传递给 spring.liquibase.parameters 的参数才会被发送到 liquibase 上下文。

【讨论】:

  • 它有帮助。谢谢!
【解决方案2】:

您应该改为使用 insert into mysql.user,并使用 insert liquiabse balise 而不是普通 SQL 来传递参数值。

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 2019-10-27
    • 2019-05-23
    • 2018-12-30
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2015-03-18
    • 2021-10-17
    相关资源
    最近更新 更多