在Spring MVC web-app中配置servlet-context.xml
的所有示例中,所需的任何数据源都配置为此文件中的bean,可能使用容器中定义的连接池。例如,在我的servlet-context.xml
org.springframework.web.servlet.DispatcherServlet
中,我初始化了我的数据源:
<jee:jndi-lookup id="dataSource"
jndi-name="java:comp/env/jdbc/ora1"
expected-type="javax.sql.DataSource"
resource-ref="true" />
如果由于某种原因导致数据库出现故障,那么初始化阶段的Web应用程序错误会将大约一半的Java堆栈跟踪抛入浏览器,如下所示:
javax.servlet.ServletException: Servlet.init() for servlet appServlet threw exception at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1214) at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809) at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:615)
......等等。
我有两个问题:
init()
阶段。是否有效 NOT 来初始化servlet上下文中的数据源并从@Controller动态执行,因为需要连接?与更常规的方法一样,例如:
public static DataSource getJndiDataSource() throws NamingException {
Context initialContext = new InitialContext();
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/ora1");
return ds;
}
感谢您的回复!
答案 0 :(得分:0)
也许您的连接池配置不正确。我建议彻底擦洗,以确保它是正确的。您可以使用多个参数,例如在从池中释放连接之前检查连接等。查看这些参数。
更新:
DBA始终可以关闭数据库。我建议你与他们发起一个对话,这样他们就会给你一个抬头和一个停机窗口。使您的应用程序可以显示“向下维护”页面,即“堆栈溢出”。