关于数据库和JNDI,什么是validationQuery?

5
我似乎遇到了与这个原始SO问题的作者完全相同的问题。
问题是,他通过以下评论回答了自己的问题:
“我解决了我的问题,我向我的JNDI数据源添加了一个validationQuery。”
不幸的是,对我来说这并没有什么意义,也没有帮助我解决我的问题。所以我问:关于我的数据库(Sybase)和用于保存服务器查找信息的JNDI条目,"validationQuery"是什么?
提前致谢。

这是 [tag:sybase-asa]、[tag:sybase-ase]、[tag:sybase-iq] 还是 [tag:sqlanywhere]?试图清理 [tag:sybase] 标签... - Danny Beckett
3个回答

11
验证查询是数据源运行的一个查询,用于在返回连接之前验证 Connection 是否仍然打开。这是Tomcat关于验证查询的定义; 滚动到“4.配置Tomcat资源工厂”部分的中间位置,查找“validationQuery”属性。 编辑 根据此答案,如果验证查询失败,则不会抛出任何错误; 坏/关闭的连接将被丢弃,并创建另一个连接以替换它。

感谢@rgettman (+1) - 所以这是一个查询,我配置Sybase(数据源)在返回连接之前运行。我假设它会抛出一个异常,我可以捕获,或者返回一些错误值,我可以在应用程序端使用它来确定连接不可用,并且我需要再试一次?再次感谢! - IAmYourFaja
还有一件事:那篇文章没有解释当连接不可用时会发生什么?会抛出错误吗? - IAmYourFaja

2

这与JNDI无关,而是与JDBC数据源相关。

验证查询用于验证从数据源连接池中获取的连接,在将其移交给客户端之前进行验证。通常这些是低影响的查询,例如“SELECT 1 ...”或“SELECT SYSDATE ...”。


谢谢@orid (+1) - 请看看我在rgettman的回答下面的问题 - 我也有同样的问题问你! - IAmYourFaja

1
我想这是一个测试数据库连接是否正常的查询。在应用服务器级别上进行一种ping的操作。
在原始问题中,定期对数据库进行ping操作可以保持连接处于打开状态。

谢谢@Funtik (+1) - 请看看我在rgettman的回答下面的问题 - 我也有同样的问题! - IAmYourFaja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接