[jOOQ/jOOQ#13031] Add a rootPath property to the LiquibaseDatabase

configuration for the FileSystemResourceAccessor
This commit is contained in:
Lukas Eder 2022-02-09 18:06:47 +01:00
parent fe9e8854ea
commit 9c1a9a2bb3
2 changed files with 11 additions and 20 deletions

View File

@ -39,12 +39,12 @@ package org.jooq.meta.extensions.liquibase;
import static org.jooq.tools.StringUtils.isBlank;
import java.io.File;
import java.lang.reflect.Method;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@ -53,6 +53,7 @@ import org.jooq.meta.TableDefinition;
import org.jooq.meta.extensions.AbstractInterpretingDatabase;
import org.jooq.tools.Convert;
import org.jooq.tools.JooqLogger;
import org.jooq.tools.StringUtils;
import liquibase.Liquibase;
import liquibase.database.Database;
@ -61,6 +62,7 @@ import liquibase.database.jvm.JdbcConnection;
import liquibase.resource.ClassLoaderResourceAccessor;
import liquibase.resource.CompositeResourceAccessor;
import liquibase.resource.FileSystemResourceAccessor;
import liquibase.resource.ResourceAccessor;
/**
* The Liquibase database.
@ -100,6 +102,7 @@ public class LiquibaseDatabase extends AbstractInterpretingDatabase {
@Override
protected void export() throws Exception {
String rootPath = getProperties().getProperty("rootPath");
String scripts = getProperties().getProperty("scripts");
includeLiquibaseTables = Boolean.parseBoolean(getProperties().getProperty("includeLiquibaseTables", "false"));
@ -143,27 +146,15 @@ public class LiquibaseDatabase extends AbstractInterpretingDatabase {
databaseChangeLogLockTableName = database.getDatabaseChangeLogLockTableName();
// [#9866] Allow for loading included files from the classpath or using absolute paths.
FileSystemResourceAccessor fsra;
try {
fsra = new FileSystemResourceAccessor();
}
// [#11659] Continue supporting Liquibase 3.x
catch (NoSuchMethodError e) {
fsra = FileSystemResourceAccessor.class.getConstructor().newInstance();
}
Liquibase liquibase = new Liquibase(
scripts,
new CompositeResourceAccessor(
fsra,
// [#12872] [#13021] The decision is made based on the presence of the rootPath property
ResourceAccessor ra = StringUtils.isBlank(rootPath)
? new CompositeResourceAccessor(
new ClassLoaderResourceAccessor(),
new ClassLoaderResourceAccessor(Thread.currentThread().getContextClassLoader())
),
database
);
)
: new FileSystemResourceAccessor(new File(rootPath));
Liquibase liquibase = new Liquibase(scripts, ra, database);
liquibase.update(contexts);
}

View File

@ -50,7 +50,7 @@
<!-- Examples and/or extension modules use these dependencies -->
<hibernate.version>5.6.1.Final</hibernate.version>
<liquibase.version>4.4.1</liquibase.version>
<liquibase.version>4.4.3</liquibase.version>
<spring.version>5.3.14</spring.version>
<spring.boot.version>2.6.1</spring.boot.version>
<!-- [#12884] TODO: Remove explicit upgrade of protobuf-java again when https://github.com/google/error-prone/pull/2819 is released -->