java-如何通过JDBC锁定PostgreSQL数据库?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何通过JDBC锁定PostgreSQL数据库?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1275字,纯文字阅读大概需要2分钟。
内容图文
![java-如何通过JDBC锁定PostgreSQL数据库?](/upload/InfoBanner/zyjiaocheng/881/922f2f9026ec4aee9a104715b8475d99.jpg)
在我的Java webapp中,每个实例都在启动时检查数据库是否通过JDBC连接是最新的.如果数据库不是最新的,它将通过执行SQL脚本来执行更新例程.
我无法控制实例何时启动.因此,我需要确保只有一个实例同时在执行数据库更新.理想情况下,我需要锁定整个数据库,但是根据
http://www.postgresql.org/docs/8.4/static/explicit-locking.html
和
http://wiki.postgresql.org/wiki/Lock_database
PostgreSQL不支持它(我仍在使用8.4版).
我还有什么其他选择?
解决方法:
如果控制所有实例的代码,则可以在数据库中创建一个表,每个启动的实例在该表中查找带有时间戳的记录.让我们称它为“锁定”记录.
如果某个进程发现锁定记录不存在,则它将插入该记录并处理所需的数据.
如果某个进程发现该锁记录确实存在,则可以假定另一个进程已创建该锁记录,并且不执行任何操作,忙于等待或执行任何操作.
通过这种设计,您可以有效地在数据库中创建一个“锁”以与您的进程进行同步.您对其进行了编码,因此所有进程都知道它们必须遵守锁定记录的逻辑.
具有锁定功能的第一个进程完成处理后,应清除锁定记录,以便下次重新启动时行为正确.您还需要考虑由于服务器错误或执行错误而无法清除锁定的情况.通常,如果锁的时间早于n分钟,则可以将其视为“过时的”,因此请将其删除,然后重新创建(或仅对其进行更新).
处理“锁定”记录时,请确保在数据库连接上使用Serializable隔离级别,以确保原子性.
Java代码的Service层可以在调用Data Access层之前采用锁定策略来实施.是否使用Hibernate都无关紧要,因为它只是应用程序逻辑.
内容总结
以上是互联网集市为您收集整理的java-如何通过JDBC锁定PostgreSQL数据库?全部内容,希望文章能够帮你解决java-如何通过JDBC锁定PostgreSQL数据库?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。