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
adbded33
Commit
adbded33
authored
Sep 01, 2014
by
Phillip Webb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Apply eclipse formatting rules to
3dc932db
parent
53c4859a
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
174 additions
and
149 deletions
+174
-149
MetricDataSourceAutoConfiguration.java
...uate/autoconfigure/MetricDataSourceAutoConfiguration.java
+2
-2
DataSourcePublicMetrics.java
...mework/boot/actuate/endpoint/DataSourcePublicMetrics.java
+23
-16
MetricDataSourceAutoConfigurationTests.java
...autoconfigure/MetricDataSourceAutoConfigurationTests.java
+27
-27
AbstractDataSourceMetadata.java
...k/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java
+3
-2
CommonsDbcpDataSourceMetadata.java
...oot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java
+4
-3
CompositeDataSourceMetadataProvider.java
...toconfigure/jdbc/CompositeDataSourceMetadataProvider.java
+5
-3
DataSourceMetadata.java
...framework/boot/autoconfigure/jdbc/DataSourceMetadata.java
+16
-22
DataSourceMetadataProvider.java
...k/boot/autoconfigure/jdbc/DataSourceMetadataProvider.java
+2
-3
DataSourceMetadataProvidersConfiguration.java
...figure/jdbc/DataSourceMetadataProvidersConfiguration.java
+11
-6
HikariDataSourceMetadata.java
...ork/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java
+12
-12
TomcatDataSourceMetadata.java
...ork/boot/autoconfigure/jdbc/TomcatDataSourceMetadata.java
+2
-2
AbstractDataSourceMetadataTests.java
...t/autoconfigure/jdbc/AbstractDataSourceMetadataTests.java
+22
-17
CommonsDbcpDataSourceMetadataTests.java
...utoconfigure/jdbc/CommonsDbcpDataSourceMetadataTests.java
+13
-8
CompositeDataSourceMetadataProviderTests.java
...figure/jdbc/CompositeDataSourceMetadataProviderTests.java
+17
-17
HikariDataSourceMetadataTests.java
...oot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java
+9
-5
TomcatDataSourceMetadataTests.java
...oot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java
+6
-4
No files found.
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfiguration.java
View file @
adbded33
...
@@ -30,8 +30,8 @@ import org.springframework.context.annotation.Bean;
...
@@ -30,8 +30,8 @@ import org.springframework.context.annotation.Bean;
import
org.springframework.context.annotation.Import
;
import
org.springframework.context.annotation.Import
;
/**
/**
* {@link EnableAutoConfiguration Auto-configuration} that provides
* {@link EnableAutoConfiguration Auto-configuration} that provides
metrics on dataSource
*
metrics on dataSource
usage.
* usage.
*
*
* @author Stephane Nicoll
* @author Stephane Nicoll
* @since 1.2.0
* @since 1.2.0
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/DataSourcePublicMetrics.java
View file @
adbded33
...
@@ -20,6 +20,7 @@ import java.util.Collection;
...
@@ -20,6 +20,7 @@ import java.util.Collection;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.LinkedHashSet
;
import
java.util.LinkedHashSet
;
import
java.util.Map
;
import
java.util.Map
;
import
javax.annotation.PostConstruct
;
import
javax.annotation.PostConstruct
;
import
javax.sql.DataSource
;
import
javax.sql.DataSource
;
...
@@ -33,8 +34,7 @@ import org.springframework.context.ApplicationContext;
...
@@ -33,8 +34,7 @@ import org.springframework.context.ApplicationContext;
import
org.springframework.context.annotation.Primary
;
import
org.springframework.context.annotation.Primary
;
/**
/**
* A {@link PublicMetrics} implementation that provides data source usage
* A {@link PublicMetrics} implementation that provides data source usage statistics.
* statistics.
*
*
* @author Stephane Nicoll
* @author Stephane Nicoll
* @since 1.2.0
* @since 1.2.0
...
@@ -49,21 +49,23 @@ public class DataSourcePublicMetrics implements PublicMetrics {
...
@@ -49,21 +49,23 @@ public class DataSourcePublicMetrics implements PublicMetrics {
@Autowired
@Autowired
private
Collection
<
DataSourceMetadataProvider
>
dataSourceMetadataProviders
;
private
Collection
<
DataSourceMetadataProvider
>
dataSourceMetadataProviders
;
private
final
Map
<
String
,
DataSourceMetadata
>
dataSourceMetadataByPrefix
private
final
Map
<
String
,
DataSourceMetadata
>
dataSourceMetadataByPrefix
=
new
HashMap
<
String
,
DataSourceMetadata
>();
=
new
HashMap
<
String
,
DataSourceMetadata
>();
@PostConstruct
@PostConstruct
public
void
initialize
()
{
public
void
initialize
()
{
Map
<
String
,
DataSource
>
dataSources
=
this
.
applicationContext
.
getBeansOfType
(
DataSource
.
class
);
Map
<
String
,
DataSource
>
dataSources
=
this
.
applicationContext
.
getBeansOfType
(
DataSource
.
class
);
DataSource
primaryDataSource
=
getPrimaryDataSource
();
DataSource
primaryDataSource
=
getPrimaryDataSource
();
DataSourceMetadataProvider
provider
=
new
CompositeDataSourceMetadataProvider
(
DataSourceMetadataProvider
provider
=
new
CompositeDataSourceMetadataProvider
(
this
.
dataSourceMetadataProviders
);
this
.
dataSourceMetadataProviders
);
for
(
Map
.
Entry
<
String
,
DataSource
>
entry
:
dataSources
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
DataSource
>
entry
:
dataSources
.
entrySet
())
{
String
prefix
=
createPrefix
(
entry
.
getKey
(),
entry
.
getValue
(),
entry
.
getValue
().
equals
(
primaryDataSource
));
String
prefix
=
createPrefix
(
entry
.
getKey
(),
entry
.
getValue
(),
entry
DataSourceMetadata
dataSourceMetadata
=
provider
.
getDataSourceMetadata
(
entry
.
getValue
());
.
getValue
().
equals
(
primaryDataSource
));
DataSourceMetadata
dataSourceMetadata
=
provider
.
getDataSourceMetadata
(
entry
.
getValue
());
if
(
dataSourceMetadata
!=
null
)
{
if
(
dataSourceMetadata
!=
null
)
{
dataSourceMetadataByPrefix
.
put
(
prefix
,
dataSourceMetadata
);
this
.
dataSourceMetadataByPrefix
.
put
(
prefix
,
dataSourceMetadata
);
}
}
}
}
}
}
...
@@ -71,7 +73,8 @@ public class DataSourcePublicMetrics implements PublicMetrics {
...
@@ -71,7 +73,8 @@ public class DataSourcePublicMetrics implements PublicMetrics {
@Override
@Override
public
Collection
<
Metric
<?>>
metrics
()
{
public
Collection
<
Metric
<?>>
metrics
()
{
Collection
<
Metric
<?>>
result
=
new
LinkedHashSet
<
Metric
<?>>();
Collection
<
Metric
<?>>
result
=
new
LinkedHashSet
<
Metric
<?>>();
for
(
Map
.
Entry
<
String
,
DataSourceMetadata
>
entry
:
dataSourceMetadataByPrefix
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
DataSourceMetadata
>
entry
:
this
.
dataSourceMetadataByPrefix
.
entrySet
())
{
String
prefix
=
entry
.
getKey
();
String
prefix
=
entry
.
getKey
();
// Make sure the prefix ends with a dot
// Make sure the prefix ends with a dot
if
(!
prefix
.
endsWith
(
"."
))
{
if
(!
prefix
.
endsWith
(
"."
))
{
...
@@ -91,19 +94,23 @@ public class DataSourcePublicMetrics implements PublicMetrics {
...
@@ -91,19 +94,23 @@ public class DataSourcePublicMetrics implements PublicMetrics {
}
}
/**
/**
* Create the prefix to use for the metrics to associate with the given {@link DataSource}.
* Create the prefix to use for the metrics to associate with the given
* {@link DataSource}.
* @param dataSourceName the name of the data source bean
* @param dataSourceName the name of the data source bean
* @param dataSource the data source to configure
* @param dataSource the data source to configure
* @param primary if this data source is the primary data source
* @param primary if this data source is the primary data source
* @return a prefix for the given data source
* @return a prefix for the given data source
*/
*/
protected
String
createPrefix
(
String
dataSourceName
,
DataSource
dataSource
,
boolean
primary
)
{
protected
String
createPrefix
(
String
dataSourceName
,
DataSource
dataSource
,
boolean
primary
)
{
StringBuilder
sb
=
new
StringBuilder
(
"datasource."
);
StringBuilder
sb
=
new
StringBuilder
(
"datasource."
);
if
(
primary
)
{
if
(
primary
)
{
sb
.
append
(
"primary"
);
sb
.
append
(
"primary"
);
}
}
else
if
(
endWithDataSource
(
dataSourceName
))
{
// Strip the data source part out of the name
else
if
(
endWithDataSource
(
dataSourceName
))
{
// Strip the data source part out of
sb
.
append
(
dataSourceName
.
substring
(
0
,
dataSourceName
.
length
()
-
DATASOURCE_SUFFIX
.
length
()));
// the name
sb
.
append
(
dataSourceName
.
substring
(
0
,
dataSourceName
.
length
()
-
DATASOURCE_SUFFIX
.
length
()));
}
}
else
{
else
{
sb
.
append
(
dataSourceName
);
sb
.
append
(
dataSourceName
);
...
@@ -131,7 +138,7 @@ public class DataSourcePublicMetrics implements PublicMetrics {
...
@@ -131,7 +138,7 @@ public class DataSourcePublicMetrics implements PublicMetrics {
*/
*/
private
DataSource
getPrimaryDataSource
()
{
private
DataSource
getPrimaryDataSource
()
{
try
{
try
{
return
applicationContext
.
getBean
(
DataSource
.
class
);
return
this
.
applicationContext
.
getBean
(
DataSource
.
class
);
}
}
catch
(
NoSuchBeanDefinitionException
e
)
{
catch
(
NoSuchBeanDefinitionException
e
)
{
return
null
;
return
null
;
...
...
spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/MetricDataSourceAutoConfigurationTests.java
View file @
adbded33
...
@@ -16,8 +16,6 @@
...
@@ -16,8 +16,6 @@
package
org
.
springframework
.
boot
.
actuate
.
autoconfigure
;
package
org
.
springframework
.
boot
.
actuate
.
autoconfigure
;
import
static
org
.
junit
.
Assert
.*;
import
java.sql.Connection
;
import
java.sql.Connection
;
import
java.sql.SQLException
;
import
java.sql.SQLException
;
import
java.util.Collection
;
import
java.util.Collection
;
...
@@ -26,11 +24,9 @@ import java.util.Map;
...
@@ -26,11 +24,9 @@ import java.util.Map;
import
javax.sql.DataSource
;
import
javax.sql.DataSource
;
import
com.zaxxer.hikari.HikariDataSource
;
import
org.apache.commons.dbcp.BasicDataSource
;
import
org.apache.commons.dbcp.BasicDataSource
;
import
org.junit.After
;
import
org.junit.After
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.springframework.boot.actuate.endpoint.DataSourcePublicMetrics
;
import
org.springframework.boot.actuate.endpoint.DataSourcePublicMetrics
;
import
org.springframework.boot.actuate.endpoint.PublicMetrics
;
import
org.springframework.boot.actuate.endpoint.PublicMetrics
;
import
org.springframework.boot.actuate.metrics.Metric
;
import
org.springframework.boot.actuate.metrics.Metric
;
...
@@ -44,8 +40,12 @@ import org.springframework.dao.DataAccessException;
...
@@ -44,8 +40,12 @@ import org.springframework.dao.DataAccessException;
import
org.springframework.jdbc.core.ConnectionCallback
;
import
org.springframework.jdbc.core.ConnectionCallback
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
com.zaxxer.hikari.HikariDataSource
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
/**
/**
*
* @author Stephane Nicoll
* @author Stephane Nicoll
*/
*/
public
class
MetricDataSourceAutoConfigurationTests
{
public
class
MetricDataSourceAutoConfigurationTests
{
...
@@ -78,24 +78,25 @@ public class MetricDataSourceAutoConfigurationTests {
...
@@ -78,24 +78,25 @@ public class MetricDataSourceAutoConfigurationTests {
load
(
MultipleDataSourcesConfig
.
class
);
load
(
MultipleDataSourcesConfig
.
class
);
PublicMetrics
bean
=
this
.
context
.
getBean
(
PublicMetrics
.
class
);
PublicMetrics
bean
=
this
.
context
.
getBean
(
PublicMetrics
.
class
);
Collection
<
Metric
<?>>
metrics
=
bean
.
metrics
();
Collection
<
Metric
<?>>
metrics
=
bean
.
metrics
();
assertMetrics
(
metrics
,
assertMetrics
(
metrics
,
"datasource.tomcat.active"
,
"datasource.tomcat.usage"
,
"datasource.tomcat.active"
,
"datasource.tomcat.usage"
,
"datasource.commonsDbcp.active"
,
"datasource.commonsDbcp.usage"
);
"datasource.commonsDbcp.active"
,
"datasource.commonsDbcp.usage"
);
// Hikari won't work unless a first connection has been retrieved
// Hikari won't work unless a first connection has been retrieved
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
context
.
getBean
(
"hikariDS"
,
DataSource
.
class
));
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
this
.
context
.
getBean
(
"hikariDS"
,
DataSource
.
class
));
jdbcTemplate
.
execute
(
new
ConnectionCallback
<
Void
>()
{
jdbcTemplate
.
execute
(
new
ConnectionCallback
<
Void
>()
{
@Override
@Override
public
Void
doInConnection
(
Connection
connection
)
throws
SQLException
,
DataAccessException
{
public
Void
doInConnection
(
Connection
connection
)
throws
SQLException
,
DataAccessException
{
return
null
;
return
null
;
}
}
});
});
Collection
<
Metric
<?>>
anotherMetrics
=
bean
.
metrics
();
Collection
<
Metric
<?>>
anotherMetrics
=
bean
.
metrics
();
assertMetrics
(
anotherMetrics
,
assertMetrics
(
anotherMetrics
,
"datasource.tomcat.active"
,
"datasource.tomcat.
active"
,
"datasource.tomcat.usag
e"
,
"datasource.tomcat.
usage"
,
"datasource.hikariDS.activ
e"
,
"datasource.hikariDS.
active"
,
"datasource.hikariDS.usag
e"
,
"datasource.hikariDS.
usage"
,
"datasource.commonsDbcp.activ
e"
,
"datasource.commonsDbcp.
active"
,
"datasource.commonsDbcp.
usage"
);
"datasource.commonsDbcp.usage"
);
}
}
@Test
@Test
...
@@ -103,19 +104,18 @@ public class MetricDataSourceAutoConfigurationTests {
...
@@ -103,19 +104,18 @@ public class MetricDataSourceAutoConfigurationTests {
load
(
MultipleDataSourcesWithPrimaryConfig
.
class
);
load
(
MultipleDataSourcesWithPrimaryConfig
.
class
);
PublicMetrics
bean
=
this
.
context
.
getBean
(
PublicMetrics
.
class
);
PublicMetrics
bean
=
this
.
context
.
getBean
(
PublicMetrics
.
class
);
Collection
<
Metric
<?>>
metrics
=
bean
.
metrics
();
Collection
<
Metric
<?>>
metrics
=
bean
.
metrics
();
assertMetrics
(
metrics
,
assertMetrics
(
metrics
,
"datasource.primary.active"
,
"datasource.primary.usage"
,
"datasource.primary.active"
,
"datasource.primary.usage"
,
"datasource.commonsDbcp.active"
,
"datasource.commonsDbcp.usage"
);
"datasource.commonsDbcp.active"
,
"datasource.commonsDbcp.usage"
);
}
}
@Test
@Test
public
void
customPrefix
()
{
public
void
customPrefix
()
{
load
(
MultipleDataSourcesWithPrimaryConfig
.
class
,
CustomDataSourcePublicMetrics
.
class
);
load
(
MultipleDataSourcesWithPrimaryConfig
.
class
,
CustomDataSourcePublicMetrics
.
class
);
PublicMetrics
bean
=
this
.
context
.
getBean
(
PublicMetrics
.
class
);
PublicMetrics
bean
=
this
.
context
.
getBean
(
PublicMetrics
.
class
);
Collection
<
Metric
<?>>
metrics
=
bean
.
metrics
();
Collection
<
Metric
<?>>
metrics
=
bean
.
metrics
();
assertMetrics
(
metrics
,
assertMetrics
(
metrics
,
"ds.first.active"
,
"ds.first.usage"
,
"ds.second.active"
,
"ds.first.active"
,
"ds.first.usage"
,
"ds.second.usage"
);
"ds.second.active"
,
"ds.second.usage"
);
}
}
...
@@ -138,13 +138,13 @@ public class MetricDataSourceAutoConfigurationTests {
...
@@ -138,13 +138,13 @@ public class MetricDataSourceAutoConfigurationTests {
this
.
context
.
refresh
();
this
.
context
.
refresh
();
}
}
@Configuration
@Configuration
static
class
MultipleDataSourcesConfig
{
static
class
MultipleDataSourcesConfig
{
@Bean
@Bean
public
DataSource
tomcatDataSource
()
{
public
DataSource
tomcatDataSource
()
{
return
initializeBuilder
().
type
(
org
.
apache
.
tomcat
.
jdbc
.
pool
.
DataSource
.
class
).
build
();
return
initializeBuilder
().
type
(
org
.
apache
.
tomcat
.
jdbc
.
pool
.
DataSource
.
class
)
.
build
();
}
}
@Bean
@Bean
...
@@ -164,7 +164,8 @@ public class MetricDataSourceAutoConfigurationTests {
...
@@ -164,7 +164,8 @@ public class MetricDataSourceAutoConfigurationTests {
@Bean
@Bean
@Primary
@Primary
public
DataSource
myDataSource
()
{
public
DataSource
myDataSource
()
{
return
initializeBuilder
().
type
(
org
.
apache
.
tomcat
.
jdbc
.
pool
.
DataSource
.
class
).
build
();
return
initializeBuilder
().
type
(
org
.
apache
.
tomcat
.
jdbc
.
pool
.
DataSource
.
class
)
.
build
();
}
}
@Bean
@Bean
...
@@ -180,7 +181,8 @@ public class MetricDataSourceAutoConfigurationTests {
...
@@ -180,7 +181,8 @@ public class MetricDataSourceAutoConfigurationTests {
public
DataSourcePublicMetrics
myDataSourcePublicMetrics
()
{
public
DataSourcePublicMetrics
myDataSourcePublicMetrics
()
{
return
new
DataSourcePublicMetrics
()
{
return
new
DataSourcePublicMetrics
()
{
@Override
@Override
protected
String
createPrefix
(
String
dataSourceName
,
DataSource
dataSource
,
boolean
primary
)
{
protected
String
createPrefix
(
String
dataSourceName
,
DataSource
dataSource
,
boolean
primary
)
{
return
(
primary
?
"ds.first."
:
"ds.second"
);
return
(
primary
?
"ds.first."
:
"ds.second"
);
}
}
};
};
...
@@ -188,9 +190,7 @@ public class MetricDataSourceAutoConfigurationTests {
...
@@ -188,9 +190,7 @@ public class MetricDataSourceAutoConfigurationTests {
}
}
private
static
DataSourceBuilder
initializeBuilder
()
{
private
static
DataSourceBuilder
initializeBuilder
()
{
return
DataSourceBuilder
.
create
()
return
DataSourceBuilder
.
create
().
driverClassName
(
"org.hsqldb.jdbc.JDBCDriver"
)
.
driverClassName
(
"org.hsqldb.jdbc.JDBCDriver"
)
.
url
(
"jdbc:hsqldb:mem:test"
).
username
(
"sa"
);
.
url
(
"jdbc:hsqldb:mem:test"
)
.
username
(
"sa"
);
}
}
}
}
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadata.java
View file @
adbded33
...
@@ -24,7 +24,8 @@ import javax.sql.DataSource;
...
@@ -24,7 +24,8 @@ import javax.sql.DataSource;
* @author Stephane Nicoll
* @author Stephane Nicoll
* @since 1.2.0
* @since 1.2.0
*/
*/
public
abstract
class
AbstractDataSourceMetadata
<
D
extends
DataSource
>
implements
DataSourceMetadata
{
public
abstract
class
AbstractDataSourceMetadata
<
D
extends
DataSource
>
implements
DataSourceMetadata
{
private
final
D
dataSource
;
private
final
D
dataSource
;
...
@@ -55,7 +56,7 @@ public abstract class AbstractDataSourceMetadata<D extends DataSource> implement
...
@@ -55,7 +56,7 @@ public abstract class AbstractDataSourceMetadata<D extends DataSource> implement
}
}
protected
final
D
getDataSource
()
{
protected
final
D
getDataSource
()
{
return
dataSource
;
return
this
.
dataSource
;
}
}
}
}
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadata.java
View file @
adbded33
...
@@ -19,13 +19,13 @@ package org.springframework.boot.autoconfigure.jdbc;
...
@@ -19,13 +19,13 @@ package org.springframework.boot.autoconfigure.jdbc;
import
org.apache.commons.dbcp.BasicDataSource
;
import
org.apache.commons.dbcp.BasicDataSource
;
/**
/**
* A {@link DataSourceMetadata} implementation for the commons dbcp
* A {@link DataSourceMetadata} implementation for the commons dbcp data source.
* data source.
*
*
* @author Stephane Nicoll
* @author Stephane Nicoll
* @since 1.2.0
* @since 1.2.0
*/
*/
public
class
CommonsDbcpDataSourceMetadata
extends
AbstractDataSourceMetadata
<
BasicDataSource
>
{
public
class
CommonsDbcpDataSourceMetadata
extends
AbstractDataSourceMetadata
<
BasicDataSource
>
{
public
CommonsDbcpDataSourceMetadata
(
BasicDataSource
dataSource
)
{
public
CommonsDbcpDataSourceMetadata
(
BasicDataSource
dataSource
)
{
super
(
dataSource
);
super
(
dataSource
);
...
@@ -50,4 +50,5 @@ public class CommonsDbcpDataSourceMetadata extends AbstractDataSourceMetadata<Ba
...
@@ -50,4 +50,5 @@ public class CommonsDbcpDataSourceMetadata extends AbstractDataSourceMetadata<Ba
public
String
getValidationQuery
()
{
public
String
getValidationQuery
()
{
return
getDataSource
().
getValidationQuery
();
return
getDataSource
().
getValidationQuery
();
}
}
}
}
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProvider.java
View file @
adbded33
...
@@ -35,7 +35,8 @@ public class CompositeDataSourceMetadataProvider implements DataSourceMetadataPr
...
@@ -35,7 +35,8 @@ public class CompositeDataSourceMetadataProvider implements DataSourceMetadataPr
/**
/**
* Create an instance with an initial collection of delegates to use.
* Create an instance with an initial collection of delegates to use.
*/
*/
public
CompositeDataSourceMetadataProvider
(
Collection
<
DataSourceMetadataProvider
>
providers
)
{
public
CompositeDataSourceMetadataProvider
(
Collection
<
DataSourceMetadataProvider
>
providers
)
{
this
.
providers
=
providers
;
this
.
providers
=
providers
;
}
}
...
@@ -48,8 +49,9 @@ public class CompositeDataSourceMetadataProvider implements DataSourceMetadataPr
...
@@ -48,8 +49,9 @@ public class CompositeDataSourceMetadataProvider implements DataSourceMetadataPr
@Override
@Override
public
DataSourceMetadata
getDataSourceMetadata
(
DataSource
dataSource
)
{
public
DataSourceMetadata
getDataSourceMetadata
(
DataSource
dataSource
)
{
for
(
DataSourceMetadataProvider
provider
:
providers
)
{
for
(
DataSourceMetadataProvider
provider
:
this
.
providers
)
{
DataSourceMetadata
dataSourceMetadata
=
provider
.
getDataSourceMetadata
(
dataSource
);
DataSourceMetadata
dataSourceMetadata
=
provider
.
getDataSourceMetadata
(
dataSource
);
if
(
dataSourceMetadata
!=
null
)
{
if
(
dataSourceMetadata
!=
null
)
{
return
dataSourceMetadata
;
return
dataSourceMetadata
;
}
}
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadata.java
View file @
adbded33
...
@@ -19,9 +19,8 @@ package org.springframework.boot.autoconfigure.jdbc;
...
@@ -19,9 +19,8 @@ package org.springframework.boot.autoconfigure.jdbc;
import
javax.sql.DataSource
;
import
javax.sql.DataSource
;
/**
/**
* Provide various metadata regarding a {@link DataSource} that
* Provide various metadata regarding a {@link DataSource} that are shared by most data
* are shared by most data source types but not accessible in a
* source types but not accessible in a standard manner.
* standard manner.
*
*
* @author Stephane Nicoll
* @author Stephane Nicoll
* @since 1.2.0
* @since 1.2.0
...
@@ -29,44 +28,39 @@ import javax.sql.DataSource;
...
@@ -29,44 +28,39 @@ import javax.sql.DataSource;
public
interface
DataSourceMetadata
{
public
interface
DataSourceMetadata
{
/**
/**
* Return the usage of the pool as a double value between
* Return the usage of the pool as a double value between 0 and 1.
* 0 and 1.
* <ul>
* <ul>
* <li>1 means that the maximum number of connections
* <li>1 means that the maximum number of connections have been allocated</li>
* have been allocated</li>
* <li>0 means that no connection is currently active</li>
* <li>0 means that no connection is currently active</li>
* <li>-1 means there is not limit to the number of connections
* <li>-1 means there is not limit to the number of connections that can be allocated</li>
* that can be allocated</li>
* </ul>
* </ul>
* This may also return {@code null} if the data source does
* This may also return {@code null} if the data source does
not provide the necessary
*
not provide the necessary
information to compute the poll usage.
* information to compute the poll usage.
*/
*/
Float
getPoolUsage
();
Float
getPoolUsage
();
/**
/**
* Return the current number of active connections that
* Return the current number of active connections that have been allocated from the
* have been allocated from the data source or {@code null}
* data source or {@code null} if that information is not available.
* if that information is not available.
*/
*/
Integer
getPoolSize
();
Integer
getPoolSize
();
/**
/**
* Return the maximum number of active connections that can be
* Return the maximum number of active connections that can be allocated at the same
* allocated at the same time or {@code -1} if there is no
* time or {@code -1} if there is no limit. Can also return {@code null} if that
* limit. Can also return {@code null} if that information is
* information is not available.
* not available.
*/
*/
Integer
getMaxPoolSize
();
Integer
getMaxPoolSize
();
/**
/**
* Return the minimum number of idle connections in the pool
* Return the minimum number of idle connections in the pool
or {@code null} if that
*
or {@code null} if that
information is not available.
* information is not available.
*/
*/
Integer
getMinPoolSize
();
Integer
getMinPoolSize
();
/**
/**
* Return the query to use to validate that a connection is
* Return the query to use to validate that a connection is
valid or {@code null} if
*
valid or {@code null} if
that information is not available.
* that information is not available.
*/
*/
String
getValidationQuery
();
String
getValidationQuery
();
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvider.java
View file @
adbded33
...
@@ -27,9 +27,8 @@ import javax.sql.DataSource;
...
@@ -27,9 +27,8 @@ import javax.sql.DataSource;
public
interface
DataSourceMetadataProvider
{
public
interface
DataSourceMetadataProvider
{
/**
/**
* Return the {@link DataSourceMetadata} instance able to manage the
* Return the {@link DataSourceMetadata} instance able to manage the specified
* specified {@link DataSource} or {@code null} if the given data
* {@link DataSource} or {@code null} if the given data source could not be handled.
* source could not be handled.
*/
*/
DataSourceMetadata
getDataSourceMetadata
(
DataSource
dataSource
);
DataSourceMetadata
getDataSourceMetadata
(
DataSource
dataSource
);
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceMetadataProvidersConfiguration.java
View file @
adbded33
...
@@ -18,16 +18,16 @@ package org.springframework.boot.autoconfigure.jdbc;
...
@@ -18,16 +18,16 @@ package org.springframework.boot.autoconfigure.jdbc;
import
javax.sql.DataSource
;
import
javax.sql.DataSource
;
import
com.zaxxer.hikari.HikariDataSource
;
import
org.apache.commons.dbcp.BasicDataSource
;
import
org.apache.commons.dbcp.BasicDataSource
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
com.zaxxer.hikari.HikariDataSource
;
/**
/**
* Register the {@link DataSourceMetadataProvider} instances for the supported
* Register the {@link DataSourceMetadataProvider} instances for the supported
data
*
data
sources.
* sources.
*
*
* @author Stephane Nicoll
* @author Stephane Nicoll
* @since 1.2.0
* @since 1.2.0
...
@@ -45,12 +45,14 @@ public class DataSourceMetadataProvidersConfiguration {
...
@@ -45,12 +45,14 @@ public class DataSourceMetadataProvidersConfiguration {
@Override
@Override
public
DataSourceMetadata
getDataSourceMetadata
(
DataSource
dataSource
)
{
public
DataSourceMetadata
getDataSourceMetadata
(
DataSource
dataSource
)
{
if
(
dataSource
instanceof
org
.
apache
.
tomcat
.
jdbc
.
pool
.
DataSource
)
{
if
(
dataSource
instanceof
org
.
apache
.
tomcat
.
jdbc
.
pool
.
DataSource
)
{
return
new
TomcatDataSourceMetadata
((
org
.
apache
.
tomcat
.
jdbc
.
pool
.
DataSource
)
dataSource
);
return
new
TomcatDataSourceMetadata
(
(
org
.
apache
.
tomcat
.
jdbc
.
pool
.
DataSource
)
dataSource
);
}
}
return
null
;
return
null
;
}
}
};
};
}
}
}
}
@Configuration
@Configuration
...
@@ -69,6 +71,7 @@ public class DataSourceMetadataProvidersConfiguration {
...
@@ -69,6 +71,7 @@ public class DataSourceMetadataProvidersConfiguration {
}
}
};
};
}
}
}
}
@Configuration
@Configuration
...
@@ -81,12 +84,14 @@ public class DataSourceMetadataProvidersConfiguration {
...
@@ -81,12 +84,14 @@ public class DataSourceMetadataProvidersConfiguration {
@Override
@Override
public
DataSourceMetadata
getDataSourceMetadata
(
DataSource
dataSource
)
{
public
DataSourceMetadata
getDataSourceMetadata
(
DataSource
dataSource
)
{
if
(
dataSource
instanceof
BasicDataSource
)
{
if
(
dataSource
instanceof
BasicDataSource
)
{
return
new
CommonsDbcpDataSourceMetadata
((
BasicDataSource
)
dataSource
);
return
new
CommonsDbcpDataSourceMetadata
(
(
BasicDataSource
)
dataSource
);
}
}
return
null
;
return
null
;
}
}
};
};
}
}
}
}
}
}
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadata.java
View file @
adbded33
...
@@ -16,21 +16,20 @@
...
@@ -16,21 +16,20 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
import
com.zaxxer.hikari.HikariDataSource
;
import
com.zaxxer.hikari.pool.HikariPool
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.DirectFieldAccessor
;
import
org.springframework.beans.DirectFieldAccessor
;
import
com.zaxxer.hikari.HikariDataSource
;
import
com.zaxxer.hikari.pool.HikariPool
;
/**
/**
* A {@link DataSourceMetadata} implementation for the hikari
* A {@link DataSourceMetadata} implementation for the hikari data source.
* data source.
*
*
* @author Stephane Nicoll
* @author Stephane Nicoll
* @since 1.2.0
* @since 1.2.0
*/
*/
public
class
HikariDataSourceMetadata
extends
AbstractDataSourceMetadata
<
HikariDataSource
>
{
public
class
HikariDataSourceMetadata
extends
AbstractDataSourceMetadata
<
HikariDataSource
>
{
private
final
HikariPoolProvider
hikariPoolProvider
;
private
final
HikariPoolProvider
hikariPoolProvider
;
...
@@ -41,13 +40,14 @@ public class HikariDataSourceMetadata extends AbstractDataSourceMetadata<HikariD
...
@@ -41,13 +40,14 @@ public class HikariDataSourceMetadata extends AbstractDataSourceMetadata<HikariD
@Override
@Override
public
Integer
getPoolSize
()
{
public
Integer
getPoolSize
()
{
HikariPool
hikariPool
=
hikariPoolProvider
.
getHikariPool
();
HikariPool
hikariPool
=
this
.
hikariPoolProvider
.
getHikariPool
();
if
(
hikariPool
!=
null
)
{
if
(
hikariPool
!=
null
)
{
return
hikariPool
.
getActiveConnections
();
return
hikariPool
.
getActiveConnections
();
}
}
return
null
;
return
null
;
}
}
@Override
public
Integer
getMaxPoolSize
()
{
public
Integer
getMaxPoolSize
()
{
return
getDataSource
().
getMaximumPoolSize
();
return
getDataSource
().
getMaximumPoolSize
();
}
}
...
@@ -63,9 +63,9 @@ public class HikariDataSourceMetadata extends AbstractDataSourceMetadata<HikariD
...
@@ -63,9 +63,9 @@ public class HikariDataSourceMetadata extends AbstractDataSourceMetadata<HikariD
}
}
/**
/**
* Provide the {@link HikariPool} instance managed internally by
* Provide the {@link HikariPool} instance managed internally by
the
*
the {@link HikariDataSource} as there is no other way to retrieve
*
{@link HikariDataSource} as there is no other way to retrieve that information
*
that information
except JMX access.
* except JMX access.
*/
*/
private
static
class
HikariPoolProvider
{
private
static
class
HikariPoolProvider
{
private
final
HikariDataSource
dataSource
;
private
final
HikariDataSource
dataSource
;
...
@@ -78,7 +78,7 @@ public class HikariDataSourceMetadata extends AbstractDataSourceMetadata<HikariD
...
@@ -78,7 +78,7 @@ public class HikariDataSourceMetadata extends AbstractDataSourceMetadata<HikariD
}
}
public
HikariPool
getHikariPool
()
{
public
HikariPool
getHikariPool
()
{
if
(!
poolAvailable
)
{
if
(!
this
.
poolAvailable
)
{
return
null
;
return
null
;
}
}
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadata.java
View file @
adbded33
...
@@ -21,8 +21,7 @@ import org.apache.tomcat.jdbc.pool.DataSource;
...
@@ -21,8 +21,7 @@ import org.apache.tomcat.jdbc.pool.DataSource;
/**
/**
*
*
* A {@link DataSourceMetadata} implementation for the tomcat
* A {@link DataSourceMetadata} implementation for the tomcat data source.
* data source.
*
*
* @author Stephane Nicoll
* @author Stephane Nicoll
*/
*/
...
@@ -52,4 +51,5 @@ public class TomcatDataSourceMetadata extends AbstractDataSourceMetadata<DataSou
...
@@ -52,4 +51,5 @@ public class TomcatDataSourceMetadata extends AbstractDataSourceMetadata<DataSou
public
String
getValidationQuery
()
{
public
String
getValidationQuery
()
{
return
getDataSource
().
getValidationQuery
();
return
getDataSource
().
getValidationQuery
();
}
}
}
}
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceMetadataTests.java
View file @
adbded33
...
@@ -16,19 +16,17 @@
...
@@ -16,19 +16,17 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
import
static
org
.
junit
.
Assert
.*;
import
java.sql.Connection
;
import
java.sql.Connection
;
import
java.sql.SQLException
;
import
java.sql.SQLException
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.springframework.dao.DataAccessException
;
import
org.springframework.dao.DataAccessException
;
import
org.springframework.jdbc.core.ConnectionCallback
;
import
org.springframework.jdbc.core.ConnectionCallback
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
/**
/**
*
* @author Stephane Nicoll
* @author Stephane Nicoll
*/
*/
public
abstract
class
AbstractDataSourceMetadataTests
<
D
extends
AbstractDataSourceMetadata
>
{
public
abstract
class
AbstractDataSourceMetadataTests
<
D
extends
AbstractDataSourceMetadata
>
{
...
@@ -51,10 +49,12 @@ public abstract class AbstractDataSourceMetadataTests<D extends AbstractDataSour
...
@@ -51,10 +49,12 @@ public abstract class AbstractDataSourceMetadataTests<D extends AbstractDataSour
@Test
@Test
public
void
getPoolSizeNoConnection
()
{
public
void
getPoolSizeNoConnection
()
{
// Make sure the pool is initialized
// Make sure the pool is initialized
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
getDataSourceMetadata
().
getDataSource
());
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
getDataSourceMetadata
()
.
getDataSource
());
jdbcTemplate
.
execute
(
new
ConnectionCallback
<
Void
>()
{
jdbcTemplate
.
execute
(
new
ConnectionCallback
<
Void
>()
{
@Override
@Override
public
Void
doInConnection
(
Connection
connection
)
throws
SQLException
,
DataAccessException
{
public
Void
doInConnection
(
Connection
connection
)
throws
SQLException
,
DataAccessException
{
return
null
;
return
null
;
}
}
});
});
...
@@ -64,10 +64,12 @@ public abstract class AbstractDataSourceMetadataTests<D extends AbstractDataSour
...
@@ -64,10 +64,12 @@ public abstract class AbstractDataSourceMetadataTests<D extends AbstractDataSour
@Test
@Test
public
void
getPoolSizeOneConnection
()
{
public
void
getPoolSizeOneConnection
()
{
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
getDataSourceMetadata
().
getDataSource
());
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
getDataSourceMetadata
()
.
getDataSource
());
jdbcTemplate
.
execute
(
new
ConnectionCallback
<
Void
>()
{
jdbcTemplate
.
execute
(
new
ConnectionCallback
<
Void
>()
{
@Override
@Override
public
Void
doInConnection
(
Connection
connection
)
throws
SQLException
,
DataAccessException
{
public
Void
doInConnection
(
Connection
connection
)
throws
SQLException
,
DataAccessException
{
assertEquals
(
Integer
.
valueOf
(
1
),
getDataSourceMetadata
().
getPoolSize
());
assertEquals
(
Integer
.
valueOf
(
1
),
getDataSourceMetadata
().
getPoolSize
());
assertEquals
(
Float
.
valueOf
(
0.5
F
),
getDataSourceMetadata
().
getPoolUsage
());
assertEquals
(
Float
.
valueOf
(
0.5
F
),
getDataSourceMetadata
().
getPoolUsage
());
return
null
;
return
null
;
...
@@ -77,15 +79,20 @@ public abstract class AbstractDataSourceMetadataTests<D extends AbstractDataSour
...
@@ -77,15 +79,20 @@ public abstract class AbstractDataSourceMetadataTests<D extends AbstractDataSour
@Test
@Test
public
void
getPoolSizeTwoConnections
()
{
public
void
getPoolSizeTwoConnections
()
{
final
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
getDataSourceMetadata
().
getDataSource
());
final
JdbcTemplate
jdbcTemplate
=
new
JdbcTemplate
(
getDataSourceMetadata
()
.
getDataSource
());
jdbcTemplate
.
execute
(
new
ConnectionCallback
<
Void
>()
{
jdbcTemplate
.
execute
(
new
ConnectionCallback
<
Void
>()
{
@Override
@Override
public
Void
doInConnection
(
Connection
connection
)
throws
SQLException
,
DataAccessException
{
public
Void
doInConnection
(
Connection
connection
)
throws
SQLException
,
DataAccessException
{
jdbcTemplate
.
execute
(
new
ConnectionCallback
<
Void
>()
{
jdbcTemplate
.
execute
(
new
ConnectionCallback
<
Void
>()
{
@Override
@Override
public
Void
doInConnection
(
Connection
connection
)
throws
SQLException
,
DataAccessException
{
public
Void
doInConnection
(
Connection
connection
)
assertEquals
(
Integer
.
valueOf
(
2
),
getDataSourceMetadata
().
getPoolSize
());
throws
SQLException
,
DataAccessException
{
assertEquals
(
Float
.
valueOf
(
1
F
),
getDataSourceMetadata
().
getPoolUsage
());
assertEquals
(
Integer
.
valueOf
(
2
),
getDataSourceMetadata
()
.
getPoolSize
());
assertEquals
(
Float
.
valueOf
(
1
F
),
getDataSourceMetadata
()
.
getPoolUsage
());
return
null
;
return
null
;
}
}
});
});
...
@@ -98,10 +105,8 @@ public abstract class AbstractDataSourceMetadataTests<D extends AbstractDataSour
...
@@ -98,10 +105,8 @@ public abstract class AbstractDataSourceMetadataTests<D extends AbstractDataSour
public
abstract
void
getValidationQuery
();
public
abstract
void
getValidationQuery
();
protected
DataSourceBuilder
initializeBuilder
()
{
protected
DataSourceBuilder
initializeBuilder
()
{
return
DataSourceBuilder
.
create
()
return
DataSourceBuilder
.
create
().
driverClassName
(
"org.hsqldb.jdbc.JDBCDriver"
)
.
driverClassName
(
"org.hsqldb.jdbc.JDBCDriver"
)
.
url
(
"jdbc:hsqldb:mem:test"
).
username
(
"sa"
);
.
url
(
"jdbc:hsqldb:mem:test"
)
.
username
(
"sa"
);
}
}
}
}
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceMetadataTests.java
View file @
adbded33
...
@@ -16,17 +16,18 @@
...
@@ -16,17 +16,18 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
import
static
org
.
junit
.
Assert
.*;
import
org.apache.commons.dbcp.BasicDataSource
;
import
org.apache.commons.dbcp.BasicDataSource
;
import
org.junit.Before
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.Test
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertNull
;
/**
/**
*
* @author Stephane Nicoll
* @author Stephane Nicoll
*/
*/
public
class
CommonsDbcpDataSourceMetadataTests
extends
AbstractDataSourceMetadataTests
<
CommonsDbcpDataSourceMetadata
>
{
public
class
CommonsDbcpDataSourceMetadataTests
extends
AbstractDataSourceMetadataTests
<
CommonsDbcpDataSourceMetadata
>
{
private
CommonsDbcpDataSourceMetadata
dataSourceMetadata
;
private
CommonsDbcpDataSourceMetadata
dataSourceMetadata
;
...
@@ -42,7 +43,8 @@ public class CommonsDbcpDataSourceMetadataTests extends AbstractDataSourceMetada
...
@@ -42,7 +43,8 @@ public class CommonsDbcpDataSourceMetadataTests extends AbstractDataSourceMetada
@Test
@Test
public
void
getPoolUsageWithNoCurrent
()
{
public
void
getPoolUsageWithNoCurrent
()
{
CommonsDbcpDataSourceMetadata
dsm
=
new
CommonsDbcpDataSourceMetadata
(
createDataSource
())
{
CommonsDbcpDataSourceMetadata
dsm
=
new
CommonsDbcpDataSourceMetadata
(
createDataSource
())
{
@Override
@Override
public
Integer
getPoolSize
()
{
public
Integer
getPoolSize
()
{
return
null
;
return
null
;
...
@@ -53,7 +55,8 @@ public class CommonsDbcpDataSourceMetadataTests extends AbstractDataSourceMetada
...
@@ -53,7 +55,8 @@ public class CommonsDbcpDataSourceMetadataTests extends AbstractDataSourceMetada
@Test
@Test
public
void
getPoolUsageWithNoMax
()
{
public
void
getPoolUsageWithNoMax
()
{
CommonsDbcpDataSourceMetadata
dsm
=
new
CommonsDbcpDataSourceMetadata
(
createDataSource
())
{
CommonsDbcpDataSourceMetadata
dsm
=
new
CommonsDbcpDataSourceMetadata
(
createDataSource
())
{
@Override
@Override
public
Integer
getMaxPoolSize
()
{
public
Integer
getMaxPoolSize
()
{
return
null
;
return
null
;
...
@@ -72,10 +75,12 @@ public class CommonsDbcpDataSourceMetadataTests extends AbstractDataSourceMetada
...
@@ -72,10 +75,12 @@ public class CommonsDbcpDataSourceMetadataTests extends AbstractDataSourceMetada
public
void
getValidationQuery
()
{
public
void
getValidationQuery
()
{
BasicDataSource
dataSource
=
createDataSource
();
BasicDataSource
dataSource
=
createDataSource
();
dataSource
.
setValidationQuery
(
"SELECT FROM FOO"
);
dataSource
.
setValidationQuery
(
"SELECT FROM FOO"
);
assertEquals
(
"SELECT FROM FOO"
,
new
CommonsDbcpDataSourceMetadata
(
dataSource
).
getValidationQuery
());
assertEquals
(
"SELECT FROM FOO"
,
new
CommonsDbcpDataSourceMetadata
(
dataSource
).
getValidationQuery
());
}
}
private
CommonsDbcpDataSourceMetadata
createDataSourceMetadata
(
int
minSize
,
int
maxSize
)
{
private
CommonsDbcpDataSourceMetadata
createDataSourceMetadata
(
int
minSize
,
int
maxSize
)
{
BasicDataSource
dataSource
=
createDataSource
();
BasicDataSource
dataSource
=
createDataSource
();
dataSource
.
setMinIdle
(
minSize
);
dataSource
.
setMinIdle
(
minSize
);
dataSource
.
setMaxActive
(
maxSize
);
dataSource
.
setMaxActive
(
maxSize
);
...
...
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CompositeDataSourceMetadataProviderTests.java
View file @
adbded33
...
@@ -16,9 +16,6 @@
...
@@ -16,9 +16,6 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
import
static
org
.
junit
.
Assert
.*;
import
static
org
.
mockito
.
BDDMockito
.*;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
javax.sql.DataSource
;
import
javax.sql.DataSource
;
...
@@ -28,8 +25,11 @@ import org.junit.Test;
...
@@ -28,8 +25,11 @@ import org.junit.Test;
import
org.mockito.Mock
;
import
org.mockito.Mock
;
import
org.mockito.MockitoAnnotations
;
import
org.mockito.MockitoAnnotations
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertSame
;
import
static
org
.
mockito
.
BDDMockito
.
given
;
/**
/**
*
* @author Stephane Nicoll
* @author Stephane Nicoll
*/
*/
public
class
CompositeDataSourceMetadataProviderTests
{
public
class
CompositeDataSourceMetadataProviderTests
{
...
@@ -55,30 +55,30 @@ public class CompositeDataSourceMetadataProviderTests {
...
@@ -55,30 +55,30 @@ public class CompositeDataSourceMetadataProviderTests {
@Mock
@Mock
private
DataSource
unknownDataSource
;
private
DataSource
unknownDataSource
;
@Before
@Before
public
void
setup
()
{
public
void
setup
()
{
MockitoAnnotations
.
initMocks
(
this
);
MockitoAnnotations
.
initMocks
(
this
);
given
(
firstProvider
.
getDataSourceMetadata
(
firstDataSource
)).
willReturn
(
first
);
given
(
this
.
firstProvider
.
getDataSourceMetadata
(
this
.
firstDataSource
)).
willReturn
(
given
(
firstProvider
.
getDataSourceMetadata
(
secondDataSource
)).
willReturn
(
second
);
this
.
first
);
given
(
this
.
firstProvider
.
getDataSourceMetadata
(
this
.
secondDataSource
))
.
willReturn
(
this
.
second
);
}
}
@Test
@Test
public
void
createWithProviders
()
{
public
void
createWithProviders
()
{
CompositeDataSourceMetadataProvider
provider
=
CompositeDataSourceMetadataProvider
provider
=
new
CompositeDataSourceMetadataProvider
(
new
CompositeDataSourceMetadataProvider
(
Arrays
.
asList
(
firstProvider
,
secondProvider
));
Arrays
.
asList
(
this
.
firstProvider
,
this
.
secondProvider
));
assertSame
(
first
,
provider
.
getDataSourceMetadata
(
firstDataSource
));
assertSame
(
this
.
first
,
provider
.
getDataSourceMetadata
(
this
.
firstDataSource
));
assertSame
(
second
,
provider
.
getDataSourceMetadata
(
secondDataSource
));
assertSame
(
this
.
second
,
provider
.
getDataSourceMetadata
(
this
.
secondDataSource
));
assertNull
(
provider
.
getDataSourceMetadata
(
unknownDataSource
));
assertNull
(
provider
.
getDataSourceMetadata
(
this
.
unknownDataSource
));
}
}
@Test
@Test
public
void
addProvider
()
{
public
void
addProvider
()
{
CompositeDataSourceMetadataProvider
provider
=
CompositeDataSourceMetadataProvider
provider
=
new
CompositeDataSourceMetadataProvider
();
new
CompositeDataSourceMetadataProvider
();
assertNull
(
provider
.
getDataSourceMetadata
(
this
.
firstDataSource
));
assertNull
(
provider
.
getDataSourceMetadata
(
firstDataSource
));
provider
.
addDataSourceMetadataProvider
(
this
.
firstProvider
);
provider
.
addDataSourceMetadataProvider
(
firstProvider
);
assertSame
(
this
.
first
,
provider
.
getDataSourceMetadata
(
this
.
firstDataSource
));
assertSame
(
first
,
provider
.
getDataSourceMetadata
(
firstDataSource
));
}
}
}
}
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceMetadataTests.java
View file @
adbded33
...
@@ -16,21 +16,23 @@
...
@@ -16,21 +16,23 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
import
com.zaxxer.hikari.HikariDataSource
;
import
org.junit.Before
;
import
org.junit.Before
;
import
com.zaxxer.hikari.HikariDataSource
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
/**
/**
* @author Stephane Nicoll
* @author Stephane Nicoll
*/
*/
public
class
HikariDataSourceMetadataTests
extends
AbstractDataSourceMetadataTests
<
HikariDataSourceMetadata
>
{
public
class
HikariDataSourceMetadataTests
extends
AbstractDataSourceMetadataTests
<
HikariDataSourceMetadata
>
{
private
HikariDataSourceMetadata
dataSourceMetadata
;
private
HikariDataSourceMetadata
dataSourceMetadata
;
@Before
@Before
public
void
setup
()
{
public
void
setup
()
{
this
.
dataSourceMetadata
=
new
HikariDataSourceMetadata
(
createDataSource
(
0
,
2
));
this
.
dataSourceMetadata
=
new
HikariDataSourceMetadata
(
createDataSource
(
0
,
2
));
}
}
@Override
@Override
...
@@ -42,11 +44,13 @@ public class HikariDataSourceMetadataTests extends AbstractDataSourceMetadataTes
...
@@ -42,11 +44,13 @@ public class HikariDataSourceMetadataTests extends AbstractDataSourceMetadataTes
public
void
getValidationQuery
()
{
public
void
getValidationQuery
()
{
HikariDataSource
dataSource
=
createDataSource
(
0
,
4
);
HikariDataSource
dataSource
=
createDataSource
(
0
,
4
);
dataSource
.
setConnectionTestQuery
(
"SELECT FROM FOO"
);
dataSource
.
setConnectionTestQuery
(
"SELECT FROM FOO"
);
assertEquals
(
"SELECT FROM FOO"
,
new
HikariDataSourceMetadata
(
dataSource
).
getValidationQuery
());
assertEquals
(
"SELECT FROM FOO"
,
new
HikariDataSourceMetadata
(
dataSource
).
getValidationQuery
());
}
}
private
HikariDataSource
createDataSource
(
int
minSize
,
int
maxSize
)
{
private
HikariDataSource
createDataSource
(
int
minSize
,
int
maxSize
)
{
HikariDataSource
dataSource
=
(
HikariDataSource
)
initializeBuilder
().
type
(
HikariDataSource
.
class
).
build
();
HikariDataSource
dataSource
=
(
HikariDataSource
)
initializeBuilder
().
type
(
HikariDataSource
.
class
).
build
();
dataSource
.
setMinimumIdle
(
minSize
);
dataSource
.
setMinimumIdle
(
minSize
);
dataSource
.
setMaximumPoolSize
(
maxSize
);
dataSource
.
setMaximumPoolSize
(
maxSize
);
return
dataSource
;
return
dataSource
;
...
...
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceMetadataTests.java
View file @
adbded33
...
@@ -22,10 +22,10 @@ import org.junit.Before;
...
@@ -22,10 +22,10 @@ import org.junit.Before;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
/**
/**
*
* @author Stephane Nicoll
* @author Stephane Nicoll
*/
*/
public
class
TomcatDataSourceMetadataTests
extends
AbstractDataSourceMetadataTests
<
TomcatDataSourceMetadata
>
{
public
class
TomcatDataSourceMetadataTests
extends
AbstractDataSourceMetadataTests
<
TomcatDataSourceMetadata
>
{
private
TomcatDataSourceMetadata
dataSourceMetadata
;
private
TomcatDataSourceMetadata
dataSourceMetadata
;
...
@@ -43,11 +43,13 @@ public class TomcatDataSourceMetadataTests extends AbstractDataSourceMetadataTes
...
@@ -43,11 +43,13 @@ public class TomcatDataSourceMetadataTests extends AbstractDataSourceMetadataTes
public
void
getValidationQuery
()
{
public
void
getValidationQuery
()
{
DataSource
dataSource
=
createDataSource
(
0
,
4
);
DataSource
dataSource
=
createDataSource
(
0
,
4
);
dataSource
.
setValidationQuery
(
"SELECT FROM FOO"
);
dataSource
.
setValidationQuery
(
"SELECT FROM FOO"
);
assertEquals
(
"SELECT FROM FOO"
,
new
TomcatDataSourceMetadata
(
dataSource
).
getValidationQuery
());
assertEquals
(
"SELECT FROM FOO"
,
new
TomcatDataSourceMetadata
(
dataSource
).
getValidationQuery
());
}
}
private
DataSource
createDataSource
(
int
minSize
,
int
maxSize
)
{
private
DataSource
createDataSource
(
int
minSize
,
int
maxSize
)
{
DataSource
dataSource
=
(
DataSource
)
initializeBuilder
().
type
(
DataSource
.
class
).
build
();
DataSource
dataSource
=
(
DataSource
)
initializeBuilder
().
type
(
DataSource
.
class
)
.
build
();
dataSource
.
setMinIdle
(
minSize
);
dataSource
.
setMinIdle
(
minSize
);
dataSource
.
setMaxActive
(
maxSize
);
dataSource
.
setMaxActive
(
maxSize
);
...
...
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