我的应用程序使用SpringWebMVC框架运行,没有Spring Boot。现在,我想使用spring会话JDBC将会话存储到应用程序使用的数据库中。我在网上找到的所有示例都使用spring boot,如果没有使用spring boot,那么他们使用的数据源配置是嵌入式数据库,如下所示:
@Bean
public EmbeddedDatabase dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("org/springframework/session/jdbc/schema-h2.sql").build();
}
我有使用HikariCP的数据源配置,我希望spring会话使用此数据源配置。
@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会话集成?
@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;
}
这肯定会对你有所帮助。
正如我所理解的Spring-会话javaconfig-jdbc示例/doc,您“只”需要:
>
用注释"your config class"(
。YourConfig
),org.springframework.session.jdbc.config.annotation.web.http.EnableJdbcHttpSession
将您的数据源命名为“数据源”。(完成!;)
基于您的配置中的数据源,提供一个PlatformTransactionManager bean。
(在servlet环境中-就像您的环境一样)引入一个抽象HttpSessionApplicationInitializer(在类路径中)引用您的配置:
public class Initializer extends org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer { // <1>
public Initializer() {
super(YourConfig.class); // <2>
}
}
如果您希望手动或使用外部工具安装db模式,SQL脚本位于spring-session.jar(! org/springFramework/text/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
>
目前提供的平台有:
db2
derby
h2
hsqldb
mysql
oracle
postgresql
sqlite
sqlserver
sybase
我需要在代码中实现JDBC会话。为此,我按照https://www.baeldung.com/spring-session-jdbc. 我导入了maven依赖项并添加了spring。一场应用程序中的存储类型=jdbc。属性文件。然后我运行程序,它抛出了一系列错误。我不能确切地理解它在尖叫什么。如果有人能帮助我,我真的很感激。 这是我得到的错误:
为了将会话保存在数据库中,我在这里使用这个示例实现了Spring会话JDBC。我在使用@Autow的会话范围时遇到问题:我JavaClass如下: 然后我在会话\u范围内注册这个bean,如下所示: 在控制器中,我正在对其进行布线并尝试使用: 当我尝试运行时,出现以下错误:
我使用的是Spring会话JDBC,并注意到当用户进行身份验证后数据库关闭时,下一个请求将导致嵌入的Tomcat白色错误页(500)。Spring Boot允许我们使用@ControllerAdvice或ErrorController自定义错误页面。我无法使用这些机制,因为我认为异常发生在请求处理周期的早期。我在控制器通知和ErrorController中都设置了断点,没有中断发生。 堆栈跟踪显示
问题内容: 我有一个spring / jdbc / oracle 10g应用程序。Oracle服务器数据库时区设置为GMT + 2 JVM时区设置为GMT + 2(即使对于我而言这无关紧要)。 我有一个执行某些日期操作的存储过程。问题是,即使我未在代码/配置中明确设置会话时区,会话时区也不同于数据库时区(GMT)。 据我所知,会话时区默认情况下等于数据库时区。知道为什么会话时区与数据库时区不同,或
当您使用spring-sesion-jdbc时,会话在DB中以字节的形式序列化,这意味着每次将Spring升级到具有不兼容的Session.serialVersionUUID的版本时,您都必须删除所有会话。 我想用JSON格式存储会话,但在谷歌上搜索了一下之后,似乎没有人这样做过。 当您认为使用JSON在Redis中存储会话是常见的做法时,这很奇怪。 为什么没有一种标准的方法以JSON格式在JDB
我使用Spring Boot和Spring会话来控制一个使用ReactJS作为前端的应用程序。我的问题很简单,我尝试了几种方法来处理,但都没有成功。 React部分使用AJAX在登录后调用Spring REST服务(我也使用Spring Security),这至少需要30分钟。之后,会话停止,所有调用都会收到一个302,并以登录页面作为响应。这是意料之中的。 但我的问题是:有什么更好的方法来延长后