2 回答
TA贡献1770条经验 获得超3个赞
您可以为此使用Spring Boot Pre-Liquibase 模块。这正是它的意义所在。它在执行 Liquibase 本身之前执行一些 SQL。Pre-Liquibase 将自身设置在 Spring Boot AutoConfigure 链中,以确保它始终在Liquibase之前执行。
第1步
将以下 Starter 添加到您的项目中:
<dependency>
<groupId>net.lbruun.springboot</groupId>
<artifactId>preliquibase-spring-boot-starter</artifactId>
<version> ---latest-version--- </version>
</dependency>
第2步
添加一个src/main/resources/preliquibase名称postgresql.sql和内容如下的 SQL 文件:
CREATE SCHEMA IF NOT EXISTS ${spring.liquibase.default-schema};
的${}语法表示的占位符的变量。Pre-Liquibase 将从您的 Spring Environment 中的属性解析它。
第 3 步
像这样设置应用程序属性:
spring.liquibase.default-schema=${my.db.schemaname}
spring.jpa.properties.hibernate.default_schema=${my.db.schemaname}
现在 - 在这个例子中 - 唯一需要决定的是my.db.schemaname值的来源。那是你的选择。该示例项目主张,它应该来自于一个操作系统环境变量,特别是如果你正在部署到云。
最后的话
警告:Pre-Liquibase 可能过于灵活,因为它允许执行任何SQL 代码。不要试图将内容放在 Pre-Liquibase 文件中,这些文件理应属于 Liquibase ChangeSet。老实说,我能想到的 Pre-Liquibase 的唯一用法是设置一个数据库“主页”(意味着模式或目录),Liquibase db 对象可以在其中生存,以便可以通过模式或目录分隔同一应用程序的实例同时驻留在同一数据库服务器上。
添加回答
举报