commit
2b3ef96156
|
@ -66,11 +66,22 @@ public class H2ConsoleAutoConfiguration {
|
|||
urlMapping);
|
||||
configureH2ConsoleSettings(registration, properties.getSettings());
|
||||
if (logger.isInfoEnabled()) {
|
||||
logDataSources(dataSource, path);
|
||||
withThreadContextClassLoader(getClass().getClassLoader(), () -> logDataSources(dataSource, path));
|
||||
}
|
||||
return registration;
|
||||
}
|
||||
|
||||
private void withThreadContextClassLoader(ClassLoader classLoader, Runnable action) {
|
||||
ClassLoader previous = Thread.currentThread().getContextClassLoader();
|
||||
try {
|
||||
Thread.currentThread().setContextClassLoader(classLoader);
|
||||
action.run();
|
||||
}
|
||||
finally {
|
||||
Thread.currentThread().setContextClassLoader(previous);
|
||||
}
|
||||
}
|
||||
|
||||
private void logDataSources(ObjectProvider<DataSource> dataSource, String path) {
|
||||
List<String> urls = dataSource.orderedStream().map((available) -> {
|
||||
try (Connection connection = available.getConnection()) {
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
|
||||
package org.springframework.boot.autoconfigure.h2;
|
||||
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DatabaseMetaData;
|
||||
import java.sql.SQLException;
|
||||
|
@ -24,6 +26,8 @@ import javax.sql.DataSource;
|
|||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import org.springframework.beans.factory.BeanCreationException;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
|
@ -141,7 +145,8 @@ class H2ConsoleAutoConfigurationTests {
|
|||
@Test
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
void allDataSourceUrlsAreLoggedWhenMultipleAvailable(CapturedOutput output) {
|
||||
this.contextRunner
|
||||
ClassLoader webAppClassLoader = new URLClassLoader(new URL[0]);
|
||||
this.contextRunner.withClassLoader(webAppClassLoader)
|
||||
.withUserConfiguration(FailingDataSourceConfiguration.class, MultiDataSourceConfiguration.class)
|
||||
.withPropertyValues("spring.h2.console.enabled=true").run((context) -> assertThat(output).contains(
|
||||
"H2 console available at '/h2-console'. Databases available at 'someJdbcUrl', 'anotherJdbcUrl'"));
|
||||
|
@ -183,9 +188,20 @@ class H2ConsoleAutoConfigurationTests {
|
|||
|
||||
private DataSource mockDataSource(String url) throws SQLException {
|
||||
DataSource dataSource = mock(DataSource.class);
|
||||
given(dataSource.getConnection()).willReturn(mock(Connection.class));
|
||||
given(dataSource.getConnection().getMetaData()).willReturn(mock(DatabaseMetaData.class));
|
||||
given(dataSource.getConnection().getMetaData().getURL()).willReturn(url);
|
||||
given(dataSource.getConnection()).will(new Answer<Connection>() {
|
||||
|
||||
@Override
|
||||
public Connection answer(InvocationOnMock invocation) throws Throwable {
|
||||
assertThat(Thread.currentThread().getContextClassLoader()).isEqualTo(getClass().getClassLoader());
|
||||
Connection connection = mock(Connection.class);
|
||||
DatabaseMetaData metadata = mock(DatabaseMetaData.class);
|
||||
given(connection.getMetaData()).willReturn(metadata);
|
||||
given(metadata.getURL()).willReturn(url);
|
||||
return connection;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return dataSource;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue