Java 如何从外部属性文件填充Liquibase参数值?

Java 如何从外部属性文件填充Liquibase参数值?,java,maven,liquibase,Java,Maven,Liquibase,是否有任何方法可以基于外部属性文件的内容填充到Liquibase变更日志文件中 我想说的是: 并将table.name的值和其他参数保留在外部文件db.properties中,并从changelog中或从Liquibase命令行中引用此文件,或作为运行Liquibase的Maven插件的选项 我似乎找不到任何方法来做这件事,可能吗?看看。您可以使用命令行参数(-D[arg name]=[arg value])或环境变量。 如果不使用任何构建管理器工具(如Maven或Ant),则需要编写一个

是否有任何方法可以基于外部属性文件的内容填充到Liquibase变更日志文件中

我想说的是:


并将
table.name
的值和其他参数保留在外部文件
db.properties
中,并从changelog中或从Liquibase命令行中引用此文件,或作为运行Liquibase的Maven插件的选项

我似乎找不到任何方法来做这件事,可能吗?

看看。您可以使用命令行参数(
-D[arg name]=[arg value]
)或环境变量。 如果不使用任何构建管理器工具(如Maven或Ant),则需要编写一个脚本,从文件中读取参数并将其传递给命令

在编译时执行此操作: 听起来像是maven和/或

注意:小心使用液化酶和任何“标记物”替代品。。。liquibase存储应用变更集的CRC

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>test</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <build>
        <filters>
            <filter>src/main/filters/liquibase.properties</filter>
        </filters>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>liquibase.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>
/src/main/resources/liquibase.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog logicalFilePath="liquibase.xml" xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">

    <changeSet author="me" id="changeSetId1">
        <comment>Test</comment>

        <createTable tableName="${table.name}">
            <column name="id" type="int" />
            <column name="${column1.name}" type="varchar(${column1.length})" />
            <column name="${column2.name}" type="int" />
        </createTable>
    </changeSet>

</databaseChangeLog>

试验
编辑:调用(使用资源)如下所示:
mvn资源:资源液化:更新
或者更优选地使用配置文件。。。
mvn资源:资源液化:更新-P

EDIT2:这种定义列的方法有一个很大的优点。您可以使用此属性的(例如:column1.length)值(例如:10)来验证每个层:Hibernate、DAO、WEB、faces、JavaScript。只需在需要对其进行验证的每个位置使用此属性。即使在i18n/messages.properties中,如果需要(例如:input1.validation=不超过${column1.length}个字母)


唯一复杂的是,如果需要更改此值,则需要提供适当的liquibase更新/回滚脚本。有时可以更改值并设置新的liquibase校验和(安全操作,如增加varchar长度),但有时需要使用新的属性/值创建安全的更新更改脚本。

Maven能否从属性文件动态构建命令行,为liquibase自动定义所有-Dname=值对?您好!我尝试使用相同的结构,但在运行liquibase:update时出错-“table.name”(属性文件中的“table.name”)未被此任务使用。如果要从POM属性填充liquibase参数,解决方案是什么?
table.name=TABLE_NAME
column1.name=COLUMN1_NAME
column1.length=10
column2.name=COLUMN2_NAME
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog logicalFilePath="liquibase.xml" xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">

    <changeSet author="me" id="changeSetId1">
        <comment>Test</comment>

        <createTable tableName="${table.name}">
            <column name="id" type="int" />
            <column name="${column1.name}" type="varchar(${column1.length})" />
            <column name="${column2.name}" type="int" />
        </createTable>
    </changeSet>

</databaseChangeLog>