如何管理服务器上的数据库连接?

2024-01-08

我的 Web 应用程序中的数据库连接存在严重问题。由于我对单例数据库类的整个应用程序使用单个数据库连接,因此如果我尝试并发数据库操作(两个用户),数据库将回滚事务。 这是我使用的静态方法:

所有线程/servlet 都调用静态 Database.doSomething(...) 方法,该方法又调用以下方法。

private static /* synchronized*/ Connection getConnection(final boolean autoCommit) throws SQLException {
    if (con == null) {
        con = new MyRegistrationBean().getConnection();
    }
    con.setAutoCommit(true); //TODO
    return con;
}

管理我拥有的数据库连接的推荐方法是什么,这样我就不会遇到同样的问题。


保持一个Connection永远开放是一个非常糟糕的主意。它没有无限的生命周期,只要数据库超时连接并关闭它,您的应用程序就可能崩溃。最佳实践是获取and close Connection, Statement and ResultSet in the shortest避免资源泄漏以及泄漏和超时导致的潜在应用程序崩溃的可能范围。

由于连接数据库是一项昂贵的任务,因此您应该考虑使用连接池来提高连接性能。一个像样的应用程序服务器/servlet容器通常已经提供了 JNDI 风格的连接池功能DataSource。有关如何创建它的详细信息,请参阅其文档。例如,如果是 Tomcat,您可以找到它here http://tomcat.apache.org/tomcat-8.0-doc/jndi-resources-howto.html.

即使使用连接池,您仍然必须编写正确的 JDBC 代码: acquireand在尽可能短的范围内关闭所有资源。连接池将轮流担心实际关闭连接或只是将其释放回池以供进一步重用。

您可能会从中获得更多见解本文 http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html如何以正确的方式学习 JDBC 基础知识。作为完全不同的替代方案,请学习 EJB 和 JPA。它将为您将所有 JDBC 样板抽象为 oneliners。

希望这可以帮助。

也可以看看:

  • 在多线程系统中使用静态 java.sql.Connection 实例是否安全? https://stackoverflow.com/questions/9428573/is-it-safe-to-use-a-static-java-sql-connection-instance-in-a-multithreaded-syste/
  • 我是否使用 JDBC 连接池? https://stackoverflow.com/questions/7592056/am-i-using-jdbc-connection-pooling
  • 我应该如何在基于 servlet 的应用程序中连接到 JDBC 数据库/数据源? https://stackoverflow.com/questions/2299469/how-should-i-connect-to-a-mysql-data-source-from-eclipse/
  • 什么时候有必要或方便使用 Spring 或 EJB3 或全部一起使用? https://stackoverflow.com/questions/18369356/when-is-it-necessary-or-convenient-to-use-springjsf2-or-ejb3jsf2-or-all-of-the/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何管理服务器上的数据库连接? 的相关文章

随机推荐

  • 创建 MSBuild 自定义任务以在*编译之前*修改 C# 代码

    我想创建一个自定义 MSBuild 任务 在 csc exe 编译我的 cs 文件之前更改它们 但是 当然 这不会就地修改它们 我不希望触及实际的源文件 我知道 PostSharp 和其他 NET AOP 框架 但它们不是这个特定项目的选择
  • 将逗号分隔的浮点数字符串转换为列表?

    我需要定义一个函数txtnum L 需要一串逗号分隔的浮点数 例如 1 5 2 5 3 5 作为参数并将其转换为列表 1 5 2 5 3 5 我尝试过使用 split join map 等 并且无法获取任何内容来返回不包含引号的列表 我对
  • 如何将 GPS 观察器移至 App.xaml 超类并将事件调度至其他页面/类?

    我是 silverlight WPF 和 WP7 开发新手 但我熟悉使用控制台或 Windows 窗体开发 C 所以请耐心等待 我正在尝试使用 Silverlight SDK 和 Microsoft Maps MapControl 以及 S
  • 如何将 recyclerView 中的前 4 项设置为可见性消失?

    实际上 我有一个菜单 可以在 recyclerView 中添加 MainActivity 按钮 在该菜单中我显示所有添加的按钮 以便可以删除所选按钮 但是我有 4 个该 recyclerView 的第一个项目应该是默认的 所以没有人应该触摸
  • DataGridView右键菜单/复制示例?

    我的表单上有一个 DataGridView dgv1 在特定的单元格中 我希望用户能够右键单击并选择 复制 以将单元格的内容复制到剪贴板 任何人都可以向我指出一个教程或网站的方向 展示如何在 C 中完成此任务吗 Thanks 您可以使用 C
  • bookdown 中的代码折叠

    RMarkdown 中用于 html 文档的代码折叠选项非常棒 该选项使编程方法对于感兴趣的人来说是透明的 而无需强迫观众滚动浏览数英里的代码 代码与散文和交互式图形输出的紧密放置使得整个项目更容易被更广泛的受众所理解 此外 它还减少了对额
  • 优化构造函数调用次数

    在工作中 我们有一个带有昂贵构造函数的类 因此我们希望调用它的次数尽可能少 我们研究了它的用途 并尝试使代码对 RVO 更加友好 然而 我们在 g 编译器中发现了一个怪癖 我们不明白发生了什么 请考虑operator 的两种实现 const
  • 单元测试静态类

    设想 语言C 使用VS2008单元测试框架进行单元测试 我有一个带有静态构造函数和 2 个方法的静态类 我编写了 4 个测试方法来测试整个班级 我的静态构造函数有一些重要的初始化 现在 如果我同时运行所有 4 个单元测试用例 静态构造函数将
  • 约束布局中的背景图像不起作用

    我希望我的应用程序在后台使用图像来进行注册和登录功能 我正在使用 android studio 2 3 到目前为止我可以看到自去年以来很多事情都发生了变化 我们现在使用相对或线性布局的地方就是约束布局 我包含了根布局的代码如下 androi
  • 由于 java.lang.IllegalArgumentException,应用程序在启动时崩溃:列“_id”不存在

    每当我启动我的应用程序时 我都会得到一个java lang IllegalArgumentException column id does not exist我的 LogCat 中出现错误 我已经创建了专栏 id 但它仍然抛出这个 这是我的
  • 零或一到零或一的关系

    有没有办法创建一个0 or 1 to 0 or 1数据库中的关系 例如 假设我有一张经理表和一张艺术家表 经纪人只能管理一名艺人 艺人也只能拥有一名经纪人 然而 经理人可以没有艺人 即寻找艺人来管理 而艺人也可能没有经理人 有什么办法可以做
  • 如何在 Facelets 的 EL 布尔表达式中使用 && ?

    我在弄清楚如何在 Facelets 中的 EL 表达式上执行和操作时遇到了一些麻烦 所以基本上我有
  • 如何在 asp.net MVC 中生成下载文件的链接?

    我正在测试轻而易举报告 http www codeplex com doddlereport从 IEnumerable 对象生成一些报告 我需要生成这样的链接 PDF http myserver com reports ProductsRe
  • ipc:// 上的 ZeroMQ REQ/REP 和并发性

    我使用 REQ REP 0MQ ipc 套接字实现了一个 JSON RPC 服务器 我遇到了奇怪的行为 我怀疑这是由于 ipc 底层 unix 套接字不是真正的套接字 而是一个事实一根管子 根据文档 必须强制执行严格的 zmq send z
  • 使用 Python 将 PDF 转换为一系列图像

    我正在尝试使用 Python 将多页 PDF 转换为一系列 JPEG 我可以使用可用的工具轻松地将 PDF 拆分为单独的页面 但我还没有找到任何可以将 PDF 转换为图像的工具 PIL 不起作用 因为它无法读取 PDF 我发现的两个选项是通
  • 带 R 的地图:无法更改点/坐标的投影

    我想绘制一个具有多个点 也称为纬度和经度坐标组合 的世界地图 我不想使用墨卡托 因此我重新投影世界地图的数据和我的坐标 当世界的投影发生变化时 所有点都会突然放置在地图的中间 这是一种常见行为 当投影不对齐时 请参阅https www ea
  • 沿一个坐标轴的 3D 倾斜变换矩阵

    有没有一种方法可以计算沿一个坐标轴的倾斜变换矩阵 给定倾斜角度 如下 这应该在很大程度上适用于使用变换矩阵倾斜对象 特别是使用 glMultMatrix matrix matrix1 1 0 0 0 tan a 1 0 0 0 0 1 0
  • Cordova 视频编辑器插件 InvalidOutputFormatException

    我在用着科尔多瓦插件视频编辑器 https www npmjs com package cordova plugin video editor处理以前录制的视频 该插件开始转换 但由于某种原因失败 我得到的错误是这样的 net yprest
  • 该程序集是由比当前加载的运行时更新的运行时构建的,无法加载

    我收到此错误 无法加载文件或程序集 Twitterizer2 Asynchronous 或其中之一 它的依赖项 该程序集是由比 当前已加载运行时且无法加载 但我已经从我的引用中删除了 twitterizer2 Asynchronous 库
  • 如何管理服务器上的数据库连接?

    我的 Web 应用程序中的数据库连接存在严重问题 由于我对单例数据库类的整个应用程序使用单个数据库连接 因此如果我尝试并发数据库操作 两个用户 数据库将回滚事务 这是我使用的静态方法 所有线程 servlet 都调用静态 Database