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 d5ddab5

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 ce9ffd1 commit d5ddab5

File tree

10 files changed

+248
-349
lines changed

10 files changed

+248
-349
lines changed

‎spring-boot-project/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
}

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

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package org.springframework.boot.batch.autoconfigure;
1818

1919
import org.springframework.boot.context.properties.ConfigurationProperties;
20-
import org.springframework.boot.sql.init.DatabaseInitializationMode;
20+
import org.springframework.boot.jdbc.init.DatabaseInitializationProperties;
2121
import org.springframework.transaction.annotation.Isolation;
2222

2323
/**
@@ -63,7 +63,7 @@ public void setName(String name) {
6363

6464
}
6565

66-
public static class Jdbc {
66+
public static class Jdbc extendsDatabaseInitializationProperties{
6767

6868
private static final String DEFAULT_SCHEMA_LOCATION = "classpath:org/springframework/"
6969
+ "batch/core/schema-@@platform@@.sql";
@@ -78,27 +78,11 @@ public static class Jdbc {
7878
*/
7979
private Isolation isolationLevelForCreate;
8080

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

97-
/**
98-
* Database schema initialization mode.
99-
*/
100-
private DatabaseInitializationMode initializeSchema = DatabaseInitializationMode.EMBEDDED;
101-
10286
public boolean isValidateTransactionState() {
10387
return this.validateTransactionState;
10488
}
@@ -115,22 +99,6 @@ public void setIsolationLevelForCreate(Isolation isolationLevelForCreate) {
11599
this.isolationLevelForCreate = isolationLevelForCreate;
116100
}
117101

118-
public String getSchema() {
119-
return this.schema;
120-
}
121-
122-
public void setSchema(String schema) {
123-
this.schema = schema;
124-
}
125-
126-
public String getPlatform() {
127-
return this.platform;
128-
}
129-
130-
public void setPlatform(String platform) {
131-
this.platform = platform;
132-
}
133-
134102
public String getTablePrefix() {
135103
return this.tablePrefix;
136104
}
@@ -139,12 +107,9 @@ public void setTablePrefix(String tablePrefix) {
139107
this.tablePrefix = tablePrefix;
140108
}
141109

142-
public DatabaseInitializationMode getInitializeSchema() {
143-
return this.initializeSchema;
144-
}
145-
146-
public void setInitializeSchema(DatabaseInitializationMode initializeSchema) {
147-
this.initializeSchema = initializeSchema;
110+
@Override
111+
public String getDefaultSchemaLocation() {
112+
return DEFAULT_SCHEMA_LOCATION;
148113
}
149114

150115
}

‎spring-boot-project/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
}

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

Lines changed: 6 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,60 +17,26 @@
1717
package org.springframework.boot.integration.autoconfigure;
1818

1919
import org.springframework.boot.context.properties.ConfigurationProperties;
20-
import org.springframework.boot.sql.init.DatabaseInitializationMode;
20+
import org.springframework.boot.jdbc.init.DatabaseInitializationProperties;
2121

2222
/**
2323
* Configuration properties for Spring Integration JDBC.
2424
*
2525
* @author Vedran Pavic
2626
* @author Stephane Nicoll
2727
* @author Artem Bilan
28+
* @author Yanming Zhou
2829
* @since 4.0.0
2930
*/
3031
@ConfigurationProperties("spring.integration.jdbc")
31-
public class IntegrationJdbcProperties {
32+
public class IntegrationJdbcProperties extendsDatabaseInitializationProperties{
3233

3334
private static final String DEFAULT_SCHEMA_LOCATION = "classpath:org/springframework/"
3435
+ "integration/jdbc/schema-@@platform@@.sql";
3536

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

7642
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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.springframework.boot.context.properties.ConfigurationPropertiesSource;
20+
import org.springframework.boot.sql.init.DatabaseInitializationMode;
21+
22+
/**
23+
* Base configuration properties class for performing SQL database initialization.
24+
*
25+
* @author Yanming Zhou
26+
* @since 4.0.0
27+
*/
28+
@ConfigurationPropertiesSource
29+
public abstract class DatabaseInitializationProperties {
30+
31+
/**
32+
* Path to the SQL file to use to initialize the database schema.
33+
*/
34+
private String schema = getDefaultSchemaLocation();
35+
36+
/**
37+
* Platform to use in initialization scripts if the @@platform@@ placeholder is used.
38+
* Auto-detected by default.
39+
*/
40+
private String platform;
41+
42+
/**
43+
* Database schema initialization mode.
44+
*/
45+
private DatabaseInitializationMode initializeSchema = DatabaseInitializationMode.EMBEDDED;
46+
47+
/**
48+
* Whether initialization should continue when an error occurs when applying a schema
49+
* script.
50+
*/
51+
private boolean continueOnError = true;
52+
53+
public String getSchema() {
54+
return this.schema;
55+
}
56+
57+
public void setSchema(String schema) {
58+
this.schema = schema;
59+
}
60+
61+
public String getPlatform() {
62+
return this.platform;
63+
}
64+
65+
public void setPlatform(String platform) {
66+
this.platform = platform;
67+
}
68+
69+
public DatabaseInitializationMode getInitializeSchema() {
70+
return this.initializeSchema;
71+
}
72+
73+
public void setInitializeSchema(DatabaseInitializationMode initializeSchema) {
74+
this.initializeSchema = initializeSchema;
75+
}
76+
77+
public boolean isContinueOnError() {
78+
return this.continueOnError;
79+
}
80+
81+
public void setContinueOnError(boolean continueOnError) {
82+
this.continueOnError = continueOnError;
83+
}
84+
85+
public abstract String getDefaultSchemaLocation();
86+
87+
}

0 commit comments

Comments
(0)

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