Harmonize database initializers
This commit updates database initializers configuration to enable them automatically only when an embedded `DataSource` is used. Related configuration properties have been updated to use a more expressive `DatabaseInitializerMode` enum rather than `Boolean` flag. See gh-9752
This commit is contained in:
		
							parent
							
								
									29078c78f2
								
							
						
					
					
						commit
						14b7be8325
					
				| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright 2012-2016 the original author or authors.
 | 
					 * Copyright 2012-2017 the original author or authors.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 * you may not use this file except in compliance with the License.
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure;
 | 
				
			||||||
import javax.annotation.PostConstruct;
 | 
					import javax.annotation.PostConstruct;
 | 
				
			||||||
import javax.sql.DataSource;
 | 
					import javax.sql.DataSource;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.jdbc.EmbeddedDatabaseConnection;
 | 
				
			||||||
import org.springframework.boot.jdbc.DatabaseDriver;
 | 
					import org.springframework.boot.jdbc.DatabaseDriver;
 | 
				
			||||||
import org.springframework.core.io.ResourceLoader;
 | 
					import org.springframework.core.io.ResourceLoader;
 | 
				
			||||||
import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils;
 | 
					import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils;
 | 
				
			||||||
| 
						 | 
					@ -52,7 +53,8 @@ public abstract class AbstractDatabaseInitializer {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@PostConstruct
 | 
						@PostConstruct
 | 
				
			||||||
	protected void initialize() {
 | 
						protected void initialize() {
 | 
				
			||||||
		if (!isEnabled()) {
 | 
							if ((getMode() == DatabaseInitializerMode.EMBEDDED && !isEmbeddedDataSource())
 | 
				
			||||||
 | 
									|| getMode() == DatabaseInitializerMode.NEVER) {
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
 | 
							ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
 | 
				
			||||||
| 
						 | 
					@ -66,7 +68,7 @@ public abstract class AbstractDatabaseInitializer {
 | 
				
			||||||
		DatabasePopulatorUtils.execute(populator, this.dataSource);
 | 
							DatabasePopulatorUtils.execute(populator, this.dataSource);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	protected abstract boolean isEnabled();
 | 
						protected abstract DatabaseInitializerMode getMode();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	protected abstract String getSchemaLocation();
 | 
						protected abstract String getSchemaLocation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -86,4 +88,8 @@ public abstract class AbstractDatabaseInitializer {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private boolean isEmbeddedDataSource() {
 | 
				
			||||||
 | 
							return EmbeddedDatabaseConnection.isEmbedded(this.dataSource);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,42 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright 2012-2017 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
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *      http://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.autoconfigure;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Supported {@link AbstractDatabaseInitializer database initializer} modes.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Vedran Pavic
 | 
				
			||||||
 | 
					 * @since 2.0.0
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public enum DatabaseInitializerMode {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Always enabled.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						ALWAYS,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Enabled when using an embedded database.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						EMBEDDED,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Never enabled.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						NEVER
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright 2012-2016 the original author or authors.
 | 
					 * Copyright 2012-2017 the original author or authors.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 * you may not use this file except in compliance with the License.
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.batch;
 | 
				
			||||||
import javax.sql.DataSource;
 | 
					import javax.sql.DataSource;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.springframework.boot.autoconfigure.AbstractDatabaseInitializer;
 | 
					import org.springframework.boot.autoconfigure.AbstractDatabaseInitializer;
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.DatabaseInitializerMode;
 | 
				
			||||||
import org.springframework.core.io.ResourceLoader;
 | 
					import org.springframework.core.io.ResourceLoader;
 | 
				
			||||||
import org.springframework.util.Assert;
 | 
					import org.springframework.util.Assert;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,8 +41,8 @@ public class BatchDatabaseInitializer extends AbstractDatabaseInitializer {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	protected boolean isEnabled() {
 | 
						protected DatabaseInitializerMode getMode() {
 | 
				
			||||||
		return this.properties.getInitializer().isEnabled();
 | 
							return this.properties.getInitializeSchema();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package org.springframework.boot.autoconfigure.batch;
 | 
					package org.springframework.boot.autoconfigure.batch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.DatabaseInitializerMode;
 | 
				
			||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
					import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -42,7 +43,10 @@ public class BatchProperties {
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	private String tablePrefix;
 | 
						private String tablePrefix;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private final Initializer initializer = new Initializer();
 | 
						/**
 | 
				
			||||||
 | 
						 * Spring Batch database schema initialization mode.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private DatabaseInitializerMode initializeSchema = DatabaseInitializerMode.EMBEDDED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private final Job job = new Job();
 | 
						private final Job job = new Job();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,38 +66,18 @@ public class BatchProperties {
 | 
				
			||||||
		this.tablePrefix = tablePrefix;
 | 
							this.tablePrefix = tablePrefix;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public Initializer getInitializer() {
 | 
						public DatabaseInitializerMode getInitializeSchema() {
 | 
				
			||||||
		return this.initializer;
 | 
							return this.initializeSchema;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public void setInitializeSchema(DatabaseInitializerMode initializeSchema) {
 | 
				
			||||||
 | 
							this.initializeSchema = initializeSchema;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public Job getJob() {
 | 
						public Job getJob() {
 | 
				
			||||||
		return this.job;
 | 
							return this.job;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public class Initializer {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		/**
 | 
					 | 
				
			||||||
		 * Create the required batch tables on startup if necessary. Enabled automatically
 | 
					 | 
				
			||||||
		 * if no custom table prefix is set or if a custom schema is configured.
 | 
					 | 
				
			||||||
		 */
 | 
					 | 
				
			||||||
		private Boolean enabled;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		public boolean isEnabled() {
 | 
					 | 
				
			||||||
			if (this.enabled != null) {
 | 
					 | 
				
			||||||
				return this.enabled;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			boolean defaultTablePrefix = BatchProperties.this.getTablePrefix() == null;
 | 
					 | 
				
			||||||
			boolean customSchema = !DEFAULT_SCHEMA_LOCATION
 | 
					 | 
				
			||||||
					.equals(BatchProperties.this.getSchema());
 | 
					 | 
				
			||||||
			return (defaultTablePrefix || customSchema);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		public void setEnabled(boolean enabled) {
 | 
					 | 
				
			||||||
			this.enabled = enabled;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public static class Job {
 | 
						public static class Job {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/**
 | 
							/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -147,7 +147,6 @@ public class IntegrationAutoConfiguration {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		@Bean
 | 
							@Bean
 | 
				
			||||||
		@ConditionalOnMissingBean
 | 
							@ConditionalOnMissingBean
 | 
				
			||||||
		@ConditionalOnProperty(prefix = "spring.integration.jdbc.initializer", name = "enabled")
 | 
					 | 
				
			||||||
		public IntegrationDatabaseInitializer integrationDatabaseInitializer(
 | 
							public IntegrationDatabaseInitializer integrationDatabaseInitializer(
 | 
				
			||||||
				DataSource dataSource, ResourceLoader resourceLoader,
 | 
									DataSource dataSource, ResourceLoader resourceLoader,
 | 
				
			||||||
				IntegrationProperties properties) {
 | 
									IntegrationProperties properties) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.integration;
 | 
				
			||||||
import javax.sql.DataSource;
 | 
					import javax.sql.DataSource;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.springframework.boot.autoconfigure.AbstractDatabaseInitializer;
 | 
					import org.springframework.boot.autoconfigure.AbstractDatabaseInitializer;
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.DatabaseInitializerMode;
 | 
				
			||||||
import org.springframework.core.io.ResourceLoader;
 | 
					import org.springframework.core.io.ResourceLoader;
 | 
				
			||||||
import org.springframework.util.Assert;
 | 
					import org.springframework.util.Assert;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,8 +41,8 @@ public class IntegrationDatabaseInitializer extends AbstractDatabaseInitializer
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	protected boolean isEnabled() {
 | 
						protected DatabaseInitializerMode getMode() {
 | 
				
			||||||
		return this.properties.getInitializer().isEnabled();
 | 
							return this.properties.getInitializeSchema();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package org.springframework.boot.autoconfigure.integration;
 | 
					package org.springframework.boot.autoconfigure.integration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.DatabaseInitializerMode;
 | 
				
			||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
					import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,10 @@ public class IntegrationProperties {
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		private String schema = DEFAULT_SCHEMA_LOCATION;
 | 
							private String schema = DEFAULT_SCHEMA_LOCATION;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private final Initializer initializer = new Initializer();
 | 
							/**
 | 
				
			||||||
 | 
							 * Spring Integration database schema initialization mode.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							private DatabaseInitializerMode initializeSchema = DatabaseInitializerMode.EMBEDDED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public String getSchema() {
 | 
							public String getSchema() {
 | 
				
			||||||
			return this.schema;
 | 
								return this.schema;
 | 
				
			||||||
| 
						 | 
					@ -54,25 +58,12 @@ public class IntegrationProperties {
 | 
				
			||||||
			this.schema = schema;
 | 
								this.schema = schema;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public Initializer getInitializer() {
 | 
							public DatabaseInitializerMode getInitializeSchema() {
 | 
				
			||||||
			return this.initializer;
 | 
								return this.initializeSchema;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public class Initializer {
 | 
							public void setInitializeSchema(DatabaseInitializerMode initializeSchema) {
 | 
				
			||||||
 | 
								this.initializeSchema = initializeSchema;
 | 
				
			||||||
			/**
 | 
					 | 
				
			||||||
			 * Create the required integration tables on startup.
 | 
					 | 
				
			||||||
			 */
 | 
					 | 
				
			||||||
			private boolean enabled = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			public boolean isEnabled() {
 | 
					 | 
				
			||||||
				return this.enabled;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			public void setEnabled(boolean enabled) {
 | 
					 | 
				
			||||||
				this.enabled = enabled;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.quartz;
 | 
				
			||||||
import javax.sql.DataSource;
 | 
					import javax.sql.DataSource;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.springframework.boot.autoconfigure.AbstractDatabaseInitializer;
 | 
					import org.springframework.boot.autoconfigure.AbstractDatabaseInitializer;
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.DatabaseInitializerMode;
 | 
				
			||||||
import org.springframework.core.io.ResourceLoader;
 | 
					import org.springframework.core.io.ResourceLoader;
 | 
				
			||||||
import org.springframework.util.Assert;
 | 
					import org.springframework.util.Assert;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,8 +41,8 @@ public class QuartzDatabaseInitializer extends AbstractDatabaseInitializer {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	protected boolean isEnabled() {
 | 
						protected DatabaseInitializerMode getMode() {
 | 
				
			||||||
		return this.properties.getJdbc().isInitializeSchema();
 | 
							return this.properties.getJdbc().getInitializeSchema();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.quartz;
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.DatabaseInitializerMode;
 | 
				
			||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
					import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -70,9 +71,9 @@ public class QuartzProperties {
 | 
				
			||||||
		private String schema = DEFAULT_SCHEMA_LOCATION;
 | 
							private String schema = DEFAULT_SCHEMA_LOCATION;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/**
 | 
							/**
 | 
				
			||||||
		 * Create the required Quartz Scheduler tables on startup.
 | 
							 * Quartz Scheduler database schema initialization mode.
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		private boolean initializeSchema;
 | 
							private DatabaseInitializerMode initializeSchema = DatabaseInitializerMode.EMBEDDED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public String getSchema() {
 | 
							public String getSchema() {
 | 
				
			||||||
			return this.schema;
 | 
								return this.schema;
 | 
				
			||||||
| 
						 | 
					@ -82,11 +83,11 @@ public class QuartzProperties {
 | 
				
			||||||
			this.schema = schema;
 | 
								this.schema = schema;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public boolean isInitializeSchema() {
 | 
							public DatabaseInitializerMode getInitializeSchema() {
 | 
				
			||||||
			return this.initializeSchema;
 | 
								return this.initializeSchema;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public void setInitializeSchema(boolean initializeSchema) {
 | 
							public void setInitializeSchema(DatabaseInitializerMode initializeSchema) {
 | 
				
			||||||
			this.initializeSchema = initializeSchema;
 | 
								this.initializeSchema = initializeSchema;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.session;
 | 
				
			||||||
import javax.sql.DataSource;
 | 
					import javax.sql.DataSource;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.springframework.boot.autoconfigure.AbstractDatabaseInitializer;
 | 
					import org.springframework.boot.autoconfigure.AbstractDatabaseInitializer;
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.DatabaseInitializerMode;
 | 
				
			||||||
import org.springframework.core.io.ResourceLoader;
 | 
					import org.springframework.core.io.ResourceLoader;
 | 
				
			||||||
import org.springframework.util.Assert;
 | 
					import org.springframework.util.Assert;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,8 +41,8 @@ public class JdbcSessionDatabaseInitializer extends AbstractDatabaseInitializer
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	protected boolean isEnabled() {
 | 
						protected DatabaseInitializerMode getMode() {
 | 
				
			||||||
		return this.properties.getInitializer().isEnabled();
 | 
							return this.properties.getInitializeSchema();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package org.springframework.boot.autoconfigure.session;
 | 
					package org.springframework.boot.autoconfigure.session;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.DatabaseInitializerMode;
 | 
				
			||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
					import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -42,7 +43,10 @@ public class JdbcSessionProperties {
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	private String tableName = DEFAULT_TABLE_NAME;
 | 
						private String tableName = DEFAULT_TABLE_NAME;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private final Initializer initializer = new Initializer();
 | 
						/**
 | 
				
			||||||
 | 
						 * Spring Session database schema initialization mode.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private DatabaseInitializerMode initializeSchema = DatabaseInitializerMode.EMBEDDED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getSchema() {
 | 
						public String getSchema() {
 | 
				
			||||||
		return this.schema;
 | 
							return this.schema;
 | 
				
			||||||
| 
						 | 
					@ -60,32 +64,12 @@ public class JdbcSessionProperties {
 | 
				
			||||||
		this.tableName = tableName;
 | 
							this.tableName = tableName;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public Initializer getInitializer() {
 | 
						public DatabaseInitializerMode getInitializeSchema() {
 | 
				
			||||||
		return this.initializer;
 | 
							return this.initializeSchema;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public class Initializer {
 | 
						public void setInitializeSchema(DatabaseInitializerMode initializeSchema) {
 | 
				
			||||||
 | 
							this.initializeSchema = initializeSchema;
 | 
				
			||||||
		/**
 | 
					 | 
				
			||||||
		 * Create the required session tables on startup if necessary. Enabled
 | 
					 | 
				
			||||||
		 * automatically if the default table name is set or a custom schema is
 | 
					 | 
				
			||||||
		 * configured.
 | 
					 | 
				
			||||||
		 */
 | 
					 | 
				
			||||||
		private Boolean enabled;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		public boolean isEnabled() {
 | 
					 | 
				
			||||||
			if (this.enabled != null) {
 | 
					 | 
				
			||||||
				return this.enabled;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			boolean defaultTableName = DEFAULT_TABLE_NAME.equals(getTableName());
 | 
					 | 
				
			||||||
			boolean customSchema = !DEFAULT_SCHEMA_LOCATION.equals(getSchema());
 | 
					 | 
				
			||||||
			return (defaultTableName || customSchema);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		public void setEnabled(boolean enabled) {
 | 
					 | 
				
			||||||
			this.enabled = enabled;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -47,6 +47,7 @@ import org.springframework.batch.support.transaction.ResourcelessTransactionMana
 | 
				
			||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
import org.springframework.boot.CommandLineRunner;
 | 
					import org.springframework.boot.CommandLineRunner;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
 | 
					import org.springframework.boot.autoconfigure.AutoConfigurations;
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.DatabaseInitializerMode;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage;
 | 
					import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
 | 
					import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
 | 
					import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
 | 
				
			||||||
| 
						 | 
					@ -86,8 +87,9 @@ public class BatchAutoConfigurationTests {
 | 
				
			||||||
				EmbeddedDataSourceConfiguration.class).run((context) -> {
 | 
									EmbeddedDataSourceConfiguration.class).run((context) -> {
 | 
				
			||||||
					assertThat(context).hasSingleBean(JobLauncher.class);
 | 
										assertThat(context).hasSingleBean(JobLauncher.class);
 | 
				
			||||||
					assertThat(context).hasSingleBean(JobExplorer.class);
 | 
										assertThat(context).hasSingleBean(JobExplorer.class);
 | 
				
			||||||
					assertThat(context.getBean(BatchProperties.class).getInitializer()
 | 
										assertThat(
 | 
				
			||||||
							.isEnabled()).isTrue();
 | 
												context.getBean(BatchProperties.class).getInitializeSchema())
 | 
				
			||||||
 | 
														.isEqualTo(DatabaseInitializerMode.EMBEDDED);
 | 
				
			||||||
					assertThat(new JdbcTemplate(context.getBean(DataSource.class))
 | 
										assertThat(new JdbcTemplate(context.getBean(DataSource.class))
 | 
				
			||||||
							.queryForList("select * from BATCH_JOB_EXECUTION")).isEmpty();
 | 
												.queryForList("select * from BATCH_JOB_EXECUTION")).isEmpty();
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
| 
						 | 
					@ -169,11 +171,12 @@ public class BatchAutoConfigurationTests {
 | 
				
			||||||
				.withUserConfiguration(TestConfiguration.class,
 | 
									.withUserConfiguration(TestConfiguration.class,
 | 
				
			||||||
						EmbeddedDataSourceConfiguration.class)
 | 
											EmbeddedDataSourceConfiguration.class)
 | 
				
			||||||
				.withPropertyValues("spring.datasource.generate-unique-name=true",
 | 
									.withPropertyValues("spring.datasource.generate-unique-name=true",
 | 
				
			||||||
						"spring.batch.initializer.enabled:false")
 | 
											"spring.batch.initialize-schema:never")
 | 
				
			||||||
				.run((context) -> {
 | 
									.run((context) -> {
 | 
				
			||||||
					assertThat(context).hasSingleBean(JobLauncher.class);
 | 
										assertThat(context).hasSingleBean(JobLauncher.class);
 | 
				
			||||||
					assertThat(context.getBean(BatchProperties.class).getInitializer()
 | 
										assertThat(
 | 
				
			||||||
							.isEnabled()).isFalse();
 | 
												context.getBean(BatchProperties.class).getInitializeSchema())
 | 
				
			||||||
 | 
														.isEqualTo(DatabaseInitializerMode.NEVER);
 | 
				
			||||||
					this.expected.expect(BadSqlGrammarException.class);
 | 
										this.expected.expect(BadSqlGrammarException.class);
 | 
				
			||||||
					new JdbcTemplate(context.getBean(DataSource.class))
 | 
										new JdbcTemplate(context.getBean(DataSource.class))
 | 
				
			||||||
							.queryForList("select * from BATCH_JOB_EXECUTION");
 | 
												.queryForList("select * from BATCH_JOB_EXECUTION");
 | 
				
			||||||
| 
						 | 
					@ -210,8 +213,9 @@ public class BatchAutoConfigurationTests {
 | 
				
			||||||
						"spring.batch.tablePrefix:PREFIX_")
 | 
											"spring.batch.tablePrefix:PREFIX_")
 | 
				
			||||||
				.run((context) -> {
 | 
									.run((context) -> {
 | 
				
			||||||
					assertThat(context).hasSingleBean(JobLauncher.class);
 | 
										assertThat(context).hasSingleBean(JobLauncher.class);
 | 
				
			||||||
					assertThat(context.getBean(BatchProperties.class).getInitializer()
 | 
										assertThat(
 | 
				
			||||||
							.isEnabled()).isTrue();
 | 
												context.getBean(BatchProperties.class).getInitializeSchema())
 | 
				
			||||||
 | 
														.isEqualTo(DatabaseInitializerMode.EMBEDDED);
 | 
				
			||||||
					assertThat(new JdbcTemplate(context.getBean(DataSource.class))
 | 
										assertThat(new JdbcTemplate(context.getBean(DataSource.class))
 | 
				
			||||||
							.queryForList("select * from PREFIX_JOB_EXECUTION"))
 | 
												.queryForList("select * from PREFIX_JOB_EXECUTION"))
 | 
				
			||||||
									.isEmpty();
 | 
														.isEmpty();
 | 
				
			||||||
| 
						 | 
					@ -223,25 +227,6 @@ public class BatchAutoConfigurationTests {
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
					 | 
				
			||||||
	public void testCustomTablePrefixWithDefaultSchemaDisablesInitializer()
 | 
					 | 
				
			||||||
			throws Exception {
 | 
					 | 
				
			||||||
		this.contextRunner
 | 
					 | 
				
			||||||
				.withUserConfiguration(TestConfiguration.class,
 | 
					 | 
				
			||||||
						EmbeddedDataSourceConfiguration.class,
 | 
					 | 
				
			||||||
						HibernateJpaAutoConfiguration.class)
 | 
					 | 
				
			||||||
				.withPropertyValues("spring.datasource.generate-unique-name=true",
 | 
					 | 
				
			||||||
						"spring.batch.tablePrefix:PREFIX_")
 | 
					 | 
				
			||||||
				.run((context) -> {
 | 
					 | 
				
			||||||
					assertThat(context).hasSingleBean(JobLauncher.class);
 | 
					 | 
				
			||||||
					assertThat(context.getBean(BatchProperties.class).getInitializer()
 | 
					 | 
				
			||||||
							.isEnabled()).isFalse();
 | 
					 | 
				
			||||||
					this.expected.expect(BadSqlGrammarException.class);
 | 
					 | 
				
			||||||
					new JdbcTemplate(context.getBean(DataSource.class))
 | 
					 | 
				
			||||||
							.queryForList("select * from BATCH_JOB_EXECUTION");
 | 
					 | 
				
			||||||
				});
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	public void testCustomizeJpaTransactionManagerUsingProperties() throws Exception {
 | 
						public void testCustomizeJpaTransactionManagerUsingProperties() throws Exception {
 | 
				
			||||||
		this.contextRunner
 | 
							this.contextRunner
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,6 +27,7 @@ import org.springframework.batch.core.explore.JobExplorer;
 | 
				
			||||||
import org.springframework.batch.core.launch.JobLauncher;
 | 
					import org.springframework.batch.core.launch.JobLauncher;
 | 
				
			||||||
import org.springframework.batch.core.repository.JobRepository;
 | 
					import org.springframework.batch.core.repository.JobRepository;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
 | 
					import org.springframework.boot.autoconfigure.AutoConfigurations;
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.DatabaseInitializerMode;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage;
 | 
					import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
 | 
					import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.orm.jpa.test.City;
 | 
					import org.springframework.boot.autoconfigure.orm.jpa.test.City;
 | 
				
			||||||
| 
						 | 
					@ -66,8 +67,9 @@ public class BatchAutoConfigurationWithoutJpaTests {
 | 
				
			||||||
					assertThat(
 | 
										assertThat(
 | 
				
			||||||
							context.getBean(PlatformTransactionManager.class).toString())
 | 
												context.getBean(PlatformTransactionManager.class).toString())
 | 
				
			||||||
									.contains("DataSourceTransactionManager");
 | 
														.contains("DataSourceTransactionManager");
 | 
				
			||||||
					assertThat(context.getBean(BatchProperties.class).getInitializer()
 | 
										assertThat(
 | 
				
			||||||
							.isEnabled()).isTrue();
 | 
												context.getBean(BatchProperties.class).getInitializeSchema())
 | 
				
			||||||
 | 
														.isEqualTo(DatabaseInitializerMode.EMBEDDED);
 | 
				
			||||||
					assertThat(new JdbcTemplate(context.getBean(DataSource.class))
 | 
										assertThat(new JdbcTemplate(context.getBean(DataSource.class))
 | 
				
			||||||
							.queryForList("select * from BATCH_JOB_EXECUTION")).isEmpty();
 | 
												.queryForList("select * from BATCH_JOB_EXECUTION")).isEmpty();
 | 
				
			||||||
					assertThat(context.getBean(JobExplorer.class)
 | 
										assertThat(context.getBean(JobExplorer.class)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,6 +26,7 @@ import org.junit.Rule;
 | 
				
			||||||
import org.junit.Test;
 | 
					import org.junit.Test;
 | 
				
			||||||
import org.junit.rules.ExpectedException;
 | 
					import org.junit.rules.ExpectedException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.DatabaseInitializerMode;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration.IntegrationComponentScanAutoConfiguration;
 | 
					import org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration.IntegrationComponentScanAutoConfiguration;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
 | 
					import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
 | 
					import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
 | 
				
			||||||
| 
						 | 
					@ -152,9 +153,9 @@ public class IntegrationAutoConfigurationTests {
 | 
				
			||||||
				DataSourceTransactionManagerAutoConfiguration.class,
 | 
									DataSourceTransactionManagerAutoConfiguration.class,
 | 
				
			||||||
				JdbcTemplateAutoConfiguration.class, IntegrationAutoConfiguration.class },
 | 
									JdbcTemplateAutoConfiguration.class, IntegrationAutoConfiguration.class },
 | 
				
			||||||
				"spring.datasource.generate-unique-name=true",
 | 
									"spring.datasource.generate-unique-name=true",
 | 
				
			||||||
				"spring.integration.jdbc.initializer.enabled=true");
 | 
									"spring.integration.jdbc.initialize-schema=always");
 | 
				
			||||||
		assertThat(this.context.getBean(IntegrationProperties.class).getJdbc()
 | 
							assertThat(this.context.getBean(IntegrationProperties.class).getJdbc()
 | 
				
			||||||
				.getInitializer().isEnabled()).isTrue();
 | 
									.getInitializeSchema()).isEqualTo(DatabaseInitializerMode.ALWAYS);
 | 
				
			||||||
		JdbcOperations jdbcOperations = this.context.getBean(JdbcOperations.class);
 | 
							JdbcOperations jdbcOperations = this.context.getBean(JdbcOperations.class);
 | 
				
			||||||
		assertThat(jdbcOperations.queryForList("select * from INT_MESSAGE")).isEmpty();
 | 
							assertThat(jdbcOperations.queryForList("select * from INT_MESSAGE")).isEmpty();
 | 
				
			||||||
		assertThat(jdbcOperations.queryForList("select * from INT_GROUP_TO_MESSAGE"))
 | 
							assertThat(jdbcOperations.queryForList("select * from INT_GROUP_TO_MESSAGE"))
 | 
				
			||||||
| 
						 | 
					@ -172,25 +173,24 @@ public class IntegrationAutoConfigurationTests {
 | 
				
			||||||
				DataSourceTransactionManagerAutoConfiguration.class,
 | 
									DataSourceTransactionManagerAutoConfiguration.class,
 | 
				
			||||||
				JdbcTemplateAutoConfiguration.class, IntegrationAutoConfiguration.class },
 | 
									JdbcTemplateAutoConfiguration.class, IntegrationAutoConfiguration.class },
 | 
				
			||||||
				"spring.datasource.generate-unique-name=true",
 | 
									"spring.datasource.generate-unique-name=true",
 | 
				
			||||||
				"spring.integration.jdbc.initializer.enabled=false");
 | 
									"spring.integration.jdbc.initialize-schema=never");
 | 
				
			||||||
		assertThat(this.context.getBean(IntegrationProperties.class).getJdbc()
 | 
							assertThat(this.context.getBean(IntegrationProperties.class).getJdbc()
 | 
				
			||||||
				.getInitializer().isEnabled()).isFalse();
 | 
									.getInitializeSchema()).isEqualTo(DatabaseInitializerMode.NEVER);
 | 
				
			||||||
		JdbcOperations jdbcOperations = this.context.getBean(JdbcOperations.class);
 | 
							JdbcOperations jdbcOperations = this.context.getBean(JdbcOperations.class);
 | 
				
			||||||
		this.thrown.expect(BadSqlGrammarException.class);
 | 
							this.thrown.expect(BadSqlGrammarException.class);
 | 
				
			||||||
		jdbcOperations.queryForList("select * from INT_MESSAGE");
 | 
							jdbcOperations.queryForList("select * from INT_MESSAGE");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	public void integrationJdbcDatabaseInitializerDisabledByDefault() {
 | 
						public void integrationJdbcDatabaseInitializerEnabledByDefaultWithEmbeddedDb() {
 | 
				
			||||||
		load(new Class[] { EmbeddedDataSourceConfiguration.class,
 | 
							load(new Class[] { EmbeddedDataSourceConfiguration.class,
 | 
				
			||||||
				DataSourceTransactionManagerAutoConfiguration.class,
 | 
									DataSourceTransactionManagerAutoConfiguration.class,
 | 
				
			||||||
				JdbcTemplateAutoConfiguration.class, IntegrationAutoConfiguration.class },
 | 
									JdbcTemplateAutoConfiguration.class, IntegrationAutoConfiguration.class },
 | 
				
			||||||
				"spring.datasource.generate-unique-name=true");
 | 
									"spring.datasource.generate-unique-name=true");
 | 
				
			||||||
		assertThat(this.context.getBean(IntegrationProperties.class).getJdbc()
 | 
							assertThat(this.context.getBean(IntegrationProperties.class).getJdbc()
 | 
				
			||||||
				.getInitializer().isEnabled()).isFalse();
 | 
									.getInitializeSchema()).isEqualTo(DatabaseInitializerMode.EMBEDDED);
 | 
				
			||||||
		JdbcOperations jdbcOperations = this.context.getBean(JdbcOperations.class);
 | 
							JdbcOperations jdbcOperations = this.context.getBean(JdbcOperations.class);
 | 
				
			||||||
		this.thrown.expect(BadSqlGrammarException.class);
 | 
							jdbcOperations.queryForList("select * from INT_MESSAGE").isEmpty();
 | 
				
			||||||
		jdbcOperations.queryForList("select * from INT_MESSAGE");
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private static void assertDomains(MBeanServer mBeanServer, boolean expected,
 | 
						private static void assertDomains(MBeanServer mBeanServer, boolean expected,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -108,7 +108,7 @@ public class QuartzAutoConfigurationTests {
 | 
				
			||||||
				EmbeddedDataSourceConfiguration.class,
 | 
									EmbeddedDataSourceConfiguration.class,
 | 
				
			||||||
				DataSourceTransactionManagerAutoConfiguration.class },
 | 
									DataSourceTransactionManagerAutoConfiguration.class },
 | 
				
			||||||
				"spring.quartz.job-store-type=jdbc",
 | 
									"spring.quartz.job-store-type=jdbc",
 | 
				
			||||||
				"spring.quartz.jdbc.initialize-schema=true");
 | 
									"spring.quartz.jdbc.initialize-schema=always");
 | 
				
			||||||
		testWithDataSource();
 | 
							testWithDataSource();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -117,7 +117,7 @@ public class QuartzAutoConfigurationTests {
 | 
				
			||||||
		load(new Class<?>[] { QuartzJobsConfiguration.class,
 | 
							load(new Class<?>[] { QuartzJobsConfiguration.class,
 | 
				
			||||||
				EmbeddedDataSourceConfiguration.class },
 | 
									EmbeddedDataSourceConfiguration.class },
 | 
				
			||||||
				"spring.quartz.job-store-type=jdbc",
 | 
									"spring.quartz.job-store-type=jdbc",
 | 
				
			||||||
				"spring.quartz.jdbc.initialize-schema=true");
 | 
									"spring.quartz.jdbc.initialize-schema=always");
 | 
				
			||||||
		testWithDataSource();
 | 
							testWithDataSource();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,6 +23,7 @@ import org.junit.Test;
 | 
				
			||||||
import org.junit.rules.ExpectedException;
 | 
					import org.junit.rules.ExpectedException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.springframework.beans.DirectFieldAccessor;
 | 
					import org.springframework.beans.DirectFieldAccessor;
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.DatabaseInitializerMode;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
 | 
					import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
 | 
					import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
 | 
					import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
 | 
				
			||||||
| 
						 | 
					@ -54,8 +55,9 @@ public class SessionAutoConfigurationJdbcTests
 | 
				
			||||||
				JdbcOperationsSessionRepository.class);
 | 
									JdbcOperationsSessionRepository.class);
 | 
				
			||||||
		assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName"))
 | 
							assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName"))
 | 
				
			||||||
				.isEqualTo("SPRING_SESSION");
 | 
									.isEqualTo("SPRING_SESSION");
 | 
				
			||||||
		assertThat(this.context.getBean(JdbcSessionProperties.class).getInitializer()
 | 
							assertThat(
 | 
				
			||||||
				.isEnabled()).isTrue();
 | 
									this.context.getBean(JdbcSessionProperties.class).getInitializeSchema())
 | 
				
			||||||
 | 
											.isEqualTo(DatabaseInitializerMode.EMBEDDED);
 | 
				
			||||||
		assertThat(this.context.getBean(JdbcOperations.class)
 | 
							assertThat(this.context.getBean(JdbcOperations.class)
 | 
				
			||||||
				.queryForList("select * from SPRING_SESSION")).isEmpty();
 | 
									.queryForList("select * from SPRING_SESSION")).isEmpty();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -65,13 +67,14 @@ public class SessionAutoConfigurationJdbcTests
 | 
				
			||||||
		load(Arrays.asList(EmbeddedDataSourceConfiguration.class,
 | 
							load(Arrays.asList(EmbeddedDataSourceConfiguration.class,
 | 
				
			||||||
				DataSourceTransactionManagerAutoConfiguration.class),
 | 
									DataSourceTransactionManagerAutoConfiguration.class),
 | 
				
			||||||
				"spring.session.store-type=jdbc",
 | 
									"spring.session.store-type=jdbc",
 | 
				
			||||||
				"spring.session.jdbc.initializer.enabled=false");
 | 
									"spring.session.jdbc.initialize-schema=never");
 | 
				
			||||||
		JdbcOperationsSessionRepository repository = validateSessionRepository(
 | 
							JdbcOperationsSessionRepository repository = validateSessionRepository(
 | 
				
			||||||
				JdbcOperationsSessionRepository.class);
 | 
									JdbcOperationsSessionRepository.class);
 | 
				
			||||||
		assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName"))
 | 
							assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName"))
 | 
				
			||||||
				.isEqualTo("SPRING_SESSION");
 | 
									.isEqualTo("SPRING_SESSION");
 | 
				
			||||||
		assertThat(this.context.getBean(JdbcSessionProperties.class).getInitializer()
 | 
							assertThat(
 | 
				
			||||||
				.isEnabled()).isFalse();
 | 
									this.context.getBean(JdbcSessionProperties.class).getInitializeSchema())
 | 
				
			||||||
 | 
											.isEqualTo(DatabaseInitializerMode.NEVER);
 | 
				
			||||||
		this.thrown.expect(BadSqlGrammarException.class);
 | 
							this.thrown.expect(BadSqlGrammarException.class);
 | 
				
			||||||
		assertThat(this.context.getBean(JdbcOperations.class)
 | 
							assertThat(this.context.getBean(JdbcOperations.class)
 | 
				
			||||||
				.queryForList("select * from SPRING_SESSION")).isEmpty();
 | 
									.queryForList("select * from SPRING_SESSION")).isEmpty();
 | 
				
			||||||
| 
						 | 
					@ -88,27 +91,11 @@ public class SessionAutoConfigurationJdbcTests
 | 
				
			||||||
				JdbcOperationsSessionRepository.class);
 | 
									JdbcOperationsSessionRepository.class);
 | 
				
			||||||
		assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName"))
 | 
							assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName"))
 | 
				
			||||||
				.isEqualTo("FOO_BAR");
 | 
									.isEqualTo("FOO_BAR");
 | 
				
			||||||
		assertThat(this.context.getBean(JdbcSessionProperties.class).getInitializer()
 | 
							assertThat(
 | 
				
			||||||
				.isEnabled()).isTrue();
 | 
									this.context.getBean(JdbcSessionProperties.class).getInitializeSchema())
 | 
				
			||||||
 | 
											.isEqualTo(DatabaseInitializerMode.EMBEDDED);
 | 
				
			||||||
		assertThat(this.context.getBean(JdbcOperations.class)
 | 
							assertThat(this.context.getBean(JdbcOperations.class)
 | 
				
			||||||
				.queryForList("select * from FOO_BAR")).isEmpty();
 | 
									.queryForList("select * from FOO_BAR")).isEmpty();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
					 | 
				
			||||||
	public void customTableNameWithDefaultSchemaDisablesInitializer() {
 | 
					 | 
				
			||||||
		load(Arrays.asList(EmbeddedDataSourceConfiguration.class,
 | 
					 | 
				
			||||||
				DataSourceTransactionManagerAutoConfiguration.class),
 | 
					 | 
				
			||||||
				"spring.session.store-type=jdbc",
 | 
					 | 
				
			||||||
				"spring.session.jdbc.table-name=FOO_BAR");
 | 
					 | 
				
			||||||
		JdbcOperationsSessionRepository repository = validateSessionRepository(
 | 
					 | 
				
			||||||
				JdbcOperationsSessionRepository.class);
 | 
					 | 
				
			||||||
		assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName"))
 | 
					 | 
				
			||||||
				.isEqualTo("FOO_BAR");
 | 
					 | 
				
			||||||
		assertThat(this.context.getBean(JdbcSessionProperties.class).getInitializer()
 | 
					 | 
				
			||||||
				.isEnabled()).isFalse();
 | 
					 | 
				
			||||||
		this.thrown.expect(BadSqlGrammarException.class);
 | 
					 | 
				
			||||||
		assertThat(this.context.getBean(JdbcOperations.class)
 | 
					 | 
				
			||||||
				.queryForList("select * from SPRING_SESSION")).isEmpty();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -132,7 +132,7 @@ content into your application; rather pick only the properties that you need.
 | 
				
			||||||
	# QUARTZ SCHEDULER ({sc-spring-boot-autoconfigure}/quartz/QuartzProperties.{sc-ext}[QuartzProperties])
 | 
						# QUARTZ SCHEDULER ({sc-spring-boot-autoconfigure}/quartz/QuartzProperties.{sc-ext}[QuartzProperties])
 | 
				
			||||||
	spring.quartz.job-store-type=memory # Quartz job store type.
 | 
						spring.quartz.job-store-type=memory # Quartz job store type.
 | 
				
			||||||
	spring.quartz.properties.*= # Additional Quartz Scheduler properties.
 | 
						spring.quartz.properties.*= # Additional Quartz Scheduler properties.
 | 
				
			||||||
	spring.quartz.jdbc.initialize-schema=false # Create the required Quartz Scheduler tables on startup.
 | 
						spring.quartz.jdbc.initialize-schema=embedded # Quartz Scheduler database schema initialization mode.
 | 
				
			||||||
	spring.quartz.jdbc.schema=classpath:org/quartz/impl/jdbcjobstore/tables_@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
 | 
						spring.quartz.jdbc.schema=classpath:org/quartz/impl/jdbcjobstore/tables_@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# Reactor
 | 
						# Reactor
 | 
				
			||||||
| 
						 | 
					@ -416,7 +416,7 @@ content into your application; rather pick only the properties that you need.
 | 
				
			||||||
	# SPRING SESSION ({sc-spring-boot-autoconfigure}/session/SessionProperties.{sc-ext}[SessionProperties])
 | 
						# SPRING SESSION ({sc-spring-boot-autoconfigure}/session/SessionProperties.{sc-ext}[SessionProperties])
 | 
				
			||||||
	spring.session.hazelcast.flush-mode=on-save # Sessions flush mode.
 | 
						spring.session.hazelcast.flush-mode=on-save # Sessions flush mode.
 | 
				
			||||||
	spring.session.hazelcast.map-name=spring:session:sessions # Name of the map used to store sessions.
 | 
						spring.session.hazelcast.map-name=spring:session:sessions # Name of the map used to store sessions.
 | 
				
			||||||
	spring.session.jdbc.initializer.enabled= # Create the required session tables on startup if necessary. Enabled automatically if the default table name is set or a custom schema is configured.
 | 
						spring.session.jdbc.initialize-schema=embedded # Spring Session database schema initialization mode.
 | 
				
			||||||
	spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
 | 
						spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
 | 
				
			||||||
	spring.session.jdbc.table-name=SPRING_SESSION # Name of database table used to store sessions.
 | 
						spring.session.jdbc.table-name=SPRING_SESSION # Name of database table used to store sessions.
 | 
				
			||||||
	spring.session.redis.flush-mode=on-save # Sessions flush mode.
 | 
						spring.session.redis.flush-mode=on-save # Sessions flush mode.
 | 
				
			||||||
| 
						 | 
					@ -942,14 +942,14 @@ content into your application; rather pick only the properties that you need.
 | 
				
			||||||
	spring.artemis.user= # Login user of the broker.
 | 
						spring.artemis.user= # Login user of the broker.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# SPRING BATCH ({sc-spring-boot-autoconfigure}/batch/BatchProperties.{sc-ext}[BatchProperties])
 | 
						# SPRING BATCH ({sc-spring-boot-autoconfigure}/batch/BatchProperties.{sc-ext}[BatchProperties])
 | 
				
			||||||
	spring.batch.initializer.enabled= # Create the required batch tables on startup if necessary. Enabled automatically if no custom table prefix is set or if a custom schema is configured.
 | 
						spring.batch.initialize-schema=embedded # Spring Batch database schema initialization mode.
 | 
				
			||||||
	spring.batch.job.enabled=true # Execute all Spring Batch jobs in the context on startup.
 | 
						spring.batch.job.enabled=true # Execute all Spring Batch jobs in the context on startup.
 | 
				
			||||||
	spring.batch.job.names= # Comma-separated list of job names to execute on startup (For instance `job1,job2`). By default, all Jobs found in the context are executed.
 | 
						spring.batch.job.names= # Comma-separated list of job names to execute on startup (For instance `job1,job2`). By default, all Jobs found in the context are executed.
 | 
				
			||||||
	spring.batch.schema=classpath:org/springframework/batch/core/schema-@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
 | 
						spring.batch.schema=classpath:org/springframework/batch/core/schema-@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
 | 
				
			||||||
	spring.batch.table-prefix= # Table prefix for all the batch meta-data tables.
 | 
						spring.batch.table-prefix= # Table prefix for all the batch meta-data tables.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# SPRING INTEGRATION ({sc-spring-boot-autoconfigure}/integration/IntegrationProperties.{sc-ext}[IntegrationProperties])
 | 
						# SPRING INTEGRATION ({sc-spring-boot-autoconfigure}/integration/IntegrationProperties.{sc-ext}[IntegrationProperties])
 | 
				
			||||||
	spring.integration.jdbc.initializer.enabled=false # Create the required integration tables on startup.
 | 
						spring.integration.jdbc.initialize-schema=embedded # Spring Integration database schema initialization mode.
 | 
				
			||||||
	spring.integration.jdbc.schema=classpath:org/springframework/integration/jdbc/schema-@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
 | 
						spring.integration.jdbc.schema=classpath:org/springframework/integration/jdbc/schema-@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# JMS ({sc-spring-boot-autoconfigure}/jms/JmsProperties.{sc-ext}[JmsProperties])
 | 
						# JMS ({sc-spring-boot-autoconfigure}/jms/JmsProperties.{sc-ext}[JmsProperties])
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1936,11 +1936,12 @@ data.
 | 
				
			||||||
=== Initialize a Spring Batch database
 | 
					=== Initialize a Spring Batch database
 | 
				
			||||||
If you are using Spring Batch then it comes pre-packaged with SQL initialization scripts
 | 
					If you are using Spring Batch then it comes pre-packaged with SQL initialization scripts
 | 
				
			||||||
for most popular database platforms. Spring Boot will detect your database type, and
 | 
					for most popular database platforms. Spring Boot will detect your database type, and
 | 
				
			||||||
execute those scripts by default, and in this case will switch the fail fast setting to
 | 
					execute those scripts by default when using an embedded database, and in this case will
 | 
				
			||||||
false (errors are logged but do not prevent the application from starting). This is
 | 
					switch the fail fast setting to false (errors are logged but do not prevent the
 | 
				
			||||||
because the scripts are known to be reliable and generally do not contain bugs, so errors
 | 
					application from starting). This is because the scripts are known to be reliable and
 | 
				
			||||||
are ignorable, and ignoring them makes the scripts idempotent. You can switch off the
 | 
					generally do not contain bugs, so errors are ignorable, and ignoring them makes the
 | 
				
			||||||
initialization explicitly using `spring.batch.initializer.enabled=false`.
 | 
					scripts idempotent. You can switch off the initialization explicitly using
 | 
				
			||||||
 | 
					`spring.batch.initialize-schema=never`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5568,7 +5568,7 @@ on startup:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[source,properties,indent=0]
 | 
					[source,properties,indent=0]
 | 
				
			||||||
----
 | 
					----
 | 
				
			||||||
	spring.integration.jdbc.initializer.enabled=true
 | 
						spring.integration.jdbc.initialize-schema=always
 | 
				
			||||||
----
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See the
 | 
					See the
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue