【发布时间】:2014-08-02 20:11:24
【问题描述】:
我正在使用 Spring Data JPA 和 Hibernate 开发一个 Spring Web 应用程序,在 Tomcat 5.5 上运行。 Tomcat 使用 DBCP 进行连接池。
池是这样定义的:
<Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
logAbandoned="true" maxActive="100" maxIdle="30" maxWait="10000"
minIdle="3" name="..." password="..." removeAbandoned="true"
type="javax.sql.DataSource"
url="..." username="..." validationQuery="select 1" />
在 Java 端,我通过 JNDI 获取数据源,Spring 将对象作为单例进行管理,它仅用于创建 EntityManagerFactory。
现在我的问题。当我第一次在新启动的 Tomcat 上部署应用程序时,一切正常。如果我第一次热部署该应用程序,一切仍然正常。但是,如果我第二次进行热部署,则会出现以下异常:
java.sql.SQLException: Data source is closed
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1362)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
感谢任何想法,谢谢!
更新:我在 Tomcat 7.0.12 上进行了尝试,它在我的机器上并有同样的问题。我已经从 commons-dbcp 切换到 Tomcat JDBC 连接池,并且问题在 Tomcat 5.5 和 Tomcat 7 上都消失了。现在在我看来,commons-dbcp 中存在错误,或者 Spring 不适合它?有人知道更多吗?
【问题讨论】:
-
Tomcat 5.5?你确定吗? Apache 网站列出了 6、7 和 8。您的服务器有多少年了?对于 Java 1.4、Servlet 2.4 和 JSP 2.0?真的吗?
-
嗨,Elliott,是的,我确信这里的更新过程有点慢...... :-) 我们已经在 Java 1.6 上!
-
检查您使用的 spring 和 hibernate 版本的要求。那个 Tomcat 真的很老了。并且可能切换到不同的CP。
-
我们也遇到过很多问题。 UCP 似乎是唯一正确验证 oracle 连接的连接池:(
-
所以我想在我们升级之前我将不得不忍受这种情况。不应该再这么久了,我希望。谢谢大家。
标签: java spring hibernate tomcat apache-commons-dbcp