这在我的RESTful WS开发中非常奇怪。我正在使用Tomcat 7和Jersey 1.8,Spring 2.5和MySQL数据库。
我定义了两个这样的数据源:
<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上下文,如下所示:
<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
<property name="attributes">
<map>
<entry key="orderData">
<ref bean="orderDataSource" />
</entry>
</map>
</property>
</bean>
和这段代码:
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仍能正常运行。
任何人都知道发生了什么?
答案 0 :(得分:0)
你为什么要自己打扰这些代码?如果您已经使用Spring,请改用JdbcTemplate
。它可以使用您的DataSource
进行初始化,并为您管理所有这些内容。
您需要从池中进行连接,但是您从不关闭它(实际上对于语句也是如此)。使用JdbcTemplate
可以防止您首先遇到这些问题。
像
这样的东西JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.execute(...)
有关详细信息,请参阅the javadoc。