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
72551242
Commit
72551242
authored
Jul 29, 2020
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allow XADataSource auto-config with no spring.datasource properties
Fixes gh-20229
parent
5ea8bb06
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
40 additions
and
8 deletions
+40
-8
pom.xml
spring-boot-project/spring-boot-autoconfigure/pom.xml
+5
-0
XADataSourceAutoConfiguration.java
...oot/autoconfigure/jdbc/XADataSourceAutoConfiguration.java
+16
-7
XADataSourceAutoConfigurationTests.java
...utoconfigure/jdbc/XADataSourceAutoConfigurationTests.java
+19
-1
No files found.
spring-boot-project/spring-boot-autoconfigure/pom.xml
View file @
72551242
...
...
@@ -877,6 +877,11 @@
<artifactId>
transactions-jms
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
com.ibm.db2
</groupId>
<artifactId>
jcc
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
com.jayway.jsonpath
</groupId>
<artifactId>
json-path
</artifactId>
...
...
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/XADataSourceAutoConfiguration.java
View file @
72551242
/*
* Copyright 2012-20
19
the original author or authors.
* Copyright 2012-20
20
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -13,9 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
import
java.util.HashMap
;
import
java.util.Map
;
import
javax.sql.DataSource
;
import
javax.sql.XADataSource
;
import
javax.transaction.TransactionManager
;
...
...
@@ -28,6 +30,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.DataSourceBeanCreationException
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.boot.context.properties.bind.Bindable
;
import
org.springframework.boot.context.properties.bind.Binder
;
...
...
@@ -102,11 +105,17 @@ public class XADataSourceAutoConfiguration implements BeanClassLoaderAware {
}
private
ConfigurationPropertySource
getBinderSource
(
DataSourceProperties
dataSourceProperties
)
{
MapConfigurationPropertySource
source
=
new
MapConfigurationPropertySource
();
source
.
put
(
"user"
,
dataSourceProperties
.
determineUsername
());
source
.
put
(
"password"
,
dataSourceProperties
.
determinePassword
());
source
.
put
(
"url"
,
dataSourceProperties
.
determineUrl
());
source
.
putAll
(
dataSourceProperties
.
getXa
().
getProperties
());
Map
<
Object
,
Object
>
properties
=
new
HashMap
<
Object
,
Object
>();
properties
.
putAll
(
dataSourceProperties
.
getXa
().
getProperties
());
properties
.
computeIfAbsent
(
"user"
,
(
key
)
->
dataSourceProperties
.
determineUsername
());
properties
.
computeIfAbsent
(
"password"
,
(
key
)
->
dataSourceProperties
.
determinePassword
());
try
{
properties
.
computeIfAbsent
(
"url"
,
(
key
)
->
dataSourceProperties
.
determineUrl
());
}
catch
(
DataSourceBeanCreationException
ex
)
{
// Continue as not all XA DataSource's require a URL
}
MapConfigurationPropertySource
source
=
new
MapConfigurationPropertySource
(
properties
);
ConfigurationPropertyNameAliases
aliases
=
new
ConfigurationPropertyNameAliases
();
aliases
.
addAliases
(
"user"
,
"username"
);
return
source
.
withAliases
(
aliases
);
...
...
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/XADataSourceAutoConfigurationTests.java
View file @
72551242
/*
* Copyright 2012-20
19
the original author or authors.
* Copyright 2012-20
20
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -19,10 +19,14 @@ package org.springframework.boot.autoconfigure.jdbc;
import
javax.sql.DataSource
;
import
javax.sql.XADataSource
;
import
com.ibm.db2.jcc.DB2XADataSource
;
import
org.hsqldb.jdbc.pool.JDBCXADataSource
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.autoconfigure.AutoConfigurations
;
import
org.springframework.boot.jdbc.XADataSourceWrapper
;
import
org.springframework.boot.test.context.FilteredClassLoader
;
import
org.springframework.boot.test.context.runner.ApplicationContextRunner
;
import
org.springframework.boot.test.util.TestPropertyValues
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext
;
...
...
@@ -60,6 +64,20 @@ class XADataSourceAutoConfigurationTests {
assertThat
(
dataSource
.
getUser
()).
isEqualTo
(
"un"
);
}
@Test
void
createNonEmbeddedFromXAProperties
()
{
new
ApplicationContextRunner
().
withConfiguration
(
AutoConfigurations
.
of
(
XADataSourceAutoConfiguration
.
class
))
.
withUserConfiguration
(
FromProperties
.
class
)
.
withClassLoader
(
new
FilteredClassLoader
(
"org.h2.Driver"
,
"org.hsqldb.jdbcDriver"
))
.
withPropertyValues
(
"spring.datasource.xa.data-source-class-name:com.ibm.db2.jcc.DB2XADataSource"
,
"spring.datasource.xa.properties.user:test"
,
"spring.datasource.xa.properties.password:secret"
)
.
run
((
context
)
->
{
MockXADataSourceWrapper
wrapper
=
context
.
getBean
(
MockXADataSourceWrapper
.
class
);
XADataSource
xaDataSource
=
wrapper
.
getXaDataSource
();
assertThat
(
xaDataSource
).
isInstanceOf
(
DB2XADataSource
.
class
);
});
}
@Test
void
createFromClass
()
throws
Exception
{
ApplicationContext
context
=
createContext
(
FromProperties
.
class
,
...
...
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