gpt4 book ai didi

spring-mvc - Spring MVC和JDBC数据源

转载 作者:行者123 更新时间:2023-12-03 08:59:39 25 4
gpt4 key购买 nike

在所有示例中,您都会看到在Spring MVC Web应用程序中配置servlet-context.xml所需的任何数据源都已在此文件中配置为Bean,可能使用了容器中定义的连接池。例如,在我的servlet-context.xmlorg.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)

... 等等。

我有2个问题:
  • 是否可以捕获此错误并显示对用户更友好的内容?我个人怀疑这是因为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;
    }

  • 感谢您的任何回复!

    最佳答案

  • 用户应该永远都不会看到异常(exception)。您应该配置一个友好的错误页面,告诉用户该站点已关闭,然后稍后返回。堆栈跟踪应仅出现在您的日志中。您需要详细信息以找出问题所在。
  • 不,这是应在启动应用程序之前由应用程序服务器处理的事情。在启动应用程序之前,应成功初始化连接池。不要尝试在Controller中执行此操作。

  • 也许您的连接池配置不正确。我建议彻底擦洗以确保它是正确的。您可以使用几个参数,例如在从池中释放连接之前检查连接等。查看这些参数。

    更新:

    DBA总是有可能关闭数据库。我建议您与他们展开对话,以便他们给您提示和停机窗口。使您的应用程序可以显示“停机维护”页面,即堆栈溢出。

    关于spring-mvc - Spring MVC和JDBC数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10832859/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com