Skip to content

Commit 653fdbd

Browse files
committed
Configure comment prefixes
Closes gh-29095
1 parent 53654a0 commit 653fdbd

File tree

4 files changed

+64
-1
lines changed

4 files changed

+64
-1
lines changed

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer;
2525
import org.springframework.boot.jdbc.init.PlatformPlaceholderDatabaseDriverResolver;
2626
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
27+
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
28+
import org.springframework.util.ObjectUtils;
2729
import org.springframework.util.StringUtils;
2830

2931
/**
@@ -37,14 +39,16 @@
3739
*/
3840
public class QuartzDataSourceScriptDatabaseInitializer extends DataSourceScriptDatabaseInitializer {
3941

42+
private final List<String> commentPrefixes;
43+
4044
/**
4145
* Create a new {@link QuartzDataSourceScriptDatabaseInitializer} instance.
4246
* @param dataSource the Quartz Scheduler data source
4347
* @param properties the Quartz properties
4448
* @see #getSettings
4549
*/
4650
public QuartzDataSourceScriptDatabaseInitializer(DataSource dataSource, QuartzProperties properties) {
47-
this(dataSource, getSettings(dataSource, properties));
51+
this(dataSource, getSettings(dataSource, properties), properties.getJdbc().getCommentPrefix());
4852
}
4953

5054
/**
@@ -54,7 +58,20 @@ public QuartzDataSourceScriptDatabaseInitializer(DataSource dataSource, QuartzPr
5458
* @see #getSettings
5559
*/
5660
public QuartzDataSourceScriptDatabaseInitializer(DataSource dataSource, DatabaseInitializationSettings settings) {
61+
this(dataSource, settings, null);
62+
}
63+
64+
private QuartzDataSourceScriptDatabaseInitializer(DataSource dataSource, DatabaseInitializationSettings settings,
65+
List<String> commentPrefixes) {
5766
super(dataSource, settings);
67+
this.commentPrefixes = commentPrefixes;
68+
}
69+
70+
@Override
71+
protected void customize(ResourceDatabasePopulator populator) {
72+
if (!ObjectUtils.isEmpty(this.commentPrefixes)) {
73+
populator.setCommentPrefixes(this.commentPrefixes.toArray(new String[0]));
74+
}
5875
}
5976

6077
/**

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,18 @@
1616

1717
package org.springframework.boot.autoconfigure.quartz;
1818

19+
import java.util.Arrays;
20+
1921
import javax.sql.DataSource;
2022

2123
import org.junit.jupiter.api.Test;
2224

2325
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
26+
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
2427

2528
import static org.assertj.core.api.Assertions.assertThat;
2629
import static org.mockito.Mockito.mock;
30+
import static org.mockito.Mockito.verify;
2731
import static org.mockito.Mockito.verifyNoInteractions;
2832

2933
/**
@@ -45,4 +49,16 @@ void getSettingsWithPlatformDoesNotTouchDataSource() {
4549
verifyNoInteractions(dataSource);
4650
}
4751

52+
@Test
53+
void customizeSetCommentPrefixes() {
54+
QuartzProperties properties = new QuartzProperties();
55+
properties.getJdbc().setPlatform("test");
56+
properties.getJdbc().setCommentPrefix(Arrays.asList("##", "--"));
57+
QuartzDataSourceScriptDatabaseInitializer initializer = new QuartzDataSourceScriptDatabaseInitializer(
58+
mock(DataSource.class), properties);
59+
ResourceDatabasePopulator populator = mock(ResourceDatabasePopulator.class);
60+
initializer.customize(populator);
61+
verify(populator).setCommentPrefixes("##", "--");
62+
}
63+
4864
}

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializer.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,17 @@ protected void runScripts(List<Resource> resources, boolean continueOnError, Str
8686
for (Resource resource : resources) {
8787
populator.addScript(resource);
8888
}
89+
customize(populator);
8990
DatabasePopulatorUtils.execute(populator, this.dataSource);
9091
}
9192

93+
/**
94+
* Customize the {@link ResourceDatabasePopulator}.
95+
* @param populator the configured database populator
96+
* @since 2.6.2
97+
*/
98+
protected void customize(ResourceDatabasePopulator populator) {
99+
100+
}
101+
92102
}

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.jdbc.init;
1818

19+
import java.util.Collections;
1920
import java.util.UUID;
2021

2122
import javax.sql.DataSource;
@@ -29,8 +30,11 @@
2930
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
3031
import org.springframework.boot.testsupport.BuildOutput;
3132
import org.springframework.jdbc.core.JdbcTemplate;
33+
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
34+
import org.springframework.jdbc.datasource.init.ScriptStatementFailedException;
3235

3336
import static org.assertj.core.api.Assertions.assertThat;
37+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
3438

3539
/**
3640
* Tests for {@link DataSourceScriptDatabaseInitializer}.
@@ -61,6 +65,22 @@ void whenDatabaseIsInaccessibleThenItIsAssumedNotToBeEmbedded() {
6165
assertThat(initializer.isEmbeddedDatabase()).isFalse();
6266
}
6367

68+
@Test
69+
void whenCustomizeIsOverriddenThenDatabasePopulatorIsConfiguredAccordingly() {
70+
DatabaseInitializationSettings settings = new DatabaseInitializationSettings();
71+
settings.setContinueOnError(true);
72+
settings.setDataLocations(Collections.singletonList("data.sql"));
73+
DataSourceScriptDatabaseInitializer initializer = new DataSourceScriptDatabaseInitializer(
74+
this.embeddedDataSource, settings) {
75+
@Override
76+
protected void customize(ResourceDatabasePopulator populator) {
77+
assertThat(populator).hasFieldOrPropertyWithValue("continueOnError", true);
78+
populator.setContinueOnError(false);
79+
}
80+
};
81+
assertThatThrownBy(initializer::initializeDatabase).isInstanceOf(ScriptStatementFailedException.class);
82+
}
83+
6484
@Override
6585
protected DataSourceScriptDatabaseInitializer createEmbeddedDatabaseInitializer(
6686
DatabaseInitializationSettings settings) {

0 commit comments

Comments
 (0)