gpt4 book ai didi

java - 创建准备好的语句时是什么导致 Spring 1.2 NullPointerException?

转载 作者:行者123 更新时间:2023-12-04 07:03:02 24 4
gpt4 key购买 nike

使用 Spring 1.2.1 和 oracle.jdbc.pool.OracleDataSource 10.2.0.3.0 我有时会得到如下所示的堆栈跟踪。我认为是连接池已满造成的。有没有人确切知道原因?较新版本的 spring 或 Oracle JDBC 是否能更好地处理这个问题?

java.lang.NullPointerException
在 org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:213)
在 org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:444)
在 org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:491)
在 org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:522)
在 org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:543)
在 org.springframework.jdbc.object.SqlQuery.execute(SqlQuery.java:114)
在 org.springframework.jdbc.object.SqlQuery.execute(SqlQuery.java:124)
在 sps.wfds.biz.glacier.MemberDAO.create(MemberDAO.java:44)
在 sps.wfds.biz.glacier.MemberDAO.create(MemberDAO.java:23)
在 sps.wfds.biz.glacier.AbstractDAO.createAndValidate(AbstractDAO.java:22)
在 sps.wfds.web.interceptor.AbstractPrincipal.init(AbstractPrincipal.java:87)
在 sps.wfds.web.interceptor.AbstractPrincipal.getAttributes(AbstractPrincipal.java:66)
在 sps.wfds.web.interceptor.AbstractPrincipal.getAttribute(AbstractPrincipal.java:60)
在 sps.wfds.web.interceptor.AbstractPrincipal.setLocale(AbstractPrincipal.java:38)
在 sps.wfds.web.util.LocaleUtil.setLocale(LocaleUtil.java:24)
在 sps.wfds.web.interceptor.SSOPrincipal.(SSOPrincipal.java:22)
在 sps.wfds.web.interceptor.SSOAuthority.getPrincipal(SSOAuthority.java:18)
在 sps.wfds.web.interceptor.Authorization.preHandle(Authorization.java:44)
在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:674)
在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:625)
在 org.springframework.web.servlet.FrameworkServlet.serviceWrapper(FrameworkServlet.java:386)
在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:346)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

最佳答案

这与Spring无关。
DataSource.getConnection()永远不应该返回 null;它应该要么返回一个有效的连接,要么抛出一个 SQLException .错误是由 oracle.jdbc.pool.OracleDataSource 引起的行为不端。

更新 :

根据 Oracke documentation这发生在:

  • 已在池中分配了最大连接数;
  • ConnectionWaitTimeout 已设置为非零值
  • 在这段时间内您一直在等待 getConnection() 并且没有连接返回到池中。

  • 因此,考虑到这一点,您可以:
  • 检查您的代码以确保没有连接泄漏
  • 增加池大小
  • 增加您的连接等待超时
  • 使用不同的池:-) 或围绕 OracleDataSource 编写一个简单的包装器,该包装器将检查返回的 'null' 并抛出 SqlException。

  • 在最后一种情况下,您只会将一个异常交换为另一个(NPE -> SqlException)。当然,它会更合适,但它并不能真正解决问题。

    关于java - 创建准备好的语句时是什么导致 Spring 1.2 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1540073/

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