From d54aab233859886ea987adcd733a200710a09c95 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Wed, 19 Aug 2015 22:22:11 +0200 Subject: [PATCH] Log connection URL for embedded databases Prior to this commit, EmbeddedDatabaseFactory logged the name of an embedded database just before it was created; however, the name alone is not sufficient for connecting to the database via external tools such as the H2 Web Console. This commit updates EmbeddedDatabaseFactory to make it easier to connect to embedded databases via external tools by logging the complete connection URL for an embedded database as it's being created. In addition, EmbeddedDatabaseFactory now logs when an embedded database is being shut down. Issue: SPR-13370 --- .../embedded/EmbeddedDatabaseFactory.java | 31 +++++++++++++++---- .../src/test/resources/log4j.properties | 12 +++++-- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactory.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactory.java index 2dcbc0a77f2..baf30e4052c 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactory.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactory.java @@ -21,12 +21,12 @@ import java.sql.Connection; import java.sql.SQLException; import java.util.UUID; import java.util.logging.Logger; - import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.jdbc.datasource.SimpleDriverDataSource; import org.springframework.jdbc.datasource.init.DatabasePopulator; import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils; import org.springframework.util.Assert; @@ -63,7 +63,7 @@ import org.springframework.util.Assert; public class EmbeddedDatabaseFactory { /** - * Default name for an embedded database: "testdb". + * Default name for an embedded database: {@value} */ public static final String DEFAULT_DATABASE_NAME = "testdb"; @@ -171,10 +171,7 @@ public class EmbeddedDatabaseFactory { setDatabaseName(UUID.randomUUID().toString()); } - // Create the embedded database source first - if (logger.isInfoEnabled()) { - logger.info("Creating embedded database '" + this.databaseName + "'"); - } + // Create the embedded database first if (this.databaseConfigurer == null) { this.databaseConfigurer = EmbeddedDatabaseConfigurerFactory.getConfigurer(EmbeddedDatabaseType.HSQL); } @@ -182,6 +179,17 @@ public class EmbeddedDatabaseFactory { this.dataSourceFactory.getConnectionProperties(), this.databaseName); this.dataSource = this.dataSourceFactory.getDataSource(); + if (logger.isInfoEnabled()) { + if (this.dataSource instanceof SimpleDriverDataSource) { + SimpleDriverDataSource simpleDriverDataSource = (SimpleDriverDataSource) this.dataSource; + logger.info(String.format("Starting embedded database: url='%s', username='%s'", + simpleDriverDataSource.getUrl(), simpleDriverDataSource.getUsername())); + } + else { + logger.info(String.format("Starting embedded database '%s'", this.databaseName)); + } + } + // Now populate the database if (this.databasePopulator != null) { try { @@ -203,6 +211,17 @@ public class EmbeddedDatabaseFactory { */ protected void shutdownDatabase() { if (this.dataSource != null) { + + if (logger.isInfoEnabled()) { + if (this.dataSource instanceof SimpleDriverDataSource) { + logger.info(String.format("Shutting down embedded database: url='%s'", + ((SimpleDriverDataSource) this.dataSource).getUrl())); + } + else { + logger.info(String.format("Shutting down embedded database '%s'", this.databaseName)); + } + } + this.databaseConfigurer.shutdown(this.dataSource, this.databaseName); this.dataSource = null; } diff --git a/spring-jdbc/src/test/resources/log4j.properties b/spring-jdbc/src/test/resources/log4j.properties index 2cfb3bbec93..5d1ef552e50 100644 --- a/spring-jdbc/src/test/resources/log4j.properties +++ b/spring-jdbc/src/test/resources/log4j.properties @@ -1,10 +1,16 @@ log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%c] - %m%n +log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%-5p] [%c] - %m%n + +log4j.appender.file=org.apache.log4j.FileAppender +log4j.appender.file.file=bin/spring-jdbc.log +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%c] - %m%n + +log4j.rootCategory=ERROR, console, file -log4j.rootCategory=WARN, console log4j.logger.org.springframework.beans=WARN log4j.logger.org.springframework.binding=DEBUG #log4j.logger.org.springframework.jdbc=TRACE - +#log4j.logger.org.springframework.jdbc.datasource.embedded=INFO