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
9acc02b5
Commit
9acc02b5
authored
Jul 13, 2019
by
ayudovin
Committed by
Stephane Nicoll
Jul 17, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add metrics support for idle jdbc connections
See gh-17504
parent
808b373d
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
78 additions
and
0 deletions
+78
-0
DataSourcePoolMetrics.java
...work/boot/actuate/metrics/jdbc/DataSourcePoolMetrics.java
+2
-0
CommonsDbcp2DataSourcePoolMetadata.java
...oot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadata.java
+6
-0
DataSourcePoolMetadata.java
...gframework/boot/jdbc/metadata/DataSourcePoolMetadata.java
+11
-0
HikariDataSourcePoolMetadata.java
...work/boot/jdbc/metadata/HikariDataSourcePoolMetadata.java
+13
-0
TomcatDataSourcePoolMetadata.java
...work/boot/jdbc/metadata/TomcatDataSourcePoolMetadata.java
+6
-0
AbstractDataSourcePoolMetadataTests.java
...ot/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java
+6
-0
CommonsDbcp2DataSourcePoolMetadataTests.java
...dbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java
+11
-0
HikariDataSourcePoolMetadataTests.java
...boot/jdbc/metadata/HikariDataSourcePoolMetadataTests.java
+12
-0
TomcatDataSourcePoolMetadataTests.java
...boot/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java
+11
-0
No files found.
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/jdbc/DataSourcePoolMetrics.java
View file @
9acc02b5
...
@@ -38,6 +38,7 @@ import org.springframework.util.ConcurrentReferenceHashMap;
...
@@ -38,6 +38,7 @@ import org.springframework.util.ConcurrentReferenceHashMap;
*
*
* @author Jon Schneider
* @author Jon Schneider
* @author Phillip Webb
* @author Phillip Webb
* @author Artsiom Yudovin
* @since 2.0.0
* @since 2.0.0
*/
*/
public
class
DataSourcePoolMetrics
implements
MeterBinder
{
public
class
DataSourcePoolMetrics
implements
MeterBinder
{
...
@@ -68,6 +69,7 @@ public class DataSourcePoolMetrics implements MeterBinder {
...
@@ -68,6 +69,7 @@ public class DataSourcePoolMetrics implements MeterBinder {
bindPoolMetadata
(
registry
,
"active"
,
DataSourcePoolMetadata:
:
getActive
);
bindPoolMetadata
(
registry
,
"active"
,
DataSourcePoolMetadata:
:
getActive
);
bindPoolMetadata
(
registry
,
"max"
,
DataSourcePoolMetadata:
:
getMax
);
bindPoolMetadata
(
registry
,
"max"
,
DataSourcePoolMetadata:
:
getMax
);
bindPoolMetadata
(
registry
,
"min"
,
DataSourcePoolMetadata:
:
getMin
);
bindPoolMetadata
(
registry
,
"min"
,
DataSourcePoolMetadata:
:
getMin
);
bindPoolMetadata
(
registry
,
"idle"
,
DataSourcePoolMetadata:
:
getIdle
);
}
}
}
}
...
...
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadata.java
View file @
9acc02b5
...
@@ -24,6 +24,7 @@ import org.apache.commons.dbcp2.BasicDataSource;
...
@@ -24,6 +24,7 @@ import org.apache.commons.dbcp2.BasicDataSource;
* {@link DataSourcePoolMetadata} for an Apache Commons DBCP2 {@link DataSource}.
* {@link DataSourcePoolMetadata} for an Apache Commons DBCP2 {@link DataSource}.
*
*
* @author Stephane Nicoll
* @author Stephane Nicoll
* @author Artsiom Yudovin
* @since 2.0.0
* @since 2.0.0
*/
*/
public
class
CommonsDbcp2DataSourcePoolMetadata
extends
AbstractDataSourcePoolMetadata
<
BasicDataSource
>
{
public
class
CommonsDbcp2DataSourcePoolMetadata
extends
AbstractDataSourcePoolMetadata
<
BasicDataSource
>
{
...
@@ -57,4 +58,9 @@ public class CommonsDbcp2DataSourcePoolMetadata extends AbstractDataSourcePoolMe
...
@@ -57,4 +58,9 @@ public class CommonsDbcp2DataSourcePoolMetadata extends AbstractDataSourcePoolMe
return
getDataSource
().
getDefaultAutoCommit
();
return
getDataSource
().
getDefaultAutoCommit
();
}
}
@Override
public
Integer
getIdle
()
{
return
getDataSource
().
getNumIdle
();
}
}
}
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/DataSourcePoolMetadata.java
View file @
9acc02b5
...
@@ -23,6 +23,7 @@ import javax.sql.DataSource;
...
@@ -23,6 +23,7 @@ import javax.sql.DataSource;
* {@link DataSource} implementations.
* {@link DataSource} implementations.
*
*
* @author Stephane Nicoll
* @author Stephane Nicoll
* @author Artsiom Yudovin
* @since 2.0.0
* @since 2.0.0
*/
*/
public
interface
DataSourcePoolMetadata
{
public
interface
DataSourcePoolMetadata
{
...
@@ -49,6 +50,16 @@ public interface DataSourcePoolMetadata {
...
@@ -49,6 +50,16 @@ public interface DataSourcePoolMetadata {
*/
*/
Integer
getActive
();
Integer
getActive
();
/**
* Return the number of established but idle connections. Can also return {@code null}
* if that information is not available.
* @return the number of established but idle connections or {@code null}
* @since 2.2.0
*/
default
Integer
getIdle
()
{
return
null
;
}
/**
/**
* Return the maximum number of active connections that can be allocated at the same
* Return the maximum number of active connections that can be allocated at the same
* time or {@code -1} if there is no limit. Can also return {@code null} if that
* time or {@code -1} if there is no limit. Can also return {@code null} if that
...
...
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/HikariDataSourcePoolMetadata.java
View file @
9acc02b5
...
@@ -16,6 +16,8 @@
...
@@ -16,6 +16,8 @@
package
org
.
springframework
.
boot
.
jdbc
.
metadata
;
package
org
.
springframework
.
boot
.
jdbc
.
metadata
;
import
java.util.Objects
;
import
javax.sql.DataSource
;
import
javax.sql.DataSource
;
import
com.zaxxer.hikari.HikariDataSource
;
import
com.zaxxer.hikari.HikariDataSource
;
...
@@ -27,6 +29,7 @@ import org.springframework.beans.DirectFieldAccessor;
...
@@ -27,6 +29,7 @@ import org.springframework.beans.DirectFieldAccessor;
* {@link DataSourcePoolMetadata} for a Hikari {@link DataSource}.
* {@link DataSourcePoolMetadata} for a Hikari {@link DataSource}.
*
*
* @author Stephane Nicoll
* @author Stephane Nicoll
* @author Artsiom Yudovin
* @since 2.0.0
* @since 2.0.0
*/
*/
public
class
HikariDataSourcePoolMetadata
extends
AbstractDataSourcePoolMetadata
<
HikariDataSource
>
{
public
class
HikariDataSourcePoolMetadata
extends
AbstractDataSourcePoolMetadata
<
HikariDataSource
>
{
...
@@ -45,6 +48,16 @@ public class HikariDataSourcePoolMetadata extends AbstractDataSourcePoolMetadata
...
@@ -45,6 +48,16 @@ public class HikariDataSourcePoolMetadata extends AbstractDataSourcePoolMetadata
}
}
}
}
@Override
public
Integer
getIdle
()
{
HikariPool
pool
=
getHikariPool
();
if
(
Objects
.
nonNull
(
pool
))
{
return
pool
.
getIdleConnections
();
}
return
null
;
}
private
HikariPool
getHikariPool
()
{
private
HikariPool
getHikariPool
()
{
return
(
HikariPool
)
new
DirectFieldAccessor
(
getDataSource
()).
getPropertyValue
(
"pool"
);
return
(
HikariPool
)
new
DirectFieldAccessor
(
getDataSource
()).
getPropertyValue
(
"pool"
);
}
}
...
...
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/metadata/TomcatDataSourcePoolMetadata.java
View file @
9acc02b5
...
@@ -23,6 +23,7 @@ import org.apache.tomcat.jdbc.pool.DataSource;
...
@@ -23,6 +23,7 @@ import org.apache.tomcat.jdbc.pool.DataSource;
* {@link DataSourcePoolMetadata} for a Tomcat DataSource.
* {@link DataSourcePoolMetadata} for a Tomcat DataSource.
*
*
* @author Stephane Nicoll
* @author Stephane Nicoll
* @author Artsiom Yudovin
* @since 2.0.0
* @since 2.0.0
*/
*/
public
class
TomcatDataSourcePoolMetadata
extends
AbstractDataSourcePoolMetadata
<
DataSource
>
{
public
class
TomcatDataSourcePoolMetadata
extends
AbstractDataSourcePoolMetadata
<
DataSource
>
{
...
@@ -57,4 +58,9 @@ public class TomcatDataSourcePoolMetadata extends AbstractDataSourcePoolMetadata
...
@@ -57,4 +58,9 @@ public class TomcatDataSourcePoolMetadata extends AbstractDataSourcePoolMetadata
return
getDataSource
().
isDefaultAutoCommit
();
return
getDataSource
().
isDefaultAutoCommit
();
}
}
@Override
public
Integer
getIdle
()
{
return
getDataSource
().
getNumIdle
();
}
}
}
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java
View file @
9acc02b5
...
@@ -29,6 +29,7 @@ import static org.assertj.core.api.Assertions.assertThat;
...
@@ -29,6 +29,7 @@ import static org.assertj.core.api.Assertions.assertThat;
*
*
* @param <D> the data source pool metadata type
* @param <D> the data source pool metadata type
* @author Stephane Nicoll
* @author Stephane Nicoll
* @author Artsiom Yudovin
*/
*/
abstract
class
AbstractDataSourcePoolMetadataTests
<
D
extends
AbstractDataSourcePoolMetadata
<?>>
{
abstract
class
AbstractDataSourcePoolMetadataTests
<
D
extends
AbstractDataSourcePoolMetadata
<?>>
{
...
@@ -67,6 +68,11 @@ abstract class AbstractDataSourcePoolMetadataTests<D extends AbstractDataSourceP
...
@@ -67,6 +68,11 @@ abstract class AbstractDataSourcePoolMetadataTests<D extends AbstractDataSourceP
});
});
}
}
@Test
void
getIdle
()
{
assertThat
(
getDataSourceMetadata
().
getIdle
()).
isEqualTo
(
Integer
.
valueOf
(
1
));
}
@Test
@Test
void
getPoolSizeTwoConnections
()
{
void
getPoolSizeTwoConnections
()
{
final
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
getDataSourceMetadata
().
getDataSource
());
final
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
getDataSourceMetadata
().
getDataSource
());
...
...
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java
View file @
9acc02b5
...
@@ -19,6 +19,9 @@ package org.springframework.boot.jdbc.metadata;
...
@@ -19,6 +19,9 @@ package org.springframework.boot.jdbc.metadata;
import
org.apache.commons.dbcp2.BasicDataSource
;
import
org.apache.commons.dbcp2.BasicDataSource
;
import
org.junit.jupiter.api.Test
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.jdbc.core.ConnectionCallback
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
/**
...
@@ -83,6 +86,9 @@ class CommonsDbcp2DataSourcePoolMetadataTests
...
@@ -83,6 +86,9 @@ class CommonsDbcp2DataSourcePoolMetadataTests
BasicDataSource
dataSource
=
createDataSource
();
BasicDataSource
dataSource
=
createDataSource
();
dataSource
.
setMinIdle
(
minSize
);
dataSource
.
setMinIdle
(
minSize
);
dataSource
.
setMaxTotal
(
maxSize
);
dataSource
.
setMaxTotal
(
maxSize
);
this
.
initPool
(
dataSource
);
return
new
CommonsDbcp2DataSourcePoolMetadata
(
dataSource
);
return
new
CommonsDbcp2DataSourcePoolMetadata
(
dataSource
);
}
}
...
@@ -90,4 +96,9 @@ class CommonsDbcp2DataSourcePoolMetadataTests
...
@@ -90,4 +96,9 @@ class CommonsDbcp2DataSourcePoolMetadataTests
return
initializeBuilder
().
type
(
BasicDataSource
.
class
).
build
();
return
initializeBuilder
().
type
(
BasicDataSource
.
class
).
build
();
}
}
private
void
initPool
(
BasicDataSource
dataSource
)
{
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
dataSource
);
jdbcTemplate
.
execute
((
ConnectionCallback
<
Void
>)
(
connection
)
->
null
);
}
}
}
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/HikariDataSourcePoolMetadataTests.java
View file @
9acc02b5
...
@@ -18,12 +18,16 @@ package org.springframework.boot.jdbc.metadata;
...
@@ -18,12 +18,16 @@ package org.springframework.boot.jdbc.metadata;
import
com.zaxxer.hikari.HikariDataSource
;
import
com.zaxxer.hikari.HikariDataSource
;
import
org.springframework.jdbc.core.ConnectionCallback
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
/**
* Tests for {@link HikariDataSourcePoolMetadata}.
* Tests for {@link HikariDataSourcePoolMetadata}.
*
*
* @author Stephane Nicoll
* @author Stephane Nicoll
* @author Artsiom Yudovin
*/
*/
public
class
HikariDataSourcePoolMetadataTests
public
class
HikariDataSourcePoolMetadataTests
extends
AbstractDataSourcePoolMetadataTests
<
HikariDataSourcePoolMetadata
>
{
extends
AbstractDataSourcePoolMetadataTests
<
HikariDataSourcePoolMetadata
>
{
...
@@ -54,7 +58,15 @@ public class HikariDataSourcePoolMetadataTests
...
@@ -54,7 +58,15 @@ public class HikariDataSourcePoolMetadataTests
HikariDataSource
dataSource
=
initializeBuilder
().
type
(
HikariDataSource
.
class
).
build
();
HikariDataSource
dataSource
=
initializeBuilder
().
type
(
HikariDataSource
.
class
).
build
();
dataSource
.
setMinimumIdle
(
minSize
);
dataSource
.
setMinimumIdle
(
minSize
);
dataSource
.
setMaximumPoolSize
(
maxSize
);
dataSource
.
setMaximumPoolSize
(
maxSize
);
this
.
initPool
(
dataSource
);
return
dataSource
;
return
dataSource
;
}
}
private
void
initPool
(
HikariDataSource
dataSource
)
{
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
dataSource
);
jdbcTemplate
.
execute
((
ConnectionCallback
<
Void
>)
(
connection
)
->
null
);
}
}
}
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java
View file @
9acc02b5
...
@@ -18,6 +18,9 @@ package org.springframework.boot.jdbc.metadata;
...
@@ -18,6 +18,9 @@ package org.springframework.boot.jdbc.metadata;
import
org.apache.tomcat.jdbc.pool.DataSource
;
import
org.apache.tomcat.jdbc.pool.DataSource
;
import
org.springframework.jdbc.core.ConnectionCallback
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
/**
...
@@ -58,7 +61,15 @@ public class TomcatDataSourcePoolMetadataTests
...
@@ -58,7 +61,15 @@ public class TomcatDataSourcePoolMetadataTests
// Avoid warnings
// Avoid warnings
dataSource
.
setInitialSize
(
minSize
);
dataSource
.
setInitialSize
(
minSize
);
dataSource
.
setMaxIdle
(
maxSize
);
dataSource
.
setMaxIdle
(
maxSize
);
this
.
initPool
(
dataSource
);
return
dataSource
;
return
dataSource
;
}
}
private
void
initPool
(
DataSource
dataSource
)
{
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
dataSource
);
jdbcTemplate
.
execute
((
ConnectionCallback
<
Void
>)
(
connection
)
->
null
);
}
}
}
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