【问题标题】:Should I keep a database connection open in a servlet? [duplicate]我应该在 servlet 中保持数据库连接打开吗? [复制]
【发布时间】:2014-01-30 06:20:14
【问题描述】:

我正在创建一个简单的博客网站,就像一个在 Tomcat 上使用 Java servlet 的学习项目。

会有两个页面:

  • 首页是输入博客主题和文本的表单,使用 JDBC 将它们插入 MySQL 数据库。
  • 第二页是从数据库中获取数据并显示它的页面。

我想知道是否应该创建一个单独的类来保持连接打开,而不是单独打开和关闭每个页面中的 JDBC 数据库连接。

但是,我不想实例化它,也不想让它成为静态的。

有没有办法做到这一点?

另外,只要服务器正在运行,保持数据库连接打开是否安全?

【问题讨论】:

标签: java servlets jdbc


【解决方案1】:

想一个连接池

连接池为您提供了一大堆优势,但最重要的是它们解决了

  1. 建立真正的数据库连接成本很高。连接池周围总是有一些额外的连接,并为您提供其中之一。
  2. 如果连接失败,连接池知道如何打开一个新的
  3. 非常重要:每个线程都有自己的连接。这意味着线程在它应该在的地方处理:在数据库级别。数据库非常高效,可以轻松处理并发请求。
  4. 其他内容(如 JDBC 连接字符串的集中位置等),但有数以百万计的文章、书籍等在此

The following page on Tomcat's website详细介绍了Tomcat和mySQL的连接方法。您不想自己动手,已经有太多可用的 DataSource 池已经在生产环境中调试和尝试过了。

使用池的主要一点是,当您调用 close 时连接不会终止,而是直接返回到池中。因此,确保在 try/finally 块中关闭资源很重要。 Look here for a sample.

您在一个 servlet 中,因此您应该使用容器提供的连接池。除了获取连接的方式之外,您的 JNDI 代码将完全正常。据我所知,所有 servlet 容器都有连接池。

【讨论】:

  • thnaks,我也有同样的想法,但我一点也不知道有什么叫做连接池的东西。
【解决方案2】:

您应该在 Tomcat 上安装 JDBC 数据源(请参阅Tomcat JNDI Datasource HOW-TO)。使用数据源建立您的 JDBC 连接,您将拥有池连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多