Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring MVC/Spring JDBC web应用程序中捕获丢失的数据源时出错_Java_Spring Mvc_Jdbc_Error Detection - Fatal编程技术网

Java 在Spring MVC/Spring JDBC web应用程序中捕获丢失的数据源时出错

Java 在Spring MVC/Spring JDBC web应用程序中捕获丢失的数据源时出错,java,spring-mvc,jdbc,error-detection,Java,Spring Mvc,Jdbc,Error Detection,我已经编写了一个web应用程序,它使用SpringMVC库和SpringJDBC连接到Oracle数据库。我在Oracle上创建存储过程时没有使用任何ORM类型库来完成我的工作,对此我非常满意。 我使用Tomcat容器管理的Oracle连接池 顺便说一句,这个应用程序通常运行得非常好 但是。。。 前几天,当我试图在另一个Tomcat实例上设置应用程序时,我注意到我忘记了配置连接池,显然应用程序无法获得org.apache.commons.dbcp.BasicDataSource对象,所以它崩溃了

我已经编写了一个web应用程序,它使用SpringMVC库和SpringJDBC连接到Oracle数据库。我在Oracle上创建存储过程时没有使用任何ORM类型库来完成我的工作,对此我非常满意。 我使用Tomcat容器管理的Oracle连接池

顺便说一句,这个应用程序通常运行得非常好

但是。。。 前几天,当我试图在另一个Tomcat实例上设置应用程序时,我注意到我忘记了配置连接池,显然应用程序无法获得org.apache.commons.dbcp.BasicDataSource对象,所以它崩溃了

我在tomcat context.conf中定义池参数

在my web.xml中,我有:


我有一些建议:

您是否尝试过在Spring中而不是在Tomcat中定义datasource对象?这样,您就可以将所有配置参数放在一个地方

您是否使用DBCP上的来测试连接

如果有StackTrace,您能否捕捉它并显示更友好的消息


另外,请看哪种池实现更快。

这纯粹是一个技术问题,这是StackOverflow的,但请不要在那里重新发布它-如果有足够多的人投票关闭它,它将自动迁移。我想我要说的是,在这种情况下,似乎是Spring容器抛出了错误,当它试图初始化时——不是我写的代码,而是我直接控制的代码……我感觉这里有一些东西需要解耦:我的MVC应用程序要工作,它取决于初始化时的数据源对象。我认为是数据源对象的存在使得系统的模型部分,即模型、视图、控制器得以存在。但是没有模型的初始化,系统就坏了,我无法使用控制器将视图更改为一条漂亮的错误消息。我怀疑应用程序的初始化不应该依赖于可用的数据源,并且控制器应该请求数据源对象。1不,cxn池被其他应用程序使用,所以我认为最好让Tomcat管理它?2不-我需要看看这个,谢谢。3这实际上是我的问题-我如何捕获这个错误?看看你上面的评论,如果Spring在初始化时抛出异常,那么当web应用启动时。然后,您可以在用户开始使用站点之前修复连接参数?是的。。。正如我所说,在正常情况下没有问题,但如果数据库宕机,我无法控制数据库,我希望我的应用程序正常地失败。当我忘记在Tomcat中配置context.conf时,我注意到这个混乱的堆栈跟踪回显到浏览器上,这只是连接池无法向我的应用程序分发数据源对象的一个可能原因。这是一个失败的原因,在我的控制范围内修复。但是DB不可用的原因有很多,而且大多数都不在我的控制范围内。
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/Spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <!-- Map *everything* to appServlet -->
    <url-pattern>/</url-pattern>
</servlet-mapping>

<resource-ref>
    <description>Oracle Datasource example</description>
    <res-ref-name>jdbc/ora1</res-ref-name>
    <res-type>org.apache.commons.dbcp.BasicDataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/ora1"
    resource-ref="true" />
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import javax.sql.DataSource;

public class DataSrcConfig {

   public static DataSource getJndiDataSource() throws NamingException{

       Context initialContext = new InitialContext();
       DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/ora1");

       return ds;
   }
}