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
7b1d07fa
Commit
7b1d07fa
authored
Jan 12, 2021
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use SpringSessionDataSource-annotated DataSource when one is available
Fixes gh-24624
parent
22ff229d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
54 additions
and
5 deletions
+54
-5
JdbcSessionConfiguration.java
.../boot/autoconfigure/session/JdbcSessionConfiguration.java
+8
-4
SessionAutoConfigurationJdbcTests.java
...oconfigure/session/SessionAutoConfigurationJdbcTests.java
+46
-1
No files found.
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionConfiguration.java
View file @
7b1d07fa
/*
* Copyright 2012-202
0
the original author or authors.
* Copyright 2012-202
1
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.
...
...
@@ -20,6 +20,7 @@ import java.time.Duration;
import
javax.sql.DataSource
;
import
org.springframework.beans.factory.ObjectProvider
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
...
...
@@ -32,6 +33,7 @@ import org.springframework.core.io.ResourceLoader;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.session.SessionRepository
;
import
org.springframework.session.jdbc.JdbcIndexedSessionRepository
;
import
org.springframework.session.jdbc.config.annotation.SpringSessionDataSource
;
import
org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessionConfiguration
;
/**
...
...
@@ -51,9 +53,11 @@ class JdbcSessionConfiguration {
@Bean
@ConditionalOnMissingBean
JdbcSessionDataSourceInitializer
jdbcSessionDataSourceInitializer
(
DataSource
dataSource
,
ResourceLoader
resourceLoader
,
JdbcSessionProperties
properties
)
{
return
new
JdbcSessionDataSourceInitializer
(
dataSource
,
resourceLoader
,
properties
);
JdbcSessionDataSourceInitializer
jdbcSessionDataSourceInitializer
(
@SpringSessionDataSource
ObjectProvider
<
DataSource
>
sessionDataSource
,
ObjectProvider
<
DataSource
>
dataSource
,
ResourceLoader
resourceLoader
,
JdbcSessionProperties
properties
)
{
return
new
JdbcSessionDataSourceInitializer
(
sessionDataSource
.
getIfAvailable
(
dataSource:
:
getObject
),
resourceLoader
,
properties
);
}
@Configuration
(
proxyBeanMethods
=
false
)
...
...
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationJdbcTests.java
View file @
7b1d07fa
/*
* Copyright 2012-20
19
the original author or authors.
* Copyright 2012-20
21
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.
...
...
@@ -16,6 +16,9 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
session
;
import
javax.sql.DataSource
;
import
org.apache.commons.dbcp2.BasicDataSource
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.autoconfigure.AutoConfigurations
;
...
...
@@ -28,6 +31,9 @@ import org.springframework.boot.test.context.FilteredClassLoader;
import
org.springframework.boot.test.context.assertj.AssertableWebApplicationContext
;
import
org.springframework.boot.test.context.runner.WebApplicationContextRunner
;
import
org.springframework.boot.web.servlet.FilterRegistrationBean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Primary
;
import
org.springframework.jdbc.BadSqlGrammarException
;
import
org.springframework.jdbc.core.JdbcOperations
;
import
org.springframework.session.FlushMode
;
...
...
@@ -36,6 +42,7 @@ import org.springframework.session.data.mongo.MongoIndexedSessionRepository;
import
org.springframework.session.data.redis.RedisIndexedSessionRepository
;
import
org.springframework.session.hazelcast.HazelcastIndexedSessionRepository
;
import
org.springframework.session.jdbc.JdbcIndexedSessionRepository
;
import
org.springframework.session.jdbc.config.annotation.SpringSessionDataSource
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThatExceptionOfType
;
...
...
@@ -104,6 +111,19 @@ class SessionAutoConfigurationJdbcTests extends AbstractSessionAutoConfiguration
});
}
@Test
void
sessionDataSourceIsUsedWhenAvailable
()
{
this
.
contextRunner
.
withUserConfiguration
(
SessionDataSourceConfiguration
.
class
)
.
withPropertyValues
(
"spring.session.store-type=jdbc"
).
run
((
context
)
->
{
JdbcIndexedSessionRepository
repository
=
validateSessionRepository
(
context
,
JdbcIndexedSessionRepository
.
class
);
assertThat
(
repository
).
extracting
(
"jdbcOperations"
).
extracting
(
"dataSource"
)
.
isEqualTo
(
context
.
getBean
(
"sessionDataSource"
));
assertThatExceptionOfType
(
BadSqlGrammarException
.
class
).
isThrownBy
(
()
->
context
.
getBean
(
JdbcOperations
.
class
).
queryForList
(
"select * from SPRING_SESSION"
));
});
}
@Test
void
customTableName
()
{
this
.
contextRunner
...
...
@@ -157,4 +177,29 @@ class SessionAutoConfigurationJdbcTests extends AbstractSessionAutoConfiguration
});
}
@Configuration
static
class
SessionDataSourceConfiguration
{
@Bean
@SpringSessionDataSource
DataSource
sessionDataSource
()
{
BasicDataSource
dataSource
=
new
BasicDataSource
();
dataSource
.
setDriverClassName
(
"org.hsqldb.jdbcDriver"
);
dataSource
.
setUrl
(
"jdbc:hsqldb:mem:sessiondb"
);
dataSource
.
setUsername
(
"sa"
);
return
dataSource
;
}
@Bean
@Primary
DataSource
mainDataSource
()
{
BasicDataSource
dataSource
=
new
BasicDataSource
();
dataSource
.
setDriverClassName
(
"org.hsqldb.jdbcDriver"
);
dataSource
.
setUrl
(
"jdbc:hsqldb:mem:maindb"
);
dataSource
.
setUsername
(
"sa"
);
return
dataSource
;
}
}
}
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