我的应用程序在没有弹簧引导的情况下使用Spring Web mvc框架运行。现在我想使用春季会话 JDBC 将会话存储到应用程序使用的数据库中。我在网上找到的所有示例都使用 spring boot,如果不使用 spring boot,它们使用的数据源配置EmbeddedDatabase
如下所示:
@Bean
public EmbeddedDatabase dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("org/springframework/session/jdbc/schema-h2.sql").build();
}
我使用 HikariCP 进行了数据源配置,我希望春季会话使用此数据源配置。
@Bean
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setDriverClassName(env.getRequiredProperty("jdbc.driver"));
config.setJdbcUrl(env.getRequiredProperty("jdbc.url"));
config.setUsername(env.getRequiredProperty("jdbc.username"));
config.setPassword(env.getRequiredProperty("jdbc.password"));
config.setMinimumIdle(env.getRequiredProperty("jdbc.pool.minimumIdle", Integer.class));
config.setMaximumPoolSize(env.getRequiredProperty("jdbc.pool.maximumPoolSize", Integer.class));
config.addDataSourceProperty("cachePrepStmts", env.getRequiredProperty("jdbc.prop.cachePrepStmts"));
config.addDataSourceProperty("prepStmtCacheSize", env.getRequiredProperty("jdbc.prop.prepStmtCacheSize"));
config.addDataSourceProperty("prepStmtCacheSqlLimit", env.getRequiredProperty("jdbc.prop.prepStmtCacheSqlLimit"));
HikariDataSource ds = new HikariDataSource(config);
return ds;
}
如何使用当前配置与春季会话集成?
据我了解春季会话javaconfig-jdbc示例/文档,您"只需要"
:用
org.springframework.session.jdbc.config.annotation.web.http.EnableJdbcHttpSession
注释"你的配置类"(YourConfig
)。将
DataSource
命名为"数据源"。(完成!;)提供
PlatformTransactionManager
豆,基于YourConfig
中的dataSource
。(在 servlet 环境中 - 就像你的一样)引入引用
YourConfig
的AbstractHttpSessionApplicationInitializer
(在类路径中):public class Initializer extends org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer { // <1> public Initializer() { super(YourConfig.class); // <2> } }
如果您希望手动或使用外部工具安装db 模式,SQL 脚本位于 spring-session.jar(!org/springframework/session/jdbc/schema-@@platform@@.sql) 文件中或分别位于源代码存储库中。
这些(应用程序。属性允许进一步自定义:
# Session store type. [jdbc|redis|hazelcast|mongodb]
spring.session.store-type=jdbc
# Session timeout. If a duration suffix is not specified, seconds will be used.
server.servlet.session.timeout=
# Database schema initialization mode. [alwys | never | embedded]
spring.session.jdbc.initialize-schema=always
# Path to the SQL file to use to initialize the database schema.(see: https://github.com/spring-projects/spring-session/tree/master/spring-session-jdbc/src/main/resources/org/springframework/session/jdbc)
spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-@@platform@@.sql
# custom spring session table name (see : https://github.com/spring-projects/spring-session/issues/1230)
spring.session.jdbc.table-name=SPRING_SESSION
- 在jar/source分发中,您还可以找到"清理"(-drop)脚本。
目前提供的平台是:
db2 derby h2 hsqldb mysql oracle postgresql sqlite sqlserver sybase
@Autowired
private Environment env;
@Bean
public PlatformTransactionManager transactionManager () {
EntityManagerFactory factory = entityManagerFactory();
return new JpaTransactionManager(factory);
}
@Bean
public EntityManagerFactory entityManagerFactory () {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setShowSql(Boolean.TRUE);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("com.your.domain.project");
factory.setDataSource(dataSource());
factory.setJpaProperties(additionalProperties()); // any addtional properties of your ORM
factory.afterPropertiesSet();
factory.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
return factory.getObject();
}
@Bean
public DataSource dataSource () {
final com.mchange.v2.c3p0.ComboPooledDataSource comboDataSource = new ComboPooledDataSource();
try {
comboDataSource.setDriverClass(env.getProperty("jdbc.driver"));
comboDataSource.setJdbcUrl(env.getProperty("jdbc.url"));
comboDataSource.setUser(env.getProperty("jdbc.user"));
comboDataSource.setPassword(env.getProperty("jdbc.properties"));
} catch (PropertyVetoException e) {
e.printStackTrace();
}
return comboDataSource;
}
这肯定会对您有所帮助。