diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java index 71fc2d6af74..f3283c7341d 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java @@ -80,8 +80,9 @@ public class LiquibaseEndpoint { try { DataSource dataSource = liquibase.getDataSource(); JdbcConnection connection = new JdbcConnection(dataSource.getConnection()); + Database database = null; try { - Database database = factory.findCorrectDatabaseImplementation(connection); + database = factory.findCorrectDatabaseImplementation(connection); String defaultSchema = liquibase.getDefaultSchema(); if (StringUtils.hasText(defaultSchema)) { database.setDefaultSchemaName(defaultSchema); @@ -91,7 +92,12 @@ public class LiquibaseEndpoint { .map(ChangeSet::new).collect(Collectors.toList())); } finally { - connection.close(); + if (database != null) { + database.close(); + } + else { + connection.close(); + } } } catch (Exception ex) { diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java index 014e95f7f54..313ed42c16b 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java @@ -16,6 +16,11 @@ package org.springframework.boot.actuate.liquibase; +import java.sql.Connection; +import java.sql.SQLException; + +import javax.sql.DataSource; + import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; @@ -62,6 +67,23 @@ public class LiquibaseEndpointTests { .hasSize(1)); } + @Test + public void connectionAutoCommitPropertyIsReset() { + this.contextRunner.withUserConfiguration(Config.class).run((context) -> { + DataSource dataSource = context.getBean(DataSource.class); + assertThat(getAutoCommit(dataSource)).isTrue(); + context.getBean(LiquibaseEndpoint.class).liquibaseBeans(); + assertThat(getAutoCommit(dataSource)).isTrue(); + }); + } + + private boolean getAutoCommit(DataSource dataSource) throws SQLException { + try (Connection connection = dataSource.getConnection()) { + System.out.println(connection); + return connection.getAutoCommit(); + } + } + @Configuration public static class Config {