首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >春管理数据源中的connection.createStatement永不返回

春管理数据源中的connection.createStatement永不返回
EN

Stack Overflow用户
提问于 2014-05-22 17:44:19
回答 1查看 469关注 0票数 0

在我的RESTful WS开发中,这是非常奇怪的。我使用Tomcat 7和Jersey1.8,Spring2.5和MySQL数据库。

我定义了两个像这样的数据源:

代码语言:javascript
复制
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">
  <property name="jndiName" value="jdbc/MAINDB" />
  <property name="resourceRef" value="true" />
</bean>
<bean id="orderDataSource" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">
  <property name="jndiName" value="jdbc/ORDERS" />
  <property name="resourceRef" value="true" />
</bean>

并将一个数据源注入servlet上下文,如下所示:

代码语言:javascript
复制
<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
  <property name="attributes">
    <map>
      <entry key="orderData">
        <ref bean="orderDataSource" />
      </entry>
    </map>
  </property>
</bean>

这个代码是:

代码语言:javascript
复制
orderDataSource = (DataSource) sc.getServletContext().getAttribute("orderData");
Order ord = new Order();
Statement stmt = null;
try {
    stmt = orderDataSource.getConnection().createStatement();
} catch (SQLException ex) {
    Logger.getLogger(OrdersResource.class.getName()).log(Level.SEVERE, null, ex);
}

得到6或7次完美的执行,从第8次请求开始,它会在createStatement()行停止运行,永远不会返回或抛出任何异常!

但是,MAINDB的所有其他资源API仍然工作得很好。

有人知道发生了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-23 05:58:13

你为什么要为这样的代码烦恼呢?如果您已经在使用Spring,请使用JdbcTemplate。它可以使用您的DataSource初始化,并将为您管理所有这些。

您需要从池中连接,但从未关闭它(实际上,语句也是如此)。首先,使用JdbcTemplate可以防止出现这些问题。

有点像

代码语言:javascript
复制
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.execute(...)

有关更多详细信息,请参阅javadoc

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23813833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档