Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 014561b

Browse files
committed
Introduce a shared abstraction for database initialization
Currently used by Spring Batch, Spring Integration, Spring Session and Quartz. Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
1 parent c98ffeb commit 014561b

File tree

10 files changed

+250
-355
lines changed

10 files changed

+250
-355
lines changed

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

Lines changed: 5 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,10 @@
1616

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

19-
import java.util.List;
20-
2119
import javax.sql.DataSource;
2220

2321
import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer;
24-
import org.springframework.boot.jdbc.init.PlatformPlaceholderDatabaseDriverResolver;
25-
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
26-
import org.springframework.util.StringUtils;
22+
import org.springframework.boot.jdbc.init.PropertiesBasedDataSourceScriptDatabaseInitializer;
2723

2824
/**
2925
* {@link DataSourceScriptDatabaseInitializer} for the Spring Batch database. May be
@@ -33,54 +29,19 @@
3329
* @author Vedran Pavic
3430
* @author Andy Wilkinson
3531
* @author Phillip Webb
32+
* @author Yanming Zhou
3633
* @since 4.0.0
3734
*/
38-
public class BatchDataSourceScriptDatabaseInitializer extends DataSourceScriptDatabaseInitializer {
35+
public class BatchDataSourceScriptDatabaseInitializer
36+
extends PropertiesBasedDataSourceScriptDatabaseInitializer<BatchProperties.Jdbc> {
3937

4038
/**
4139
* Create a new {@link BatchDataSourceScriptDatabaseInitializer} instance.
4240
* @param dataSource the Spring Batch data source
4341
* @param properties the Spring Batch JDBC properties
44-
* @see #getSettings
4542
*/
4643
public BatchDataSourceScriptDatabaseInitializer(DataSource dataSource, BatchProperties.Jdbc properties) {
47-
this(dataSource, getSettings(dataSource, properties));
48-
}
49-
50-
/**
51-
* Create a new {@link BatchDataSourceScriptDatabaseInitializer} instance.
52-
* @param dataSource the Spring Batch data source
53-
* @param settings the database initialization settings
54-
* @see #getSettings
55-
*/
56-
public BatchDataSourceScriptDatabaseInitializer(DataSource dataSource, DatabaseInitializationSettings settings) {
57-
super(dataSource, settings);
58-
}
59-
60-
/**
61-
* Adapts {@link BatchProperties.Jdbc Spring Batch JDBC properties} to
62-
* {@link DatabaseInitializationSettings} replacing any {@literal @@platform@@}
63-
* placeholders.
64-
* @param dataSource the Spring Batch data source
65-
* @param properties batch JDBC properties
66-
* @return a new {@link DatabaseInitializationSettings} instance
67-
* @see #BatchDataSourceScriptDatabaseInitializer(DataSource,
68-
* DatabaseInitializationSettings)
69-
*/
70-
public static DatabaseInitializationSettings getSettings(DataSource dataSource, BatchProperties.Jdbc properties) {
71-
DatabaseInitializationSettings settings = new DatabaseInitializationSettings();
72-
settings.setSchemaLocations(resolveSchemaLocations(dataSource, properties));
73-
settings.setMode(properties.getInitializeSchema());
74-
settings.setContinueOnError(true);
75-
return settings;
76-
}
77-
78-
private static List<String> resolveSchemaLocations(DataSource dataSource, BatchProperties.Jdbc properties) {
79-
PlatformPlaceholderDatabaseDriverResolver platformResolver = new PlatformPlaceholderDatabaseDriverResolver();
80-
if (StringUtils.hasText(properties.getPlatform())) {
81-
return platformResolver.resolveAll(properties.getPlatform(), properties.getSchema());
82-
}
83-
return platformResolver.resolveAll(dataSource, properties.getSchema());
44+
super(dataSource, properties);
8445
}
8546

8647
}

‎module/spring-boot-batch/src/main/java/org/springframework/boot/batch/autoconfigure/BatchProperties.java

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import org.jspecify.annotations.Nullable;
2020

2121
import org.springframework.boot.context.properties.ConfigurationProperties;
22-
import org.springframework.boot.sql.init.DatabaseInitializationMode;
22+
import org.springframework.boot.jdbc.init.DatabaseInitializationProperties;
2323
import org.springframework.transaction.annotation.Isolation;
2424

2525
/**
@@ -65,7 +65,7 @@ public void setName(String name) {
6565

6666
}
6767

68-
public static class Jdbc {
68+
public static class Jdbc extendsDatabaseInitializationProperties{
6969

7070
private static final String DEFAULT_SCHEMA_LOCATION = "classpath:org/springframework/"
7171
+ "batch/core/schema-@@platform@@.sql";
@@ -80,27 +80,11 @@ public static class Jdbc {
8080
*/
8181
private @Nullable Isolation isolationLevelForCreate;
8282

83-
/**
84-
* Path to the SQL file to use to initialize the database schema.
85-
*/
86-
private String schema = DEFAULT_SCHEMA_LOCATION;
87-
88-
/**
89-
* Platform to use in initialization scripts if the @@platform@@ placeholder is
90-
* used. Auto-detected by default.
91-
*/
92-
private @Nullable String platform;
93-
9483
/**
9584
* Table prefix for all the batch meta-data tables.
9685
*/
9786
private @Nullable String tablePrefix;
9887

99-
/**
100-
* Database schema initialization mode.
101-
*/
102-
private DatabaseInitializationMode initializeSchema = DatabaseInitializationMode.EMBEDDED;
103-
10488
public boolean isValidateTransactionState() {
10589
return this.validateTransactionState;
10690
}
@@ -117,36 +101,17 @@ public void setIsolationLevelForCreate(@Nullable Isolation isolationLevelForCrea
117101
this.isolationLevelForCreate = isolationLevelForCreate;
118102
}
119103

120-
public String getSchema() {
121-
return this.schema;
122-
}
123-
124-
public void setSchema(String schema) {
125-
this.schema = schema;
126-
}
127-
128-
public @Nullable String getPlatform() {
129-
return this.platform;
130-
}
131-
132-
public void setPlatform(@Nullable String platform) {
133-
this.platform = platform;
134-
}
135-
136-
public @Nullable String getTablePrefix() {
104+
public String getTablePrefix() {
137105
return this.tablePrefix;
138106
}
139107

140108
public void setTablePrefix(@Nullable String tablePrefix) {
141109
this.tablePrefix = tablePrefix;
142110
}
143111

144-
public DatabaseInitializationMode getInitializeSchema() {
145-
return this.initializeSchema;
146-
}
147-
148-
public void setInitializeSchema(DatabaseInitializationMode initializeSchema) {
149-
this.initializeSchema = initializeSchema;
112+
@Override
113+
public String getDefaultSchemaLocation() {
114+
return DEFAULT_SCHEMA_LOCATION;
150115
}
151116

152117
}

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

Lines changed: 6 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,25 @@
1616

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

19-
import java.util.List;
19+
import java.util.Map;
2020

2121
import javax.sql.DataSource;
2222

2323
import org.springframework.boot.jdbc.DatabaseDriver;
2424
import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer;
25-
import org.springframework.boot.jdbc.init.PlatformPlaceholderDatabaseDriverResolver;
26-
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
27-
import org.springframework.util.StringUtils;
25+
import org.springframework.boot.jdbc.init.PropertiesBasedDataSourceScriptDatabaseInitializer;
2826

2927
/**
3028
* {@link DataSourceScriptDatabaseInitializer} for the Spring Integration database. May be
3129
* registered as a bean to override auto-configuration.
3230
*
3331
* @author Vedran Pavic
3432
* @author Andy Wilkinson
33+
* @author Yanming Zhou
3534
* @since 4.0.0
3635
*/
37-
public class IntegrationDataSourceScriptDatabaseInitializer extends DataSourceScriptDatabaseInitializer {
36+
public class IntegrationDataSourceScriptDatabaseInitializer
37+
extends PropertiesBasedDataSourceScriptDatabaseInitializer<IntegrationJdbcProperties> {
3838

3939
/**
4040
* Create a new {@link IntegrationDataSourceScriptDatabaseInitializer} instance.
@@ -43,45 +43,7 @@ public class IntegrationDataSourceScriptDatabaseInitializer extends DataSourceSc
4343
* @see #getSettings
4444
*/
4545
public IntegrationDataSourceScriptDatabaseInitializer(DataSource dataSource, IntegrationJdbcProperties properties) {
46-
this(dataSource, getSettings(dataSource, properties));
47-
}
48-
49-
/**
50-
* Create a new {@link IntegrationDataSourceScriptDatabaseInitializer} instance.
51-
* @param dataSource the Spring Integration data source
52-
* @param settings the database initialization settings
53-
* @see #getSettings
54-
*/
55-
public IntegrationDataSourceScriptDatabaseInitializer(DataSource dataSource,
56-
DatabaseInitializationSettings settings) {
57-
super(dataSource, settings);
58-
}
59-
60-
/**
61-
* Adapts {@link IntegrationJdbcProperties Spring Integration JDBC properties} to
62-
* {@link DatabaseInitializationSettings} replacing any {@literal @@platform@@}
63-
* placeholders.
64-
* @param dataSource the Spring Integration data source
65-
* @param properties the Spring Integration JDBC properties
66-
* @return a new {@link DatabaseInitializationSettings} instance
67-
* @see #IntegrationDataSourceScriptDatabaseInitializer(DataSource,
68-
* DatabaseInitializationSettings)
69-
*/
70-
static DatabaseInitializationSettings getSettings(DataSource dataSource, IntegrationJdbcProperties properties) {
71-
DatabaseInitializationSettings settings = new DatabaseInitializationSettings();
72-
settings.setSchemaLocations(resolveSchemaLocations(dataSource, properties));
73-
settings.setMode(properties.getInitializeSchema());
74-
settings.setContinueOnError(true);
75-
return settings;
76-
}
77-
78-
private static List<String> resolveSchemaLocations(DataSource dataSource, IntegrationJdbcProperties properties) {
79-
PlatformPlaceholderDatabaseDriverResolver platformResolver = new PlatformPlaceholderDatabaseDriverResolver();
80-
platformResolver = platformResolver.withDriverPlatform(DatabaseDriver.MARIADB, "mysql");
81-
if (StringUtils.hasText(properties.getPlatform())) {
82-
return platformResolver.resolveAll(properties.getPlatform(), properties.getSchema());
83-
}
84-
return platformResolver.resolveAll(dataSource, properties.getSchema());
46+
super(dataSource, properties, Map.of(DatabaseDriver.MARIADB, "mysql"));
8547
}
8648

8749
}

‎module/spring-boot-integration/src/main/java/org/springframework/boot/integration/autoconfigure/IntegrationJdbcProperties.java

Lines changed: 6 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -16,63 +16,27 @@
1616

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

19-
import org.jspecify.annotations.Nullable;
20-
2119
import org.springframework.boot.context.properties.ConfigurationProperties;
22-
import org.springframework.boot.sql.init.DatabaseInitializationMode;
20+
import org.springframework.boot.jdbc.init.DatabaseInitializationProperties;
2321

2422
/**
2523
* Configuration properties for Spring Integration JDBC.
2624
*
2725
* @author Vedran Pavic
2826
* @author Stephane Nicoll
2927
* @author Artem Bilan
28+
* @author Yanming Zhou
3029
* @since 4.0.0
3130
*/
3231
@ConfigurationProperties("spring.integration.jdbc")
33-
public class IntegrationJdbcProperties {
32+
public class IntegrationJdbcProperties extendsDatabaseInitializationProperties{
3433

3534
private static final String DEFAULT_SCHEMA_LOCATION = "classpath:org/springframework/"
3635
+ "integration/jdbc/schema-@@platform@@.sql";
3736

38-
/**
39-
* Path to the SQL file to use to initialize the database schema.
40-
*/
41-
private String schema = DEFAULT_SCHEMA_LOCATION;
42-
43-
/**
44-
* Platform to use in initialization scripts if the @@platform@@ placeholder is used.
45-
* Auto-detected by default.
46-
*/
47-
private @Nullable String platform;
48-
49-
/**
50-
* Database schema initialization mode.
51-
*/
52-
private DatabaseInitializationMode initializeSchema = DatabaseInitializationMode.EMBEDDED;
53-
54-
public String getSchema() {
55-
return this.schema;
56-
}
57-
58-
public void setSchema(String schema) {
59-
this.schema = schema;
60-
}
61-
62-
public @Nullable String getPlatform() {
63-
return this.platform;
64-
}
65-
66-
public void setPlatform(@Nullable String platform) {
67-
this.platform = platform;
68-
}
69-
70-
public DatabaseInitializationMode getInitializeSchema() {
71-
return this.initializeSchema;
72-
}
73-
74-
public void setInitializeSchema(DatabaseInitializationMode initializeSchema) {
75-
this.initializeSchema = initializeSchema;
37+
@Override
38+
public String getDefaultSchemaLocation() {
39+
return DEFAULT_SCHEMA_LOCATION;
7640
}
7741

7842
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/*
2+
* Copyright 2012-present the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.jdbc.init;
18+
19+
import org.jspecify.annotations.Nullable;
20+
21+
import org.springframework.boot.context.properties.ConfigurationPropertiesSource;
22+
import org.springframework.boot.sql.init.DatabaseInitializationMode;
23+
24+
/**
25+
* Base configuration properties class for performing SQL database initialization.
26+
*
27+
* @author Yanming Zhou
28+
* @since 4.0.0
29+
*/
30+
@ConfigurationPropertiesSource
31+
public abstract class DatabaseInitializationProperties {
32+
33+
/**
34+
* Path to the SQL file to use to initialize the database schema.
35+
*/
36+
private String schema = getDefaultSchemaLocation();
37+
38+
/**
39+
* Platform to use in initialization scripts if the @@platform@@ placeholder is used.
40+
* Auto-detected by default.
41+
*/
42+
private @Nullable String platform;
43+
44+
/**
45+
* Database schema initialization mode.
46+
*/
47+
private DatabaseInitializationMode initializeSchema = DatabaseInitializationMode.EMBEDDED;
48+
49+
/**
50+
* Whether initialization should continue when an error occurs when applying a schema
51+
* script.
52+
*/
53+
private boolean continueOnError = true;
54+
55+
public String getSchema() {
56+
return this.schema;
57+
}
58+
59+
public void setSchema(String schema) {
60+
this.schema = schema;
61+
}
62+
63+
public @Nullable String getPlatform() {
64+
return this.platform;
65+
}
66+
67+
public void setPlatform(String platform) {
68+
this.platform = platform;
69+
}
70+
71+
public DatabaseInitializationMode getInitializeSchema() {
72+
return this.initializeSchema;
73+
}
74+
75+
public void setInitializeSchema(DatabaseInitializationMode initializeSchema) {
76+
this.initializeSchema = initializeSchema;
77+
}
78+
79+
public boolean isContinueOnError() {
80+
return this.continueOnError;
81+
}
82+
83+
public void setContinueOnError(boolean continueOnError) {
84+
this.continueOnError = continueOnError;
85+
}
86+
87+
public abstract String getDefaultSchemaLocation();
88+
89+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /