Skip to content

Commit

Permalink
Merge pull request #46080 from gsmet/configmapping-liquibase
Browse files Browse the repository at this point in the history
Liquibase - Switch to @ConfigMapping
  • Loading branch information
gastaldi authored Feb 4, 2025
2 parents b2b6d40 + 835f809 commit 48f7169
Show file tree
Hide file tree
Showing 20 changed files with 142 additions and 457 deletions.
3 changes: 0 additions & 3 deletions extensions/liquibase-mongodb/deployment/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,6 @@
<version>${project.version}</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<arg>-AlegacyConfigRoot=true</arg>
</compilerArgs>
</configuration>
</execution>
</executions>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ private List<String> getChangeLogs(LiquibaseMongodbBuildTimeConfig liquibaseBuil
Thread.currentThread().getContextClassLoader())) {

Set<String> resources = new LinkedHashSet<>(
findAllChangeLogFiles(liquibaseBuildConfig.changeLog, changeLogParserFactory,
findAllChangeLogFiles(liquibaseBuildConfig.changeLog(), changeLogParserFactory,
classLoaderResourceAccessor, changeLogParameters));

LOGGER.debugf("Liquibase changeLogs: %s", resources);
Expand Down
3 changes: 0 additions & 3 deletions extensions/liquibase-mongodb/runtime/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,6 @@
<version>${project.version}</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<arg>-AlegacyConfigRoot=true</arg>
</compilerArgs>
</configuration>
</execution>
</executions>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,20 +44,20 @@ private ResourceAccessor resolveResourceAccessor() throws FileNotFoundException
compositeResourceAccessor
.addResourceAccessor(new ClassLoaderResourceAccessor(Thread.currentThread().getContextClassLoader()));

if (!liquibaseMongodbBuildTimeConfig.changeLog.startsWith("filesystem:")
&& liquibaseMongodbBuildTimeConfig.searchPath.isEmpty()) {
if (!liquibaseMongodbBuildTimeConfig.changeLog().startsWith("filesystem:")
&& liquibaseMongodbBuildTimeConfig.searchPath().isEmpty()) {
return compositeResourceAccessor;
}

if (liquibaseMongodbBuildTimeConfig.searchPath.isEmpty()) {
if (liquibaseMongodbBuildTimeConfig.searchPath().isEmpty()) {
compositeResourceAccessor.addResourceAccessor(
new DirectoryResourceAccessor(
Paths.get(StringUtil.changePrefix(liquibaseMongodbBuildTimeConfig.changeLog, "filesystem:", ""))
Paths.get(StringUtil.changePrefix(liquibaseMongodbBuildTimeConfig.changeLog(), "filesystem:", ""))
.getParent()));
return compositeResourceAccessor;
}

for (String searchPath : liquibaseMongodbBuildTimeConfig.searchPath.get()) {
for (String searchPath : liquibaseMongodbBuildTimeConfig.searchPath().get()) {
compositeResourceAccessor.addResourceAccessor(new DirectoryResourceAccessor(Paths.get(searchPath)));
}

Expand All @@ -66,7 +66,7 @@ private ResourceAccessor resolveResourceAccessor() throws FileNotFoundException

private String parseChangeLog(String changeLog) {

if (changeLog.startsWith("filesystem:") && liquibaseMongodbBuildTimeConfig.searchPath.isEmpty()) {
if (changeLog.startsWith("filesystem:") && liquibaseMongodbBuildTimeConfig.searchPath().isEmpty()) {
return Paths.get(StringUtil.changePrefix(changeLog, "filesystem:", "")).getFileName().toString();
}

Expand All @@ -83,7 +83,7 @@ private String parseChangeLog(String changeLog) {

public Liquibase createLiquibase() {
try (ResourceAccessor resourceAccessor = resolveResourceAccessor()) {
String parsedChangeLog = parseChangeLog(liquibaseMongodbBuildTimeConfig.changeLog);
String parsedChangeLog = parseChangeLog(liquibaseMongodbBuildTimeConfig.changeLog());
String connectionString = this.mongoClientConfig.connectionString.orElse("mongodb://localhost:27017");

// Every MongoDB client configuration must be added to the connection string, we didn't add all as it would be too much to support.
Expand Down Expand Up @@ -121,20 +121,20 @@ public Liquibase createLiquibase() {
null, resourceAccessor);

if (database != null) {
liquibaseMongodbConfig.liquibaseCatalogName.ifPresent(database::setLiquibaseCatalogName);
liquibaseMongodbConfig.liquibaseSchemaName.ifPresent(database::setLiquibaseSchemaName);
liquibaseMongodbConfig.liquibaseTablespaceName.ifPresent(database::setLiquibaseTablespaceName);
liquibaseMongodbConfig.liquibaseCatalogName().ifPresent(database::setLiquibaseCatalogName);
liquibaseMongodbConfig.liquibaseSchemaName().ifPresent(database::setLiquibaseSchemaName);
liquibaseMongodbConfig.liquibaseTablespaceName().ifPresent(database::setLiquibaseTablespaceName);

if (liquibaseMongodbConfig.defaultCatalogName.isPresent()) {
database.setDefaultCatalogName(liquibaseMongodbConfig.defaultCatalogName.get());
if (liquibaseMongodbConfig.defaultCatalogName().isPresent()) {
database.setDefaultCatalogName(liquibaseMongodbConfig.defaultCatalogName().get());
}
if (liquibaseMongodbConfig.defaultSchemaName.isPresent()) {
database.setDefaultSchemaName(liquibaseMongodbConfig.defaultSchemaName.get());
if (liquibaseMongodbConfig.defaultSchemaName().isPresent()) {
database.setDefaultSchemaName(liquibaseMongodbConfig.defaultSchemaName().get());
}
}
Liquibase liquibase = new Liquibase(parsedChangeLog, resourceAccessor, database);

for (Map.Entry<String, String> entry : liquibaseMongodbConfig.changeLogParameters.entrySet()) {
for (Map.Entry<String, String> entry : liquibaseMongodbConfig.changeLogParameters().entrySet()) {
liquibase.getChangeLogParameters().set(entry.getKey(), entry.getValue());
}

Expand All @@ -155,7 +155,7 @@ public LiquibaseMongodbConfig getConfiguration() {
* @return the label expression
*/
public LabelExpression createLabels() {
return new LabelExpression(liquibaseMongodbConfig.labels.orElse(null));
return new LabelExpression(liquibaseMongodbConfig.labels().orElse(null));
}

/**
Expand All @@ -164,6 +164,6 @@ public LabelExpression createLabels() {
* @return the contexts
*/
public Contexts createContexts() {
return new Contexts(liquibaseMongodbConfig.contexts.orElse(null));
return new Contexts(liquibaseMongodbConfig.contexts().orElse(null));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,26 @@
import java.util.List;
import java.util.Optional;

import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot;
import io.smallrye.config.ConfigMapping;
import io.smallrye.config.WithDefault;

/**
* The liquibase configuration
*/
@ConfigRoot(name = "liquibase-mongodb", phase = ConfigPhase.BUILD_TIME)
public class LiquibaseMongodbBuildTimeConfig {
@ConfigRoot(phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED)
@ConfigMapping(prefix = "quarkus.liquibase-mongodb")
public interface LiquibaseMongodbBuildTimeConfig {

/**
* The change log file
*/
@ConfigItem(defaultValue = "db/changeLog.xml")
public String changeLog;
@WithDefault("db/changeLog.xml")
String changeLog();

/**
* The search path for DirectoryResourceAccessor
*/
@ConfigItem
public Optional<List<String>> searchPath;
Optional<List<String>> searchPath();
}
Original file line number Diff line number Diff line change
@@ -1,91 +1,84 @@
package io.quarkus.liquibase.mongodb.runtime;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot;
import io.smallrye.config.ConfigMapping;
import io.smallrye.config.WithDefault;

/**
* The liquibase configuration
*/
@ConfigRoot(name = "liquibase-mongodb", phase = ConfigPhase.RUN_TIME)
public class LiquibaseMongodbConfig {
@ConfigRoot(phase = ConfigPhase.RUN_TIME)
@ConfigMapping(prefix = "quarkus.liquibase-mongodb")
public interface LiquibaseMongodbConfig {

/**
* Flag to enable / disable Liquibase.
*
*/
@ConfigItem(defaultValue = "true")
public boolean enabled;
@WithDefault("true")
boolean enabled();

/**
* The migrate at start flag
*/
@ConfigItem
public boolean migrateAtStart;
@WithDefault("false")
boolean migrateAtStart();

/**
* The validate on update flag
*/
@ConfigItem(defaultValue = "true")
public boolean validateOnMigrate;
@WithDefault("true")
boolean validateOnMigrate();

/**
* The clean at start flag
*/
@ConfigItem
public boolean cleanAtStart;
@WithDefault("false")
boolean cleanAtStart();

/**
* The parameters to be passed to the changelog.
* Defined as key value pairs.
*/
@ConfigItem
public Map<String, String> changeLogParameters = new HashMap<>();;
Map<String, String> changeLogParameters();

/**
* The list of contexts
*/
@ConfigItem
public Optional<List<String>> contexts = Optional.empty();
Optional<List<String>> contexts();

/**
* The list of labels
*/
@ConfigItem
public Optional<List<String>> labels = Optional.empty();
Optional<List<String>> labels();

/**
* The default catalog name
*/
@ConfigItem
public Optional<String> defaultCatalogName = Optional.empty();
Optional<String> defaultCatalogName();

/**
* The default schema name
*/
@ConfigItem
public Optional<String> defaultSchemaName = Optional.empty();
Optional<String> defaultSchemaName();

/**
* The liquibase tables catalog name
*/
@ConfigItem
public Optional<String> liquibaseCatalogName = Optional.empty();
Optional<String> liquibaseCatalogName();

/**
* The liquibase tables schema name
*/
@ConfigItem
public Optional<String> liquibaseSchemaName = Optional.empty();
Optional<String> liquibaseSchemaName();

/**
* The liquibase tables tablespace name
*/
@ConfigItem
public Optional<String> liquibaseTablespaceName = Optional.empty();
Optional<String> liquibaseTablespaceName();
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public LiquibaseMongodbFactory get() {
}

public void doStartActions() {
if (!config.getValue().enabled) {
if (!config.getValue().enabled()) {
return;
}
try {
Expand All @@ -48,18 +48,18 @@ public void doStartActions() {
try {
LiquibaseMongodbFactory liquibaseFactory = liquibaseFactoryHandle.get();

if (!liquibaseFactory.getConfiguration().cleanAtStart
&& !liquibaseFactory.getConfiguration().migrateAtStart) {
if (!liquibaseFactory.getConfiguration().cleanAtStart()
&& !liquibaseFactory.getConfiguration().migrateAtStart()) {
// Don't initialize if no clean or migration required at start
return;
}

try (Liquibase liquibase = liquibaseFactory.createLiquibase()) {
if (liquibaseFactory.getConfiguration().cleanAtStart) {
if (liquibaseFactory.getConfiguration().cleanAtStart()) {
liquibase.dropAll();
}
if (liquibaseFactory.getConfiguration().migrateAtStart) {
if (liquibaseFactory.getConfiguration().validateOnMigrate) {
if (liquibaseFactory.getConfiguration().migrateAtStart()) {
if (liquibaseFactory.getConfiguration().validateOnMigrate()) {
liquibase.validate();
}
liquibase.update(liquibaseFactory.createContexts(), liquibaseFactory.createLabels());
Expand Down
3 changes: 0 additions & 3 deletions extensions/liquibase/deployment/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,6 @@
<version>${project.version}</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<arg>-AlegacyConfigRoot=true</arg>
</compilerArgs>
</configuration>
</execution>
</executions>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -336,23 +336,17 @@ private List<String> getChangeLogs(Collection<String> dataSourceNames, Liquibase

List<LiquibaseDataSourceBuildTimeConfig> liquibaseDataSources = new ArrayList<>();

if (DataSourceUtil.hasDefault(dataSourceNames)) {
liquibaseDataSources.add(liquibaseBuildConfig.defaultDataSource);
}

for (String dataSourceName : dataSourceNames) {
if (!DataSourceUtil.isDefault(dataSourceName)) {
liquibaseDataSources.add(liquibaseBuildConfig.getConfigForDataSourceName(dataSourceName));
}
liquibaseDataSources.add(liquibaseBuildConfig.datasources().get(dataSourceName));
}

ChangeLogParameters changeLogParameters = new ChangeLogParameters();
ChangeLogParserFactory changeLogParserFactory = ChangeLogParserFactory.getInstance();
Set<String> resources = new LinkedHashSet<>();
for (LiquibaseDataSourceBuildTimeConfig liquibaseDataSourceConfig : liquibaseDataSources) {

Optional<List<String>> oSearchPaths = liquibaseDataSourceConfig.searchPath;
String changeLog = liquibaseDataSourceConfig.changeLog;
Optional<List<String>> oSearchPaths = liquibaseDataSourceConfig.searchPath();
String changeLog = liquibaseDataSourceConfig.changeLog();
String parsedChangeLog = parseChangeLog(oSearchPaths, changeLog);

try (ResourceAccessor resourceAccessor = resolveResourceAccessor(oSearchPaths, changeLog)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public void assertAllConfigurationSettings(LiquibaseConfig configuration, String

public void assertDefaultConfigurationSettings(LiquibaseConfig configuration) {

assertEquals(configuration.changeLog, LiquibaseDataSourceBuildTimeConfig.defaultConfig().changeLog);
assertEquals(configuration.changeLog, LiquibaseDataSourceBuildTimeConfig.DEFAULT_CHANGE_LOG);

assertEquals(configuration.databaseChangeLogTableName,
GlobalConfiguration.DATABASECHANGELOG_TABLE_NAME.getCurrentValue());
Expand Down
3 changes: 0 additions & 3 deletions extensions/liquibase/runtime/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,6 @@
<version>${project.version}</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<arg>-AlegacyConfigRoot=true</arg>
</compilerArgs>
</configuration>
</execution>
</executions>
Expand Down
Loading

0 comments on commit 48f7169

Please sign in to comment.