与JDBC集成的Spring会话

时间:2016-06-02 08:09:29

标签: spring session jdbc spring-session

我是Spring Session的新手,希望使用嵌入式数据库来存储会话信息。我按照所有步骤进行操作 http://docs.spring.io/spring-session/docs/current/reference/html5/guides/httpsession-jdbc.html使用版本1.2.0的spring-session-jdbc,但仅使用Spring-web of 3.2.4 重复显示以下错误:

Caused by: org.postgresql.util.PSQLException: ERROR: relation "spring_session" does not exist 'Position: 13
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2198)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1927)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:561)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:419)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:365)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
    at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:824)
    at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:818)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:589)
    ... 21 more'

这个问题已经困扰了我好几天了。请帮忙。

这是xml配置

<bean class="org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessi‌​onConfiguration"/> 
<jdbc:embedded-database id="dataSource02" type="H2">
    <jdbc:script location="classpath:org/springframework/session/jdbc/schema-h2.sql"/>
</jdbc:embedded-database> 
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <constructor-arg ref="dataSource02"/>
</bean>

1 个答案:

答案 0 :(得分:4)

您的问题源于您使用多个数据源的事实,因为在您配置辅助嵌入式数据源以存储会话时,所提供的堆栈跟踪包括PostgreSQL JDBC驱动程序类。

Spring Session配置选择主数据源(PostgreSQL)并期望在那里找到会话表。

我建议您使用主数据源存储会话数据,但如果您坚持为此目的使用辅助/嵌入数据源,则需要覆盖JdbcOperationsSessionRepository提供的JdbcHttpSessionConfiguration#sessionRepository bean使用您自己的实例,它是使用您的辅助数据源及其相应的交易管理器创建的。请注意,bean必须命名为sessionRepository才能覆盖JdbcHttpSessionConfiguration中的一个。