gpt4 book ai didi

java - 如何在 Spring Boot 中配置 Maven Liquibase 插件?

转载 作者:行者123 更新时间:2023-11-30 06:02:11 26 4
gpt4 key购买 nike

我正在学习 Liquibase 和 Spring Boot,所以我用 Spring Initializr 创建了一个简单的项目.

在我添加的 POM.xml 文件中:

    <plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<propertyFile>src/main/resources/application.properties</propertyFile>
</configuration>
</plugin>

我已将 application.properties 指定为属性文件,因此我的应用程序的所有配置都可以在单个文件中进行。

当我从 IntelliJ 运行任何 liquibase-maven-plugin 任务时,我得到不同的错误,这是运行 changeLogSync 任务的示例:

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.4.1:changelogSync (default-cli) on project simpleTest: The changeLogFile must be specified

如果我在 application.properties 中添加正确的键,我就能让它工作。

例如,我发现 liquibase-maven-plugin 不会读取 spring.datasource.url 属性,而只会读取 url 属性。

出于这个原因,我的 application.properties 必须是类似的东西:

environment                         = JUnit
spring.datasource.url = jdbc:h2:file:./target/test
spring.datasource.driver-class-name = org.h2.Driver
spring.datasource.username = sa
spring.datasource.password = sa
spring.liquibase.change-log = classpath:/db/changelog/db.changelog-master.yaml
spring.h2.console.enabled = true
spring.h2.console.path = /h2-console


# Keys needed for liquibase maven plugin
url = jdbc:h2:file:./target/test
username = sa
password = sa

如果我遵循这种模式,我最终会在我的 application.properties 中得到几个名称略有不同但值相同的键,这个解决方案显然非常丑陋且效率低下。

在 Spring Boot 中配置和使用 Liquibase Maven 插件的高效且可维护的方法是什么?

在收到 Amith Kumar 的回答后进行编辑:

environment=JUnit
spring.datasource.url=jdbc:h2:file:./target/glossary-test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=sa
spring.liquibase.change-log=classpath:/db/changelog/db.changelog-master.yaml
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
url=${spring.datasource.url}
changeLogFile=${spring.liquibase.change-log}
username=${spring.datasource.username}
password=${spring.datasource.password}

修改后报错:

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.4.1:dropAll (default-cli) on project test: Error setting up or running Liquibase: liquibase.exception.DatabaseException: java.lang.RuntimeException: Cannot find database driver: Driver class was not specified and could not be determined from the url (${spring.datasource.url}) -> [Help 1]

最佳答案

Liquibase maven 插件支持通过pom.xml 配置注入(inject)。

所以你可以使用properties-maven-plugin从 application.properties 中包含您的属性(如果您使用的是 application.yml,则使用 yaml-properties-maven-plugin),然后将它们注入(inject)到 liquibase 配置中:

示例:

<plugin>
<groupId>it.ozimov</groupId>
<artifactId>yaml-properties-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>src/main/resources/application.yml</file>
</files>
</configuration>
</execution>
</executions>
</plugin>

现在您可以在 liquibase 配置中注入(inject)这些属性:

<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<changeLogFile>src/main/resources/db/changelog/db.changelog-master.yaml</changeLogFile>
<driver>${spring.datasource.driverClassName}</driver>
<url>${spring.datasource.url}</url>
<username>${spring.datasource.username}</username>
<password>${spring.datasource.password}</password>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
<databaseChangeLogTableName>DATABASECHANGELOG</databaseChangeLogTableName>
<databaseChangeLogLockTableName>DATABASECHANGELOGLOCK</databaseChangeLogLockTableName>
</configuration>
<dependencies>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
</plugin>

我还需要设置 logicalFilePath确保 spring boot 集成和 maven 插件推断的更改日志路径相同。

关于java - 如何在 Spring Boot 中配置 Maven Liquibase 插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55596807/

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