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
Spring mvc Spring MVC和JDBC数据源_Spring Mvc_Error Handling_Datasource - Fatal编程技术网

Spring mvc Spring MVC和JDBC数据源

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

在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"
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堆栈溢出。

    是什么导致servlet
    init()
    方法中引发异常?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;
    }