Use spring session JDBC with existing database (not springboot)
我的应用程序在没有Spring Boot的情况下与Spring Web MVC框架一起运行。 现在,我想使用spring session JDBC将会话存储到应用程序使用的数据库中。 我在网上找到的所有示例都使用Spring Boot,如果不使用Spring Boot,则它们使用的数据源配置为
1 2 3 4 5 6 | @Bean public EmbeddedDatabase dataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .addScript("org/springframework/session/jdbc/schema-h2.sql").build(); } |
我有使用HikariCP的数据源配置,并且我希望Spring会话使用此数据源配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @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; } |
如何使用当前配置与Spring Session集成?
据我了解spring-session javaconfig-jdbc示例/文档,您"只是"需要:
用
将您的
根据
(在servlet环境中-如您所愿)引入
1 2 3 4 5 6 | public class Initializer extends org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer { // <1> public Initializer() { super(YourConfig.class); // <2> } } |
如果您希望手动或使用外部工具安装数据库模式,则SQL脚本位于spring-session.jar(!org / springframework / session / jdbc / schema-@@ platform @@。sql)文件中,或者分别位于源代码存储库。
这些(application。)属性允许进一步定制:
1 2 3 4 5 6 7 8 9 10 | # 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 /源代码分发中,您还将找到"清理"(-drop)脚本
-
当前提供的平台是:
1
2
3
4
5
6
7
8
9
10db2
derby
h2
hsqldb
mysql
oracle
postgresql
sqlite
sqlserver
sybase
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | @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; } |
这一定会对您有帮助。