我目前正在开发一个java应用程序。Spring
它是一个带有and的独立客户端Hibernate
。也C3P0
。
在以前的版本中,我们使用标准用户(在配置文件中硬编码)进行数据库连接,但现在我们对其进行了更改,以便每个用户都必须提供自己的凭据。
带有数据库代码的 bean 基本上是按需创建的。
我更改了 XML 文件并添加了一个后处理器,用于设置凭据以及一些连接设置。现在看起来与此类似:
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
configurer = new PropertyPlaceholderConfigurer();
// properties are retrieved from a private method
configurer.setProperties(getProperties());
context.addBeanFactoryPostProcessor(configurer);
context.setConfigLocations(new String[] { "first.xml","second.xml" });
context.refresh();
return context.getBean("myClass", MyClass.class);
这一切都按预期工作,但现在我们到达了我目前卡住的部分。
我想为连接提供一个测试功能,以便用户可以单击一个按钮,然后被告知他的凭据是否被接受。
我的第一个想法是在数据库上做一个简单的选择。然而,通过日志筛选,我注意到 Spring 在refresh()
(或者更确切地说是 bean 的实例化)期间尝试连接到数据库。我可以在日志中看到异常,例如:
java.sql.SQLException: Connections could not be acquired from the underlying database!
不幸的是,Spring 似乎并不真正关心。异常被记录下来但refresh()
完成并且因此不会引发任何异常。我曾希望我可以简单地捕获异常,然后我就会知道连接失败了。
我可以按计划进行选择,但我想尽可能地限制连接尝试,因为数据库服务器会在多次尝试后阻止用户。即使有很多尝试(在我更改连接池的设置之前已经有一些乐趣)。
我对这个问题的搜索几乎一无所获。有没有办法以某种方式获得异常?或者 Spring 是否提供了一种 API,可以告诉我实例化/刷新期间的连接错误?
如果做不到这一点,有什么替代方法的想法吗?最好只需要一次尝试即可确定连接是否可能。
编辑:对于任何感兴趣的人:我接受了 Santosh 的建议,并在JDBC
.
不幸的是,似乎没有简单的方法来利用 bean 实例化期间遇到的数据库错误/异常。