在液基changeSet documentation中指出:
每个changeSet标记由“ id”标记,“ author”标记和 changelog文件类路径名称
组合唯一标识
很多时候,我想避免通过其文件位置来标识一个changeSet,因此我在根元素中使用了logicalFilePath。
不过,我想更好地了解文件路径是如何设计的。
我的问题是:简单的“文件路径”和“文件类路径名”之间有什么区别?
我使用一个简单的changeSet(没有逻辑文件路径)进行了一些测试,该创建了一个简单的CUSTOMERS表。
从c:\ projects
运行C:\projects> liquibase --changeLogFile=.\P1\databaseChangeLog.xml --username=U1 --password=U1 --url="jdbc:oracle:thin:@//localhost:1521/xe" update
Starting Liquibase at sab, 27 lug 2019 21:55:47 CEST (version 3.6.2 built at 2018-07-03 11:28:09)
Liquibase: Update has been successful.
从c:\ projects
检查状态C:\projects> liquibase --changeLogFile=.\P1\databaseChangeLog.xml --username=U1 --password=U1 --url="jdbc:oracle:thin:@//localhost:1521/xe" status
Starting Liquibase at sab, 27 lug 2019 23:18:06 CEST (version 3.6.2 built at 2018-07-03 11:28:09)
U1@jdbc:oracle:thin:@//localhost:1521/xe is up to date
如您所见,它是最新的!
从c:\ projects \ P1
运行在这里,我进入了C:\ projects \ P1,因此chanageLogFile参数只是文件名:“。\ databaseChangeLog.xml”,而之前是“。\ P1 \ databaseChangeLog.xml”。
C:\projects\P1> liquibase --changeLogFile=.\databaseChangeLog.xml --username=U1 --password=U1 --url="jdbc:oracle:thin:@//localhost:1521/xe" update
Starting Liquibase at sab, 27 lug 2019 21:55:32 CEST (version 3.6.2 built at 2018-07-03 11:28:09)
Unexpected error running Liquibase: ORA-00955: name is already used by an existing object
[Failed SQL: CREATE TABLE P009T02.CUSTOMERS (ID NUMBER, NAME VARCHAR2(255), SURNAME VARCHAR2(255))]
...
changeLogFile尚未更改,但是因为changeSet由其位置标识,所以它们被识别为不同。 (实际上只有一个)。 由于它是一个不同的变更集,因此liquibase尝试执行它,但是由于该表已经存在,因此它失败了。
在databasechangelog表中的FILENAME字段中,我们有:
.\P1\databaseChangeLog.xml
这不过是我在第一次执行中指定为changeLogFile参数的内容。 因此,尽管有争议,但功能非常清楚。如文档中所述,它使用路径作为键。仍然不清楚的是,虽然它似乎使用的是作为路径传递的确切字符串,但是文档中讨论的这个“文件类路径”使我感到困惑,我想知道是否还有其他用途。