Начиная с Spring Boot 2.0.0, вы можете указать DataSource
, который Spring Session должен использовать, используя аннотацию @SpringSessionDataSource
.
Примечание к квалификатору для источника данных, который будет вставлен в JdbcOperationsSessionRepository.
Метод внутри класса Spring JdbcHttpSessionConfiguration
, который устанавливает требуемый источник данных.
@Autowired
public void setDataSource(@SpringSessionDataSource ObjectProvider<DataSource> springSessionDataSource, ObjectProvider<DataSource> dataSource)
Для достижения желаемого результата необходимо настроить вторичный источник данных для использования в Spring Session и аннотироватьбоб с @SpringSessionDataSource
.Ниже приведена конфигурация, которая работала для меня.
application.properties
session.datasource.url=jdbc:postgresql://localhost:5432/session
session.datasource.driverClassName=org.postgresql.Driver
session.datasource.username=postgres
session.datasource.password=thepassword
primary.datasource.url=jdbc:postgresql://localhost:5432/postgres
primary.datasource.driverClassName=org.postgresql.Driver
primary.datasource.username=postgres
primary.datasource.password=thepassword
Конфигурация базы данных
@Configuration
@EnableTransactionManagement
public class DatabaseConfig {
@Bean
@Primary
@ConfigurationProperties("primary.datasource")
public DataSourceProperties primaryDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
public DataSource primaryDataSource() {
return primaryDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
@Bean
@ConfigurationProperties("session.datasource")
public DataSourceProperties sessionDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@SpringSessionDataSource
public DataSource springSessionDataSource() {
return sessionDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
}
Не забудьте запустить файл схемы org/springframework/session/jdbc/schema-thedbplatform.sql
на вашемдБ, если вы не используете встроенную базу данных.В моем случае я запустил org/springframework/session/jdbc/schema-postgresql.sql
.
Если вы хотите использовать базу данных H2 для управления сессиями, вы можете удалить session.datasource...
из вашего application.properties
и настроить источники данных следующим образом.
@Configuration
@EnableTransactionManagement
public class DatabaseConfig {
@Bean
@Primary
@ConfigurationProperties("primary.datasource")
public DataSourceProperties primaryDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
public DataSource primaryDataSource() {
return primaryDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
@Bean
@SpringSessionDataSource
public EmbeddedDatabase springSessionDataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("org/springframework/session/jdbc/schema-h2.sql").build();
}
}