Skip to content

Commit 5cae1a2

Browse files
committed
Merge branch '2.3.x' into 2.4.x
Closes gh-24790
2 parents afa9ccb + 7b1d07f commit 5cae1a2

File tree

2 files changed

+54
-5
lines changed

2 files changed

+54
-5
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionConfiguration.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2020 the original author or authors.
2+
* Copyright 2012-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@
2020

2121
import javax.sql.DataSource;
2222

23+
import org.springframework.beans.factory.ObjectProvider;
2324
import org.springframework.beans.factory.annotation.Autowired;
2425
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2526
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -33,6 +34,7 @@
3334
import org.springframework.jdbc.core.JdbcTemplate;
3435
import org.springframework.session.SessionRepository;
3536
import org.springframework.session.jdbc.JdbcIndexedSessionRepository;
37+
import org.springframework.session.jdbc.config.annotation.SpringSessionDataSource;
3638
import org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessionConfiguration;
3739

3840
/**
@@ -52,9 +54,11 @@ class JdbcSessionConfiguration {
5254

5355
@Bean
5456
@ConditionalOnMissingBean
55-
JdbcSessionDataSourceInitializer jdbcSessionDataSourceInitializer(DataSource dataSource,
56-
ResourceLoader resourceLoader, JdbcSessionProperties properties) {
57-
return new JdbcSessionDataSourceInitializer(dataSource, resourceLoader, properties);
57+
JdbcSessionDataSourceInitializer jdbcSessionDataSourceInitializer(
58+
@SpringSessionDataSource ObjectProvider<DataSource> sessionDataSource,
59+
ObjectProvider<DataSource> dataSource, ResourceLoader resourceLoader, JdbcSessionProperties properties) {
60+
return new JdbcSessionDataSourceInitializer(sessionDataSource.getIfAvailable(dataSource::getObject),
61+
resourceLoader, properties);
5862
}
5963

6064
@Configuration(proxyBeanMethods = false)

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationJdbcTests.java

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2020 the original author or authors.
2+
* Copyright 2012-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,6 +16,9 @@
1616

1717
package org.springframework.boot.autoconfigure.session;
1818

19+
import javax.sql.DataSource;
20+
21+
import org.apache.commons.dbcp2.BasicDataSource;
1922
import org.junit.jupiter.api.Test;
2023

2124
import org.springframework.boot.autoconfigure.AutoConfigurations;
@@ -29,6 +32,9 @@
2932
import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext;
3033
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
3134
import org.springframework.boot.web.servlet.FilterRegistrationBean;
35+
import org.springframework.context.annotation.Bean;
36+
import org.springframework.context.annotation.Configuration;
37+
import org.springframework.context.annotation.Primary;
3238
import org.springframework.jdbc.BadSqlGrammarException;
3339
import org.springframework.jdbc.core.JdbcOperations;
3440
import org.springframework.session.FlushMode;
@@ -37,6 +43,7 @@
3743
import org.springframework.session.data.redis.RedisIndexedSessionRepository;
3844
import org.springframework.session.hazelcast.HazelcastIndexedSessionRepository;
3945
import org.springframework.session.jdbc.JdbcIndexedSessionRepository;
46+
import org.springframework.session.jdbc.config.annotation.SpringSessionDataSource;
4047

4148
import static org.assertj.core.api.Assertions.assertThat;
4249
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
@@ -170,4 +177,42 @@ void customSaveMode() {
170177
});
171178
}
172179

180+
@Test
181+
void sessionDataSourceIsUsedWhenAvailable() {
182+
this.contextRunner.withUserConfiguration(SessionDataSourceConfiguration.class)
183+
.withPropertyValues("spring.session.store-type=jdbc").run((context) -> {
184+
JdbcIndexedSessionRepository repository = validateSessionRepository(context,
185+
JdbcIndexedSessionRepository.class);
186+
assertThat(repository).extracting("jdbcOperations").extracting("dataSource")
187+
.isEqualTo(context.getBean("sessionDataSource"));
188+
assertThatExceptionOfType(BadSqlGrammarException.class).isThrownBy(
189+
() -> context.getBean(JdbcOperations.class).queryForList("select * from SPRING_SESSION"));
190+
});
191+
}
192+
193+
@Configuration
194+
static class SessionDataSourceConfiguration {
195+
196+
@Bean
197+
@SpringSessionDataSource
198+
DataSource sessionDataSource() {
199+
BasicDataSource dataSource = new BasicDataSource();
200+
dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
201+
dataSource.setUrl("jdbc:hsqldb:mem:sessiondb");
202+
dataSource.setUsername("sa");
203+
return dataSource;
204+
}
205+
206+
@Bean
207+
@Primary
208+
DataSource mainDataSource() {
209+
BasicDataSource dataSource = new BasicDataSource();
210+
dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
211+
dataSource.setUrl("jdbc:hsqldb:mem:maindb");
212+
dataSource.setUsername("sa");
213+
return dataSource;
214+
}
215+
216+
}
217+
173218
}

0 commit comments

Comments
 (0)