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
bb3f32fa
Commit
bb3f32fa
authored
Sep 21, 2017
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add a generic to DataSourceBuilder
Closes gh-7942
parent
16edf72f
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
40 additions
and
35 deletions
+40
-35
DataSourceAutoConfiguration.java
.../boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java
+2
-2
DataSourceProperties.java
...amework/boot/autoconfigure/jdbc/DataSourceProperties.java
+1
-1
ConfigurableDataSourceExample.java
...ingframework/boot/jdbc/ConfigurableDataSourceExample.java
+2
-2
SimpleDataSourceExample.java
...rg/springframework/boot/jdbc/SimpleDataSourceExample.java
+1
-2
SimpleTwoDataSourcesExample.java
...pringframework/boot/jdbc/SimpleTwoDataSourcesExample.java
+1
-2
DataSourceBuilder.java
...java/org/springframework/boot/jdbc/DataSourceBuilder.java
+21
-20
DataSourceBuilderTests.java
...org/springframework/boot/jdbc/DataSourceBuilderTests.java
+7
-0
AbstractDataSourcePoolMetadataTests.java
...ot/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java
+1
-1
CommonsDbcp2DataSourcePoolMetadataTests.java
...dbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java
+1
-1
HikariDataSourcePoolMetadataTests.java
...boot/jdbc/metadata/HikariDataSourcePoolMetadataTests.java
+2
-2
TomcatDataSourcePoolMetadataTests.java
...boot/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java
+1
-2
No files found.
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java
View file @
bb3f32fa
...
...
@@ -131,8 +131,8 @@ public class DataSourceAutoConfiguration {
* @return the class loader
*/
private
ClassLoader
getDataSourceClassLoader
(
ConditionContext
context
)
{
Class
<?>
dataSourceClass
=
new
DataSourceBuilder
(
context
.
getClassLoader
())
.
findType
();
Class
<?>
dataSourceClass
=
DataSourceBuilder
.
findType
(
context
.
getClassLoader
()
);
return
(
dataSourceClass
==
null
?
null
:
dataSourceClass
.
getClassLoader
());
}
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java
View file @
bb3f32fa
...
...
@@ -180,7 +180,7 @@ public class DataSourceProperties
* @return a {@link DataSourceBuilder} initialized with the customizations defined on
* this instance
*/
public
DataSourceBuilder
initializeDataSourceBuilder
()
{
public
DataSourceBuilder
<?>
initializeDataSourceBuilder
()
{
return
DataSourceBuilder
.
create
(
getClassLoader
()).
type
(
getType
())
.
driverClassName
(
determineDriverClassName
()).
url
(
determineUrl
())
.
username
(
determineUsername
()).
password
(
determinePassword
());
...
...
spring-boot-docs/src/main/java/org/springframework/boot/jdbc/ConfigurableDataSourceExample.java
View file @
bb3f32fa
...
...
@@ -51,8 +51,8 @@ public class ConfigurableDataSourceExample {
@Bean
@ConfigurationProperties
(
"app.datasource"
)
public
HikariDataSource
dataSource
(
DataSourceProperties
properties
)
{
return
(
HikariDataSource
)
properties
.
initializeDataSourceBuilder
(
)
.
type
(
HikariDataSource
.
class
).
build
();
return
properties
.
initializeDataSourceBuilder
().
type
(
HikariDataSource
.
class
)
.
build
();
}
// end::configuration[]
...
...
spring-boot-docs/src/main/java/org/springframework/boot/jdbc/SimpleDataSourceExample.java
View file @
bb3f32fa
...
...
@@ -41,8 +41,7 @@ public class SimpleDataSourceExample {
@Bean
@ConfigurationProperties
(
"app.datasource"
)
public
HikariDataSource
dataSource
()
{
return
(
HikariDataSource
)
DataSourceBuilder
.
create
()
.
type
(
HikariDataSource
.
class
).
build
();
return
DataSourceBuilder
.
create
().
type
(
HikariDataSource
.
class
).
build
();
}
// end::configuration[]
...
...
spring-boot-docs/src/main/java/org/springframework/boot/jdbc/SimpleTwoDataSourcesExample.java
View file @
bb3f32fa
...
...
@@ -58,8 +58,7 @@ public class SimpleTwoDataSourcesExample {
@Bean
@ConfigurationProperties
(
"app.datasource.bar"
)
public
BasicDataSource
barDataSource
()
{
return
(
BasicDataSource
)
DataSourceBuilder
.
create
()
.
type
(
BasicDataSource
.
class
).
build
();
return
DataSourceBuilder
.
create
().
type
(
BasicDataSource
.
class
).
build
();
}
// end::configuration[]
...
...
spring-boot/src/main/java/org/springframework/boot/jdbc/DataSourceBuilder.java
View file @
bb3f32fa
...
...
@@ -39,11 +39,12 @@ import org.springframework.util.ClassUtils;
* inject additional properties into the result you can downcast it, or use
* {@code @ConfigurationProperties}.
*
* @param <T> type of DataSource produced by the builder
* @author Dave Syer
* @author Madhura Bhave
* @since 2.0.0
*/
public
class
DataSourceBuilder
{
public
final
class
DataSourceBuilder
<
T
extends
DataSource
>
{
private
static
final
String
[]
DATA_SOURCE_TYPE_NAMES
=
new
String
[]
{
"com.zaxxer.hikari.HikariDataSource"
,
...
...
@@ -56,24 +57,25 @@ public class DataSourceBuilder {
private
Map
<
String
,
String
>
properties
=
new
HashMap
<>();
public
static
DataSourceBuilder
create
()
{
return
new
DataSourceBuilder
(
null
);
public
static
DataSourceBuilder
<?>
create
()
{
return
new
DataSourceBuilder
<
DataSource
>
(
null
);
}
public
static
DataSourceBuilder
create
(
ClassLoader
classLoader
)
{
return
new
DataSourceBuilder
(
classLoader
);
public
static
DataSourceBuilder
<?>
create
(
ClassLoader
classLoader
)
{
return
new
DataSourceBuilder
<
DataSource
>
(
classLoader
);
}
p
ublic
DataSourceBuilder
(
ClassLoader
classLoader
)
{
p
rivate
DataSourceBuilder
(
ClassLoader
classLoader
)
{
this
.
classLoader
=
classLoader
;
}
public
DataSource
build
()
{
@SuppressWarnings
(
"unchecked"
)
public
T
build
()
{
Class
<?
extends
DataSource
>
type
=
getType
();
DataSource
result
=
BeanUtils
.
instantiateClass
(
type
);
maybeGetDriverClassName
();
bind
(
result
);
return
result
;
return
(
T
)
result
;
}
private
void
maybeGetDriverClassName
()
{
...
...
@@ -95,40 +97,38 @@ public class DataSourceBuilder {
binder
.
bind
(
ConfigurationPropertyName
.
EMPTY
,
Bindable
.
ofInstance
(
result
));
}
public
DataSourceBuilder
type
(
Class
<?
extends
DataSource
>
type
)
{
@SuppressWarnings
(
"unchecked"
)
public
<
D
extends
DataSource
>
DataSourceBuilder
<
D
>
type
(
Class
<
D
>
type
)
{
this
.
type
=
type
;
return
this
;
return
(
DataSourceBuilder
<
D
>)
this
;
}
public
DataSourceBuilder
url
(
String
url
)
{
public
DataSourceBuilder
<
T
>
url
(
String
url
)
{
this
.
properties
.
put
(
"url"
,
url
);
return
this
;
}
public
DataSourceBuilder
driverClassName
(
String
driverClassName
)
{
public
DataSourceBuilder
<
T
>
driverClassName
(
String
driverClassName
)
{
this
.
properties
.
put
(
"driverClassName"
,
driverClassName
);
return
this
;
}
public
DataSourceBuilder
username
(
String
username
)
{
public
DataSourceBuilder
<
T
>
username
(
String
username
)
{
this
.
properties
.
put
(
"username"
,
username
);
return
this
;
}
public
DataSourceBuilder
password
(
String
password
)
{
public
DataSourceBuilder
<
T
>
password
(
String
password
)
{
this
.
properties
.
put
(
"password"
,
password
);
return
this
;
}
@SuppressWarnings
(
"unchecked"
)
public
Class
<?
extends
DataSource
>
findType
()
{
if
(
this
.
type
!=
null
)
{
return
this
.
type
;
}
public
static
Class
<?
extends
DataSource
>
findType
(
ClassLoader
classLoader
)
{
for
(
String
name
:
DATA_SOURCE_TYPE_NAMES
)
{
try
{
return
(
Class
<?
extends
DataSource
>)
ClassUtils
.
forName
(
name
,
this
.
classLoader
);
classLoader
);
}
catch
(
Exception
ex
)
{
// Swallow and continue
...
...
@@ -138,7 +138,8 @@ public class DataSourceBuilder {
}
private
Class
<?
extends
DataSource
>
getType
()
{
Class
<?
extends
DataSource
>
type
=
findType
();
Class
<?
extends
DataSource
>
type
=
this
.
type
!=
null
?
this
.
type
:
findType
(
this
.
classLoader
);
if
(
type
!=
null
)
{
return
type
;
}
...
...
spring-boot/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderTests.java
View file @
bb3f32fa
...
...
@@ -71,6 +71,13 @@ public class DataSourceBuilderTests {
assertThat
(
this
.
dataSource
).
isInstanceOf
(
BasicDataSource
.
class
);
}
@Test
public
void
specificTypeOfDataSource
()
{
HikariDataSource
hikariDataSource
=
DataSourceBuilder
.
create
().
type
(
HikariDataSource
.
class
)
.
build
();
assertThat
(
hikariDataSource
).
isInstanceOf
(
HikariDataSource
.
class
);
}
final
class
HidePackagesClassLoader
extends
URLClassLoader
{
private
final
String
[]
hiddenPackages
;
...
...
spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java
View file @
bb3f32fa
...
...
@@ -86,7 +86,7 @@ public abstract class AbstractDataSourcePoolMetadataTests<D extends AbstractData
@Test
public
abstract
void
getValidationQuery
();
protected
DataSourceBuilder
initializeBuilder
()
{
protected
DataSourceBuilder
<?>
initializeBuilder
()
{
return
DataSourceBuilder
.
create
().
driverClassName
(
"org.hsqldb.jdbc.JDBCDriver"
)
.
url
(
"jdbc:hsqldb:mem:test"
).
username
(
"sa"
);
}
...
...
spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java
View file @
bb3f32fa
...
...
@@ -90,7 +90,7 @@ public class CommonsDbcp2DataSourcePoolMetadataTests
}
private
BasicDataSource
createDataSource
()
{
return
(
BasicDataSource
)
initializeBuilder
().
type
(
BasicDataSource
.
class
).
build
();
return
initializeBuilder
().
type
(
BasicDataSource
.
class
).
build
();
}
}
spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/HikariDataSourcePoolMetadataTests.java
View file @
bb3f32fa
...
...
@@ -51,8 +51,8 @@ public class HikariDataSourcePoolMetadataTests
}
private
HikariDataSource
createDataSource
(
int
minSize
,
int
maxSize
)
{
HikariDataSource
dataSource
=
(
HikariDataSource
)
initializeBuilder
(
)
.
type
(
HikariDataSource
.
class
).
build
();
HikariDataSource
dataSource
=
initializeBuilder
().
type
(
HikariDataSource
.
class
)
.
build
();
dataSource
.
setMinimumIdle
(
minSize
);
dataSource
.
setMaximumPoolSize
(
maxSize
);
return
dataSource
;
...
...
spring-boot/src/test/java/org/springframework/boot/jdbc/metadata/TomcatDataSourcePoolMetadataTests.java
View file @
bb3f32fa
...
...
@@ -51,8 +51,7 @@ public class TomcatDataSourcePoolMetadataTests
}
private
DataSource
createDataSource
(
int
minSize
,
int
maxSize
)
{
DataSource
dataSource
=
(
DataSource
)
initializeBuilder
().
type
(
DataSource
.
class
)
.
build
();
DataSource
dataSource
=
initializeBuilder
().
type
(
DataSource
.
class
).
build
();
dataSource
.
setMinIdle
(
minSize
);
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