From fa7da5925bd7a194c44391ae9ada99f50da4a287 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 15 May 2014 15:47:44 +0100 Subject: [PATCH] Remove checked exceptions from @PostConstructs Update all @PostConstruct methods to ensure that they don't throw checked exceptions. Required to allow deployment of Spring Boot applications on Glassfish. Fixes gh-868 --- .../autoconfigure/CrshAutoConfiguration.java | 6 ++--- .../batch/BasicBatchConfigurer.java | 13 ++++++---- .../batch/BatchDatabaseInitializer.java | 15 +++++++++--- .../jdbc/DataSourceAutoConfiguration.java | 24 ++++++++++++++----- .../mongo/MongoAutoConfiguration.java | 4 ++-- 5 files changed, 43 insertions(+), 19 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/CrshAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/CrshAutoConfiguration.java index 6b52a539474..9c656ebdd7d 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/CrshAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/CrshAutoConfiguration.java @@ -18,7 +18,6 @@ package org.springframework.boot.actuate.autoconfigure; import java.io.IOException; import java.io.InputStream; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -214,7 +213,7 @@ public class CrshAutoConfiguration { } @PostConstruct - public void init() throws Exception { + public void init() { FS commandFileSystem = createFileSystem(this.properties .getCommandPathPatterns()); FS configurationFileSystem = createFileSystem(this.properties @@ -232,8 +231,7 @@ public class CrshAutoConfiguration { start(context); } - protected FS createFileSystem(String[] pathPatterns) throws IOException, - URISyntaxException { + protected FS createFileSystem(String[] pathPatterns) { Assert.notNull(pathPatterns, "PathPatterns must not be null"); FS fileSystem = new FS(); for (String pathPattern : pathPatterns) { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BasicBatchConfigurer.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BasicBatchConfigurer.java index 3036489dfdc..f42940d0c23 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BasicBatchConfigurer.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BasicBatchConfigurer.java @@ -87,10 +87,15 @@ public class BasicBatchConfigurer implements BatchConfigurer { } @PostConstruct - public void initialize() throws Exception { - this.transactionManager = createTransactionManager(); - this.jobRepository = createJobRepository(); - this.jobLauncher = createJobLauncher(); + public void initialize() { + try { + this.transactionManager = createTransactionManager(); + this.jobRepository = createJobRepository(); + this.jobLauncher = createJobLauncher(); + } + catch (Exception ex) { + throw new IllegalStateException("Unable to initialize Spring Batch", ex); + } } private JobLauncher createJobLauncher() throws Exception { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BatchDatabaseInitializer.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BatchDatabaseInitializer.java index 5e3df8eab41..c43af60adbc 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BatchDatabaseInitializer.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/batch/BatchDatabaseInitializer.java @@ -28,6 +28,7 @@ import org.springframework.core.env.Environment; import org.springframework.core.io.ResourceLoader; import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; +import org.springframework.jdbc.support.MetaDataAccessException; import org.springframework.stereotype.Component; /** @@ -58,10 +59,9 @@ public class BatchDatabaseInitializer implements EnvironmentAware { } @PostConstruct - protected void initialize() throws Exception { + protected void initialize() { if (this.enabled) { - String platform = DatabaseType.fromMetaData(this.dataSource).toString() - .toLowerCase(); + String platform = getDatabaseType(); if ("hsql".equals(platform)) { platform = "hsqldb"; } @@ -78,4 +78,13 @@ public class BatchDatabaseInitializer implements EnvironmentAware { } } + private String getDatabaseType() { + try { + return DatabaseType.fromMetaData(this.dataSource).toString().toLowerCase(); + } + catch (MetaDataAccessException ex) { + throw new IllegalStateException("Unable to detect database type", ex); + } + } + } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java index 5224b70f506..2bc718ee686 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java @@ -16,6 +16,7 @@ package org.springframework.boot.autoconfigure.jdbc; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -86,7 +87,7 @@ public class DataSourceAutoConfiguration implements EnvironmentAware { } @PostConstruct - protected void initialize() throws Exception { + protected void initialize() { boolean initialize = this.datasourceProperties.getProperty("initialize", Boolean.class, true); if (this.dataSource == null || !initialize) { @@ -101,11 +102,7 @@ public class DataSourceAutoConfiguration implements EnvironmentAware { + ".sql,classpath*:schema.sql,classpath*:data.sql"; } - List resources = new ArrayList(); - for (String schemaLocation : StringUtils.commaDelimitedListToStringArray(schema)) { - resources.addAll(Arrays.asList(this.applicationContext - .getResources(schemaLocation))); - } + List resources = getSchemaResources(schema); boolean continueOnError = this.datasourceProperties.getProperty( "continueOnError", Boolean.class, false); @@ -125,6 +122,21 @@ public class DataSourceAutoConfiguration implements EnvironmentAware { } } + private List getSchemaResources(String schema) { + List resources = new ArrayList(); + for (String schemaLocation : StringUtils.commaDelimitedListToStringArray(schema)) { + try { + resources.addAll(Arrays.asList(this.applicationContext + .getResources(schemaLocation))); + } + catch (IOException ex) { + throw new IllegalStateException("Unable to load resource from " + + schemaLocation, ex); + } + } + return resources; + } + /** * Determines if the {@code dataSource} being used by Spring was created from * {@link EmbeddedDataSourceConfiguration}. diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoAutoConfiguration.java index 20bb5ca8b32..1daa2f64d7b 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoAutoConfiguration.java @@ -32,7 +32,7 @@ import com.mongodb.Mongo; /** * {@link EnableAutoConfiguration Auto-configuration} for Mongo. - * + * * @author Dave Syer * @author Oliver Gierke * @author Phillip Webb @@ -48,7 +48,7 @@ public class MongoAutoConfiguration { private Mongo mongo; @PreDestroy - public void close() throws UnknownHostException { + public void close() { if (this.mongo != null) { this.mongo.close(); }