Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
78a9ace5
Commit
78a9ace5
authored
Jun 20, 2017
by
Stephane Nicoll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Polish
parent
03b43225
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
51 additions
and
26 deletions
+51
-26
DataSourceAutoConfiguration.java
.../boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java
+0
-25
DataSourceJmxConfiguration.java
...k/boot/autoconfigure/jdbc/DataSourceJmxConfiguration.java
+32
-0
DataSourceJmxConfigurationTests.java
...t/autoconfigure/jdbc/DataSourceJmxConfigurationTests.java
+19
-1
No files found.
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java
View file @
78a9ace5
...
@@ -16,14 +16,11 @@
...
@@ -16,14 +16,11 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
import
java.sql.SQLException
;
import
javax.sql.DataSource
;
import
javax.sql.DataSource
;
import
javax.sql.XADataSource
;
import
javax.sql.XADataSource
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
import
org.apache.commons.logging.LogFactory
;
import
org.apache.tomcat.jdbc.pool.DataSourceProxy
;
import
org.springframework.beans.factory.BeanFactoryUtils
;
import
org.springframework.beans.factory.BeanFactoryUtils
;
import
org.springframework.beans.factory.NoSuchBeanDefinitionException
;
import
org.springframework.beans.factory.NoSuchBeanDefinitionException
;
...
@@ -112,28 +109,6 @@ public class DataSourceAutoConfiguration {
...
@@ -112,28 +109,6 @@ public class DataSourceAutoConfiguration {
}
}
@Configuration
@ConditionalOnProperty
(
prefix
=
"spring.datasource"
,
name
=
"jmx-enabled"
)
@ConditionalOnClass
(
name
=
"org.apache.tomcat.jdbc.pool.DataSourceProxy"
)
@Conditional
(
DataSourceAutoConfiguration
.
DataSourceAvailableCondition
.
class
)
@ConditionalOnMissingBean
(
name
=
"dataSourceMBean"
)
protected
static
class
TomcatDataSourceJmxConfiguration
{
@Bean
public
Object
dataSourceMBean
(
DataSource
dataSource
)
{
if
(
dataSource
instanceof
DataSourceProxy
)
{
try
{
return
((
DataSourceProxy
)
dataSource
).
createPool
().
getJmxPool
();
}
catch
(
SQLException
ex
)
{
logger
.
warn
(
"Cannot expose DataSource to JMX (could not connect)"
);
}
}
return
null
;
}
}
/**
/**
* {@link AnyNestedCondition} that checks that either {@code spring.datasource.type}
* {@link AnyNestedCondition} that checks that either {@code spring.datasource.type}
* is set or {@link PooledDataSourceAvailableCondition} applies.
* is set or {@link PooledDataSourceAvailableCondition} applies.
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceJmxConfiguration.java
View file @
78a9ace5
...
@@ -16,14 +16,22 @@
...
@@ -16,14 +16,22 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
import
java.sql.SQLException
;
import
javax.annotation.PostConstruct
;
import
javax.annotation.PostConstruct
;
import
javax.sql.DataSource
;
import
com.zaxxer.hikari.HikariDataSource
;
import
com.zaxxer.hikari.HikariDataSource
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
import
org.apache.tomcat.jdbc.pool.DataSourceProxy
;
import
org.springframework.beans.factory.ObjectProvider
;
import
org.springframework.beans.factory.ObjectProvider
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.jmx.export.MBeanExporter
;
import
org.springframework.jmx.export.MBeanExporter
;
...
@@ -36,6 +44,8 @@ import org.springframework.jmx.export.MBeanExporter;
...
@@ -36,6 +44,8 @@ import org.springframework.jmx.export.MBeanExporter;
@ConditionalOnProperty
(
prefix
=
"spring.jmx"
,
name
=
"enabled"
,
havingValue
=
"true"
,
matchIfMissing
=
true
)
@ConditionalOnProperty
(
prefix
=
"spring.jmx"
,
name
=
"enabled"
,
havingValue
=
"true"
,
matchIfMissing
=
true
)
class
DataSourceJmxConfiguration
{
class
DataSourceJmxConfiguration
{
private
static
final
Log
logger
=
LogFactory
.
getLog
(
DataSourceJmxConfiguration
.
class
);
@Configuration
@Configuration
@ConditionalOnClass
(
HikariDataSource
.
class
)
@ConditionalOnClass
(
HikariDataSource
.
class
)
@ConditionalOnSingleCandidate
(
HikariDataSource
.
class
)
@ConditionalOnSingleCandidate
(
HikariDataSource
.
class
)
...
@@ -61,4 +71,26 @@ class DataSourceJmxConfiguration {
...
@@ -61,4 +71,26 @@ class DataSourceJmxConfiguration {
}
}
@Configuration
@ConditionalOnProperty
(
prefix
=
"spring.datasource"
,
name
=
"jmx-enabled"
)
@ConditionalOnClass
(
name
=
"org.apache.tomcat.jdbc.pool.DataSourceProxy"
)
@ConditionalOnSingleCandidate
(
DataSource
.
class
)
static
class
TomcatDataSourceJmxConfiguration
{
@Bean
@ConditionalOnMissingBean
(
name
=
"dataSourceMBean"
)
public
Object
dataSourceMBean
(
DataSource
dataSource
)
{
if
(
dataSource
instanceof
DataSourceProxy
)
{
try
{
return
((
DataSourceProxy
)
dataSource
).
createPool
().
getJmxPool
();
}
catch
(
SQLException
ex
)
{
logger
.
warn
(
"Cannot expose DataSource to JMX (could not connect)"
);
}
}
return
null
;
}
}
}
}
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceJmxConfigurationTests.java
View file @
78a9ace5
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
import
java.lang.management.ManagementFactory
;
import
java.lang.management.ManagementFactory
;
import
java.sql.SQLException
;
import
java.util.UUID
;
import
java.util.UUID
;
import
javax.management.MBeanServer
;
import
javax.management.MBeanServer
;
...
@@ -24,6 +25,9 @@ import javax.management.MalformedObjectNameException;
...
@@ -24,6 +25,9 @@ import javax.management.MalformedObjectNameException;
import
javax.management.ObjectName
;
import
javax.management.ObjectName
;
import
com.zaxxer.hikari.HikariDataSource
;
import
com.zaxxer.hikari.HikariDataSource
;
import
org.apache.tomcat.jdbc.pool.DataSource
;
import
org.apache.tomcat.jdbc.pool.DataSourceProxy
;
import
org.apache.tomcat.jdbc.pool.jmx.ConnectionPool
;
import
org.hsqldb.jdbc.JDBCDriver
;
import
org.hsqldb.jdbc.JDBCDriver
;
import
org.junit.After
;
import
org.junit.After
;
import
org.junit.Rule
;
import
org.junit.Rule
;
...
@@ -93,7 +97,6 @@ public class DataSourceJmxConfigurationTests {
...
@@ -93,7 +97,6 @@ public class DataSourceJmxConfigurationTests {
// Hikari can still register mBeans
// Hikari can still register mBeans
validateHikariMBeansRegistration
(
ManagementFactory
.
getPlatformMBeanServer
(),
validateHikariMBeansRegistration
(
ManagementFactory
.
getPlatformMBeanServer
(),
poolName
,
true
);
poolName
,
true
);
}
}
private
void
validateHikariMBeansRegistration
(
MBeanServer
mBeanServer
,
private
void
validateHikariMBeansRegistration
(
MBeanServer
mBeanServer
,
...
@@ -104,6 +107,21 @@ public class DataSourceJmxConfigurationTests {
...
@@ -104,6 +107,21 @@ public class DataSourceJmxConfigurationTests {
"com.zaxxer.hikari:type=PoolConfig ("
+
poolName
+
")"
))).
isEqualTo
(
expected
);
"com.zaxxer.hikari:type=PoolConfig ("
+
poolName
+
")"
))).
isEqualTo
(
expected
);
}
}
@Test
public
void
tomcatDoesNotExposeMBeanPoolByDefault
()
{
load
(
"spring.datasource.type="
+
DataSource
.
class
.
getName
());
assertThat
(
this
.
context
.
getBeansOfType
(
ConnectionPool
.
class
)).
isEmpty
();
}
@Test
public
void
tomcatAutoConfiguredCanExposeMBeanPool
()
throws
SQLException
{
load
(
"spring.datasource.type="
+
DataSource
.
class
.
getName
(),
"spring.datasource.jmx-enabled=true"
);
assertThat
(
this
.
context
.
getBeansOfType
(
ConnectionPool
.
class
)).
hasSize
(
1
);
assertThat
(
this
.
context
.
getBean
(
DataSourceProxy
.
class
).
createPool
().
getJmxPool
())
.
isSameAs
(
this
.
context
.
getBean
(
ConnectionPool
.
class
));
}
private
void
load
(
String
...
environment
)
{
private
void
load
(
String
...
environment
)
{
load
(
null
,
environment
);
load
(
null
,
environment
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment