Browse Source

Refine 'Introduce a shared abstraction for database initialization'

Use test fixtures to keep getSettings() package-private

See gh-46213
pull/47784/head
Phillip Webb 2 months ago
parent
commit
770c94607c
  1. 1
      module/spring-boot-batch-jdbc/build.gradle
  2. 6
      module/spring-boot-batch-jdbc/src/main/java/org/springframework/boot/batch/jdbc/autoconfigure/BatchDataSourceScriptDatabaseInitializer.java
  3. 9
      module/spring-boot-batch-jdbc/src/test/java/org/springframework/boot/batch/jdbc/autoconfigure/BatchDataSourceScriptDatabaseInitializerTests.java
  4. 1
      module/spring-boot-integration/build.gradle
  5. 6
      module/spring-boot-integration/src/main/java/org/springframework/boot/integration/autoconfigure/IntegrationDataSourceScriptDatabaseInitializer.java
  6. 6
      module/spring-boot-integration/src/test/java/org/springframework/boot/integration/autoconfigure/IntegrationDataSourceScriptDatabaseInitializerTests.java
  7. 1
      module/spring-boot-quartz/build.gradle
  8. 6
      module/spring-boot-quartz/src/main/java/org/springframework/boot/quartz/autoconfigure/QuartzDataSourceScriptDatabaseInitializer.java
  9. 5
      module/spring-boot-quartz/src/test/java/org/springframework/boot/quartz/autoconfigure/QuartzDataSourceScriptDatabaseInitializerTests.java
  10. 1
      module/spring-boot-session-jdbc/build.gradle
  11. 6
      module/spring-boot-session-jdbc/src/main/java/org/springframework/boot/session/jdbc/autoconfigure/JdbcSessionDataSourceScriptDatabaseInitializer.java
  12. 6
      module/spring-boot-session-jdbc/src/test/java/org/springframework/boot/session/jdbc/autoconfigure/JdbcSessionDataSourceScriptDatabaseInitializerTests.java
  13. 3
      module/spring-boot-sql/src/main/java/org/springframework/boot/sql/init/AbstractScriptDatabaseInitializer.java
  14. 33
      module/spring-boot-sql/src/testFixtures/java/org/springframework/boot/sql/init/ScriptDatabaseInitializerSettings.java

1
module/spring-boot-batch-jdbc/build.gradle

@ -39,6 +39,7 @@ dependencies { @@ -39,6 +39,7 @@ dependencies {
testImplementation(project(":module:spring-boot-liquibase"))
testImplementation(project(":test-support:spring-boot-test-support"))
testImplementation(testFixtures(project(":core:spring-boot-autoconfigure")))
testImplementation(testFixtures(project(":module:spring-boot-sql")))
testImplementation("io.micrometer:micrometer-observation-test")
testRuntimeOnly("ch.qos.logback:logback-classic")

6
module/spring-boot-batch-jdbc/src/main/java/org/springframework/boot/batch/jdbc/autoconfigure/BatchDataSourceScriptDatabaseInitializer.java

@ -20,7 +20,6 @@ import javax.sql.DataSource; @@ -20,7 +20,6 @@ import javax.sql.DataSource;
import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer;
import org.springframework.boot.jdbc.init.PropertiesBasedDataSourceScriptDatabaseInitializer;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
/**
* {@link DataSourceScriptDatabaseInitializer} for the Spring Batch database. May be
@ -45,9 +44,4 @@ public class BatchDataSourceScriptDatabaseInitializer @@ -45,9 +44,4 @@ public class BatchDataSourceScriptDatabaseInitializer
super(dataSource, properties);
}
@Override
protected DatabaseInitializationSettings getSettings() {
return super.getSettings();
}
}

9
module/spring-boot-batch-jdbc/src/test/java/org/springframework/boot/batch/jdbc/autoconfigure/BatchDataSourceScriptDatabaseInitializerTests.java

@ -32,6 +32,7 @@ import org.junit.jupiter.params.provider.EnumSource.Mode; @@ -32,6 +32,7 @@ import org.junit.jupiter.params.provider.EnumSource.Mode;
import org.springframework.boot.jdbc.DatabaseDriver;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
import org.springframework.boot.sql.init.ScriptDatabaseInitializerSettings;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
@ -54,8 +55,8 @@ class BatchDataSourceScriptDatabaseInitializerTests { @@ -54,8 +55,8 @@ class BatchDataSourceScriptDatabaseInitializerTests {
DataSource dataSource = mock(DataSource.class);
BatchJdbcProperties properties = new BatchJdbcProperties();
properties.setPlatform("test");
DatabaseInitializationSettings settings = new BatchDataSourceScriptDatabaseInitializer(dataSource, properties)
.getSettings();
DatabaseInitializationSettings settings = ScriptDatabaseInitializerSettings
.get(new BatchDataSourceScriptDatabaseInitializer(dataSource, properties));
assertThat(settings.getSchemaLocations())
.containsOnly("classpath:org/springframework/batch/core/schema-test.sql");
then(dataSource).shouldHaveNoInteractions();
@ -74,8 +75,8 @@ class BatchDataSourceScriptDatabaseInitializerTests { @@ -74,8 +75,8 @@ class BatchDataSourceScriptDatabaseInitializerTests {
given(connection.getMetaData()).willReturn(metadata);
String productName = (String) ReflectionTestUtils.getField(driver, "productName");
given(metadata.getDatabaseProductName()).willReturn(productName);
DatabaseInitializationSettings settings = new BatchDataSourceScriptDatabaseInitializer(dataSource, properties)
.getSettings();
DatabaseInitializationSettings settings = ScriptDatabaseInitializerSettings
.get(new BatchDataSourceScriptDatabaseInitializer(dataSource, properties));
List<String> schemaLocations = settings.getSchemaLocations();
assertThat(schemaLocations).isNotEmpty()
.allSatisfy((location) -> assertThat(resourceLoader.getResource(location).exists()).isTrue());

1
module/spring-boot-integration/build.gradle

@ -41,6 +41,7 @@ dependencies { @@ -41,6 +41,7 @@ dependencies {
testImplementation(project(":module:spring-boot-flyway"))
testImplementation(project(":module:spring-boot-rsocket"))
testImplementation(project(":test-support:spring-boot-test-support"))
testImplementation(testFixtures(project(":module:spring-boot-sql")))
testImplementation(testFixtures(project(":module:spring-boot-webflux")))
testImplementation(testFixtures(project(":module:spring-boot-webmvc")))
testImplementation("org.springframework:spring-web")

6
module/spring-boot-integration/src/main/java/org/springframework/boot/integration/autoconfigure/IntegrationDataSourceScriptDatabaseInitializer.java

@ -23,7 +23,6 @@ import javax.sql.DataSource; @@ -23,7 +23,6 @@ import javax.sql.DataSource;
import org.springframework.boot.jdbc.DatabaseDriver;
import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer;
import org.springframework.boot.jdbc.init.PropertiesBasedDataSourceScriptDatabaseInitializer;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
/**
* {@link DataSourceScriptDatabaseInitializer} for the Spring Integration database. May be
@ -47,9 +46,4 @@ public class IntegrationDataSourceScriptDatabaseInitializer @@ -47,9 +46,4 @@ public class IntegrationDataSourceScriptDatabaseInitializer
super(dataSource, properties, Map.of(DatabaseDriver.MARIADB, "mysql"));
}
@Override
protected DatabaseInitializationSettings getSettings() {
return super.getSettings();
}
}

6
module/spring-boot-integration/src/test/java/org/springframework/boot/integration/autoconfigure/IntegrationDataSourceScriptDatabaseInitializerTests.java

@ -21,6 +21,7 @@ import javax.sql.DataSource; @@ -21,6 +21,7 @@ import javax.sql.DataSource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
import org.springframework.boot.sql.init.ScriptDatabaseInitializerSettings;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.then;
@ -38,9 +39,8 @@ class IntegrationDataSourceScriptDatabaseInitializerTests { @@ -38,9 +39,8 @@ class IntegrationDataSourceScriptDatabaseInitializerTests {
DataSource dataSource = mock(DataSource.class);
IntegrationJdbcProperties properties = new IntegrationJdbcProperties();
properties.setPlatform("test");
DatabaseInitializationSettings settings = new IntegrationDataSourceScriptDatabaseInitializer(dataSource,
properties)
.getSettings();
DatabaseInitializationSettings settings = ScriptDatabaseInitializerSettings
.get(new IntegrationDataSourceScriptDatabaseInitializer(dataSource, properties));
assertThat(settings.getSchemaLocations())
.containsOnly("classpath:org/springframework/integration/jdbc/schema-test.sql");
then(dataSource).shouldHaveNoInteractions();

1
module/spring-boot-quartz/build.gradle

@ -38,6 +38,7 @@ dependencies { @@ -38,6 +38,7 @@ dependencies {
testImplementation(project(":module:spring-boot-flyway"))
testImplementation(project(":module:spring-boot-liquibase"))
testImplementation(project(":test-support:spring-boot-test-support"))
testImplementation(testFixtures(project(":module:spring-boot-sql")))
testImplementation(testFixtures(project(":module:spring-boot-webflux")))
testImplementation(testFixtures(project(":module:spring-boot-webmvc")))
testImplementation("net.minidev:json-smart")

6
module/spring-boot-quartz/src/main/java/org/springframework/boot/quartz/autoconfigure/QuartzDataSourceScriptDatabaseInitializer.java

@ -26,7 +26,6 @@ import org.jspecify.annotations.Nullable; @@ -26,7 +26,6 @@ import org.jspecify.annotations.Nullable;
import org.springframework.boot.jdbc.DatabaseDriver;
import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer;
import org.springframework.boot.jdbc.init.PropertiesBasedDataSourceScriptDatabaseInitializer;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.util.ObjectUtils;
@ -58,11 +57,6 @@ public class QuartzDataSourceScriptDatabaseInitializer @@ -58,11 +57,6 @@ public class QuartzDataSourceScriptDatabaseInitializer
this.commentPrefixes = properties.getCommentPrefix();
}
@Override
protected DatabaseInitializationSettings getSettings() {
return super.getSettings();
}
@Override
protected void customize(ResourceDatabasePopulator populator) {
if (!ObjectUtils.isEmpty(this.commentPrefixes)) {

5
module/spring-boot-quartz/src/test/java/org/springframework/boot/quartz/autoconfigure/QuartzDataSourceScriptDatabaseInitializerTests.java

@ -23,6 +23,7 @@ import javax.sql.DataSource; @@ -23,6 +23,7 @@ import javax.sql.DataSource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
import org.springframework.boot.sql.init.ScriptDatabaseInitializerSettings;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import static org.assertj.core.api.Assertions.assertThat;
@ -41,8 +42,8 @@ class QuartzDataSourceScriptDatabaseInitializerTests { @@ -41,8 +42,8 @@ class QuartzDataSourceScriptDatabaseInitializerTests {
DataSource dataSource = mock(DataSource.class);
QuartzJdbcProperties properties = new QuartzJdbcProperties();
properties.setPlatform("test");
DatabaseInitializationSettings settings = new QuartzDataSourceScriptDatabaseInitializer(dataSource, properties)
.getSettings();
DatabaseInitializationSettings settings = ScriptDatabaseInitializerSettings
.get(new QuartzDataSourceScriptDatabaseInitializer(dataSource, properties));
assertThat(settings.getSchemaLocations())
.containsOnly("classpath:org/quartz/impl/jdbcjobstore/tables_test.sql");
then(dataSource).shouldHaveNoInteractions();

1
module/spring-boot-session-jdbc/build.gradle

@ -39,6 +39,7 @@ dependencies { @@ -39,6 +39,7 @@ dependencies {
testImplementation(project(":module:spring-boot-flyway"))
testImplementation(project(":module:spring-boot-liquibase"))
testImplementation(testFixtures(project(":module:spring-boot-session")))
testImplementation(testFixtures(project(":module:spring-boot-sql")))
testImplementation("jakarta.servlet:jakarta.servlet-api")
testImplementation("org.apache.commons:commons-dbcp2")
testImplementation("org.springframework:spring-web")

6
module/spring-boot-session-jdbc/src/main/java/org/springframework/boot/session/jdbc/autoconfigure/JdbcSessionDataSourceScriptDatabaseInitializer.java

@ -23,7 +23,6 @@ import javax.sql.DataSource; @@ -23,7 +23,6 @@ import javax.sql.DataSource;
import org.springframework.boot.jdbc.DatabaseDriver;
import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer;
import org.springframework.boot.jdbc.init.PropertiesBasedDataSourceScriptDatabaseInitializer;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
/**
* {@link DataSourceScriptDatabaseInitializer} for the Spring Session JDBC database. May
@ -49,9 +48,4 @@ public class JdbcSessionDataSourceScriptDatabaseInitializer @@ -49,9 +48,4 @@ public class JdbcSessionDataSourceScriptDatabaseInitializer
super(dataSource, properties, Map.of(DatabaseDriver.MARIADB, "mysql"));
}
@Override
protected DatabaseInitializationSettings getSettings() {
return super.getSettings();
}
}

6
module/spring-boot-session-jdbc/src/test/java/org/springframework/boot/session/jdbc/autoconfigure/JdbcSessionDataSourceScriptDatabaseInitializerTests.java

@ -21,6 +21,7 @@ import javax.sql.DataSource; @@ -21,6 +21,7 @@ import javax.sql.DataSource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
import org.springframework.boot.sql.init.ScriptDatabaseInitializerSettings;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.then;
@ -38,9 +39,8 @@ class JdbcSessionDataSourceScriptDatabaseInitializerTests { @@ -38,9 +39,8 @@ class JdbcSessionDataSourceScriptDatabaseInitializerTests {
DataSource dataSource = mock(DataSource.class);
JdbcSessionProperties properties = new JdbcSessionProperties();
properties.setPlatform("test");
DatabaseInitializationSettings settings = new JdbcSessionDataSourceScriptDatabaseInitializer(dataSource,
properties)
.getSettings();
DatabaseInitializationSettings settings = ScriptDatabaseInitializerSettings
.get(new JdbcSessionDataSourceScriptDatabaseInitializer(dataSource, properties));
assertThat(settings.getSchemaLocations())
.containsOnly("classpath:org/springframework/session/jdbc/schema-test.sql");
then(dataSource).shouldHaveNoInteractions();

3
module/spring-boot-sql/src/main/java/org/springframework/boot/sql/init/AbstractScriptDatabaseInitializer.java

@ -62,9 +62,8 @@ public abstract class AbstractScriptDatabaseInitializer implements ResourceLoade @@ -62,9 +62,8 @@ public abstract class AbstractScriptDatabaseInitializer implements ResourceLoade
/**
* Return the {@link DatabaseInitializationSettings} being used by the initializer.
* @return the settings being used
* @since 4.0.0
*/
protected DatabaseInitializationSettings getSettings() {
DatabaseInitializationSettings getSettings() {
return this.settings;
}

33
module/spring-boot-sql/src/testFixtures/java/org/springframework/boot/sql/init/ScriptDatabaseInitializerSettings.java

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
/*
* Copyright 2012-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.sql.init;
/**
* Helper to get the settings used by the {@link AbstractScriptDatabaseInitializer}.
*
* @author Phillip Webb
*/
public final class ScriptDatabaseInitializerSettings {
private ScriptDatabaseInitializerSettings() {
}
public static DatabaseInitializationSettings get(AbstractScriptDatabaseInitializer initializer) {
return initializer.getSettings();
}
}
Loading…
Cancel
Save