Spring mvc Spring MVC和JDBC数据源
在Spring MVC web app中配置Spring mvc Spring MVC和JDBC数据源,spring-mvc,error-handling,datasource,Spring Mvc,Error Handling,Datasource,在Spring MVC web app中配置servlet context.xml的所有示例中,所需的任何数据源都配置为该文件中的bean,可能使用容器中定义的连接池。例如,在我的org.springframework.web.servlet.DispatcherServlet的servlet context.xml中,我初始化数据源,如下所示: <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/ora1" exp
servlet context.xml
的所有示例中,所需的任何数据源都配置为该文件中的bean,可能使用容器中定义的连接池。例如,在我的org.springframework.web.servlet.DispatcherServlet的servlet context.xml
中,我初始化数据源,如下所示:
<jee:jndi-lookup id="dataSource"
jndi-name="java:comp/env/jdbc/ora1"
expected-type="javax.sql.DataSource"
resource-ref="true" />
。。。等等
我有两个问题:
是否可以捕获此错误并向用户显示更友好的内容?我个人对此表示怀疑,因为servlet无法超越init()
阶段
是否有效而不是在servlet上下文中初始化数据源,并在需要连接时从@Controller动态执行?与更传统的方法一样,例如:
public static DataSource getJndiDataSource() throws NamingException {
Context initialContext = new InitialContext();
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/ora1");
return ds;
}
感谢您的回复
用户不应该看到异常,句号。您应该配置一个友好的错误页面,告诉用户站点已关闭,稍后再返回。堆栈跟踪应该只出现在日志中。你需要细节来找出问题所在
不,这是在启动应用程序之前应由应用程序服务器处理的问题。应用启动前,应成功初始化连接池。不要试图在控制器中执行此操作李>
可能您的连接池配置不正确。我建议彻底擦洗,以确保它是正确的。您可以使用几个参数,比如在连接从池中释放之前检查连接,等等
更新:
DBA总是有可能关闭数据库。我建议你开始与他们对话,这样他们会给你一个提示和一个停机窗口。使您的应用程序能够显示“关闭以进行维护”页面,即la堆栈溢出。是什么导致servletinit()
方法中引发异常?DB处于脱机状态,并且无法创建数据源
对象。我无法控制数据库,但需要考虑这种情况。(1)我知道这一点,但我想知道如何在servlet初始化时捕获错误,以随后显示友好的错误页面!(2) 我无法控制数据库,如果DBA认为适合将其脱机,我希望我的web应用程序正常地失败。(1)(2)在controller中执行操作仍然无效。第一个答案将尽可能优雅地纠正它。那么您是说没有办法在Spring MVC servlet的init()阶段捕获错误,以免将堆栈跟踪转储到浏览器?这就是我要问的问题。如果这是不可能的,我没有问题,我只是想知道,这样我可以继续与其他东西!我尝试了您提供的链接中的建议,但我认为这里捕获的异常要比init()
public static DataSource getJndiDataSource() throws NamingException {
Context initialContext = new InitialContext();
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/ora1");
return ds;
}