Browse Source

Polish "Use liquibase schema in LiquibaseEndpoint if it set"

See gh-47300
pull/47553/head
Stéphane Nicoll 3 months ago
parent
commit
5344fb218a
  1. 6
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java
  2. 92
      spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java

6
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java

@ -80,10 +80,8 @@ public class LiquibaseEndpoint { @@ -80,10 +80,8 @@ public class LiquibaseEndpoint {
Database database = null;
try {
database = factory.findCorrectDatabaseImplementation(connection);
String schemaToUse = liquibase.getLiquibaseSchema();
if (!StringUtils.hasText(schemaToUse)) { // Use liquibase-schema if set, otherwise fall back to default-schema
schemaToUse = liquibase.getDefaultSchema();
}
String schemaToUse = StringUtils.hasText(liquibase.getLiquibaseSchema())
? liquibase.getLiquibaseSchema() : liquibase.getDefaultSchema();
if (StringUtils.hasText(schemaToUse)) {
database.setDefaultSchemaName(schemaToUse);
}

92
spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java

@ -18,7 +18,7 @@ package org.springframework.boot.actuate.liquibase; @@ -18,7 +18,7 @@ package org.springframework.boot.actuate.liquibase;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@ -34,7 +34,9 @@ import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfigurati @@ -34,7 +34,9 @@ import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfigurati
import org.springframework.boot.jdbc.EmbeddedDatabaseConnection;
import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.boot.test.context.runner.ContextConsumer;
import org.springframework.boot.testsupport.classpath.resources.WithResource;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@ -50,7 +52,6 @@ import static org.assertj.core.api.Assertions.assertThat; @@ -50,7 +52,6 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author Andy Wilkinson
* @author Stephane Nicoll
* @author Leo Li
* @author Nabil Fawwaz Elqayyim
*/
@WithResource(name = "db/changelog/db.changelog-master.yaml", content = """
databaseChangeLog:
@ -66,14 +67,7 @@ class LiquibaseEndpointTests { @@ -66,14 +67,7 @@ class LiquibaseEndpointTests {
@Test
void liquibaseReportIsReturned() {
this.contextRunner.withUserConfiguration(Config.class).run((context) -> {
Map<String, LiquibaseBeanDescriptor> liquibaseBeans = context.getBean(LiquibaseEndpoint.class)
.liquibaseBeans()
.getContexts()
.get(context.getId())
.getLiquibaseBeans();
assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1);
});
this.contextRunner.withUserConfiguration(Config.class).run(hasEndpointWithInitializedSchema());
}
@Test
@ -91,48 +85,60 @@ class LiquibaseEndpointTests { @@ -91,48 +85,60 @@ class LiquibaseEndpointTests {
}
@Test
@WithResource(name = "db/create-custom-schema.sql", content = "CREATE SCHEMA CUSTOMSCHEMA;")
void invokeWithCustomSchema() {
@WithResource(name = "db/create-custom-schema.sql", content = "CREATE SCHEMA ANOTHER_SCHEMA;")
void invokeWithCustomDefaultSchemaFailsIfItDoesNotExist() {
this.contextRunner.withUserConfiguration(Config.class, DataSourceWithSchemaConfiguration.class)
.withPropertyValues("spring.liquibase.default-schema=CUSTOMSCHEMA")
.run((context) -> {
Map<String, LiquibaseBeanDescriptor> liquibaseBeans = context.getBean(LiquibaseEndpoint.class)
.liquibaseBeans()
.getContexts()
.get(context.getId())
.getLiquibaseBeans();
assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1);
});
.withPropertyValues("spring.liquibase.default-schema=CUSTOM_DEFAULT_SCHEMA")
.run((context) -> assertThat(context).hasFailed()
.getFailure()
.rootCause()
.hasMessageContaining("CUSTOM_DEFAULT_SCHEMA"));
}
@Test
void invokeWithCustomTables() {
this.contextRunner.withUserConfiguration(Config.class)
.withPropertyValues("spring.liquibase.database-change-log-lock-table=liquibase_database_changelog_lock",
"spring.liquibase.database-change-log-table=liquibase_database_changelog")
.run((context) -> {
Map<String, LiquibaseBeanDescriptor> liquibaseBeans = context.getBean(LiquibaseEndpoint.class)
.liquibaseBeans()
.getContexts()
.get(context.getId())
.getLiquibaseBeans();
assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1);
});
@WithResource(name = "db/create-custom-schema.sql", content = "CREATE SCHEMA CUSTOM_SCHEMA;")
void invokeWithCustomDefaultSchema() {
this.contextRunner.withUserConfiguration(Config.class, DataSourceWithSchemaConfiguration.class)
.withPropertyValues("spring.liquibase.default-schema=CUSTOM_SCHEMA")
.run(hasEndpointWithInitializedSchema());
}
@Test
@WithResource(name = "db/create-custom-schema.sql", content = "CREATE SCHEMA ANOTHER_SCHEMA;")
void invokeWithLiquibaseSchemaFailsIfItDoesNotExist() {
this.contextRunner.withUserConfiguration(Config.class, DataSourceWithSchemaConfiguration.class)
.withPropertyValues("spring.liquibase.liquibase-schema=CUSTOM_LIQUIBASE_SCHEMA")
.run((context) -> assertThat(context).hasFailed()
.getFailure()
.rootCause()
.hasMessageContaining("CUSTOM_LIQUIBASE_SCHEMA"));
}
@Test
@WithResource(name = "db/create-custom-schema.sql", content = "CREATE SCHEMA LIQUIBASE_SCHEMA;")
void invokeWithLiquibaseSchema() {
this.contextRunner.withUserConfiguration(Config.class, DataSourceWithSchemaConfiguration.class)
.withPropertyValues("spring.liquibase.liquibase-schema=LIQUIBASE_SCHEMA")
.run((context) -> {
Map<String, LiquibaseBeanDescriptor> liquibaseBeans = context.getBean(LiquibaseEndpoint.class)
.liquibaseBeans()
.getContexts()
.get(context.getId())
.getLiquibaseBeans();
assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1);
});
.withPropertyValues("spring.liquibase.liquibase-schema=LIQUIBASE_SCHEMA")
.run(hasEndpointWithInitializedSchema());
}
@Test
void invokeWithCustomTables() {
this.contextRunner.withUserConfiguration(Config.class)
.withPropertyValues("spring.liquibase.database-change-log-lock-table=liquibase_database_changelog_lock",
"spring.liquibase.database-change-log-table=liquibase_database_changelog")
.run(hasEndpointWithInitializedSchema());
}
private ContextConsumer<AssertableApplicationContext> hasEndpointWithInitializedSchema() {
return (context) -> {
Map<String, LiquibaseBeanDescriptor> liquibaseBeans = context.getBean(LiquibaseEndpoint.class)
.liquibaseBeans()
.getContexts()
.get(context.getId())
.getLiquibaseBeans();
assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1);
};
}
@Test
@ -195,7 +201,7 @@ class LiquibaseEndpointTests { @@ -195,7 +201,7 @@ class LiquibaseEndpointTests {
.setName(UUID.randomUUID().toString())
.build();
DatabaseInitializationSettings settings = new DatabaseInitializationSettings();
settings.setSchemaLocations(Arrays.asList("classpath:/db/create-custom-schema.sql"));
settings.setSchemaLocations(List.of("classpath:/db/create-custom-schema.sql"));
DataSourceScriptDatabaseInitializer initializer = new DataSourceScriptDatabaseInitializer(dataSource,
settings);
initializer.initializeDatabase();

Loading…
Cancel
Save