This commit is contained in:
Phillip Webb
2018-02-28 10:42:47 -08:00
parent 67998e983f
commit 7bc535e4fa
13 changed files with 111 additions and 129 deletions

View File

@@ -64,8 +64,8 @@ class DataSourceJmxConfiguration {
public void validateMBeans() {
HikariDataSource hikariDataSource = unwrapHikariDataSource();
if (hikariDataSource != null && hikariDataSource.isRegisterMbeans()) {
this.mBeanExporter.ifUnique((exporter) ->
exporter.addExcludedBean("dataSource"));
this.mBeanExporter
.ifUnique((exporter) -> exporter.addExcludedBean("dataSource"));
}
}

View File

@@ -218,12 +218,10 @@ public class EmbeddedLdapAutoConfiguration {
AnnotatedTypeMetadata metadata) {
Builder message = ConditionMessage.forCondition("Embedded LDAP");
Environment environment = context.getEnvironment();
if (environment != null
&& !Binder.get(environment)
.bind("spring.ldap.embedded.base-dn", STRING_LIST)
.orElseGet(Collections::emptyList).isEmpty()) {
return ConditionOutcome
.match(message.because("Found base-dn property"));
if (environment != null && !Binder.get(environment)
.bind("spring.ldap.embedded.base-dn", STRING_LIST)
.orElseGet(Collections::emptyList).isEmpty()) {
return ConditionOutcome.match(message.because("Found base-dn property"));
}
return ConditionOutcome.noMatch(message.because("No base-dn property found"));
}

View File

@@ -75,8 +75,8 @@ public class ConditionEvaluationReportLoggingListener
}
}
else if (event instanceof ApplicationFailedEvent
&& ((ApplicationFailedEvent) event)
.getApplicationContext() == initializerApplicationContext) {
&& ((ApplicationFailedEvent) event)
.getApplicationContext() == initializerApplicationContext) {
logAutoConfigurationReport(true);
}
}

View File

@@ -49,24 +49,26 @@ import static org.assertj.core.api.Assertions.assertThat;
public class DataSourceJmxConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withPropertyValues("spring.datasource.url="
+ "jdbc:hsqldb:mem:test-" + UUID.randomUUID())
.withPropertyValues("spring.datasource.url=" + "jdbc:hsqldb:mem:test-"
+ UUID.randomUUID())
.withConfiguration(AutoConfigurations.of(JmxAutoConfiguration.class,
DataSourceAutoConfiguration.class));
@Test
public void hikariAutoConfiguredCanUseRegisterMBeans() {
String poolName = UUID.randomUUID().toString();
this.contextRunner.withPropertyValues(
"spring.datasource.type=" + HikariDataSource.class.getName(),
"spring.datasource.name=" + poolName,
"spring.datasource.hikari.register-mbeans=true").run((context) -> {
assertThat(context).hasSingleBean(HikariDataSource.class);
assertThat(context.getBean(HikariDataSource.class).isRegisterMbeans())
.isTrue();
MBeanServer mBeanServer = context.getBean(MBeanServer.class);
validateHikariMBeansRegistration(mBeanServer, poolName, true);
});
this.contextRunner
.withPropertyValues(
"spring.datasource.type=" + HikariDataSource.class.getName(),
"spring.datasource.name=" + poolName,
"spring.datasource.hikari.register-mbeans=true")
.run((context) -> {
assertThat(context).hasSingleBean(HikariDataSource.class);
assertThat(context.getBean(HikariDataSource.class).isRegisterMbeans())
.isTrue();
MBeanServer mBeanServer = context.getBean(MBeanServer.class);
validateHikariMBeansRegistration(mBeanServer, poolName, true);
});
}
@Test
@@ -75,34 +77,39 @@ public class DataSourceJmxConfigurationTests {
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
Set<ObjectInstance> existingInstances = mBeanServer
.queryMBeans(new ObjectName("com.zaxxer.hikari:type=*"), null);
this.contextRunner.withPropertyValues(
"spring.datasource.type=" + HikariDataSource.class.getName(),
"spring.datasource.hikari.register-mbeans=true").run((context) -> {
assertThat(context).hasSingleBean(HikariDataSource.class);
assertThat(context.getBean(HikariDataSource.class).isRegisterMbeans())
.isTrue();
// We can't rely on the number of MBeans so we're checking that the pool and pool
// config MBeans were registered
assertThat(mBeanServer
.queryMBeans(new ObjectName("com.zaxxer.hikari:type=*"), null).size())
.isEqualTo(existingInstances.size() + 2);
});
this.contextRunner
.withPropertyValues(
"spring.datasource.type=" + HikariDataSource.class.getName(),
"spring.datasource.hikari.register-mbeans=true")
.run((context) -> {
assertThat(context).hasSingleBean(HikariDataSource.class);
assertThat(context.getBean(HikariDataSource.class).isRegisterMbeans())
.isTrue();
// We can't rely on the number of MBeans so we're checking that the
// pool and pool
// config MBeans were registered
assertThat(mBeanServer
.queryMBeans(new ObjectName("com.zaxxer.hikari:type=*"), null)
.size()).isEqualTo(existingInstances.size() + 2);
});
}
@Test
public void hikariAutoConfiguredUsesJmsFlag() {
String poolName = UUID.randomUUID().toString();
this.contextRunner.withPropertyValues(
"spring.datasource.type=" + HikariDataSource.class.getName(),
"spring.jmx.enabled=false", "spring.datasource.name=" + poolName,
"spring.datasource.hikari.register-mbeans=true").run((context) -> {
assertThat(context).hasSingleBean(HikariDataSource.class);
assertThat(context.getBean(HikariDataSource.class).isRegisterMbeans())
.isTrue();
// Hikari can still register mBeans
validateHikariMBeansRegistration(ManagementFactory.getPlatformMBeanServer(),
poolName, true);
});
this.contextRunner
.withPropertyValues(
"spring.datasource.type=" + HikariDataSource.class.getName(),
"spring.jmx.enabled=false", "spring.datasource.name=" + poolName,
"spring.datasource.hikari.register-mbeans=true")
.run((context) -> {
assertThat(context).hasSingleBean(HikariDataSource.class);
assertThat(context.getBean(HikariDataSource.class).isRegisterMbeans())
.isTrue();
// Hikari can still register mBeans
validateHikariMBeansRegistration(
ManagementFactory.getPlatformMBeanServer(), poolName, true);
});
}
@Test
@@ -115,8 +122,9 @@ public class DataSourceJmxConfigurationTests {
"spring.datasource.hikari.register-mbeans=true")
.run((context) -> {
assertThat(context).hasSingleBean(javax.sql.DataSource.class);
HikariDataSource hikariDataSource = context.getBean(
javax.sql.DataSource.class).unwrap(HikariDataSource.class);
HikariDataSource hikariDataSource = context
.getBean(javax.sql.DataSource.class)
.unwrap(HikariDataSource.class);
assertThat(hikariDataSource.isRegisterMbeans()).isTrue();
MBeanServer mBeanServer = context.getBean(MBeanServer.class);
validateHikariMBeansRegistration(mBeanServer, poolName, true);
@@ -127,18 +135,19 @@ public class DataSourceJmxConfigurationTests {
String poolName, boolean expected) throws MalformedObjectNameException {
assertThat(mBeanServer.isRegistered(
new ObjectName("com.zaxxer.hikari:type=Pool (" + poolName + ")")))
.isEqualTo(expected);
.isEqualTo(expected);
assertThat(mBeanServer.isRegistered(
new ObjectName("com.zaxxer.hikari:type=PoolConfig (" + poolName + ")")))
.isEqualTo(expected);
.isEqualTo(expected);
}
@Test
public void tomcatDoesNotExposeMBeanPoolByDefault() {
this.contextRunner
.withPropertyValues("spring.datasource.type=" + DataSource.class.getName())
.run((context) ->
assertThat(context).doesNotHaveBean(ConnectionPool.class));
.withPropertyValues(
"spring.datasource.type=" + DataSource.class.getName())
.run((context) -> assertThat(context)
.doesNotHaveBean(ConnectionPool.class));
}
@Test
@@ -146,10 +155,11 @@ public class DataSourceJmxConfigurationTests {
this.contextRunner.withPropertyValues(
"spring.datasource.type=" + DataSource.class.getName(),
"spring.datasource.jmx-enabled=true").run((context) -> {
assertThat(context).hasSingleBean(ConnectionPool.class);
assertThat(context.getBean(DataSourceProxy.class).createPool().getJmxPool())
.isSameAs(context.getBean(ConnectionPool.class));
});
assertThat(context).hasSingleBean(ConnectionPool.class);
assertThat(context.getBean(DataSourceProxy.class).createPool()
.getJmxPool())
.isSameAs(context.getBean(ConnectionPool.class));
});
}
@Configuration
@@ -162,7 +172,6 @@ public class DataSourceJmxConfigurationTests {
}
private static class DataSourceBeanPostProcessor implements BeanPostProcessor {
@Override