博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
S2JDBC テーブルを利用した独自仕様のid採番メソッド
阅读量:4679 次
发布时间:2019-06-09

本文共 1343 字,大约阅读时间需要 4 分钟。

のでは、通常ではが扱えないようです。ただし、ジャーナル処理を設定すれば扱えるようになるみたいです。*1

で、今回の。

  • ジャーナルは作成しない
  • IDはテーブルを使って採番

という方針があり、それと関連してFOR UPDATEについてあれこれ調べたりしてました。

さて、には「synchronized」という修飾子があるそうです。これをメソッドの宣言に記述すれば、排他処理が行えるとのこと。

の synchronizedメソッド‐(ββ)

というわけで、のサービスにid採番用のメソッドを書いてみます。

  • 採番用テーブルのカラムはとvalueのみ
  • エンティティを作成して自動生成で記述
  • 各サービスから扱えるようにAbstractServiceに定義
  • 最初の採番時、対象キーのが無くても動作可
  • valueカラムの現在値=次に採番される値

こんな感じの仕様です。

public abstract class AbstractService
extends S2AbstractService
{ public synchronized int generateId(String key) { int id; IdGenerator idGen = jdbcManager .from(IdGenerator.class) .where("key = ?", key) .getSingleResult(); if (idGen == null) { id = 1; idGen = new IdGenerator(); idGen.key = key; idGen.value = 2; jdbcManager.insert(idGen).execute(); } else { id = idGen.value; idGen.value = id + 1; jdbcManager.update(idGen).execute(); } return id; }}

で、synchronizedが実際に効くのかどうか試してみましたが、いまいちわかりませんでした。

  1. は無しに設定
  2. メソッドの採番中にユーザーAのみ分岐されるThread#sleep()を仕込む
  3. ユーザーAにて採番実行
  4. ユーザーBにて採番実行

こんな手順でやってみたのですが、synchronizedがない状態でも3の時点で止まってくれました。おそらく検証方法がまずいのか、理解が足りないかのどちらかかと思われますが…。考えてもわからないので、ひとまず一区切りとしたいと思います。

转载于:https://www.cnblogs.com/aggavara/archive/2012/09/29/2708720.html

你可能感兴趣的文章
oracle 有哪些字典表,oracle 常用字典表
查看>>
linux c多进程多线程,linux下的C\C++多进程多线程编程简易例子
查看>>
linux 命令 考试,linux常用命令总结-第一次考试
查看>>
linux动态库编译多重依赖,Linux动态库多重依赖
查看>>
linux网卡缓冲区设置,【Linux】tcp缓冲区大小的默认值、最大值
查看>>
opus编译linux,Linux 下源码编译FFMEG
查看>>
linux 运行real basic,REALbasic 快速入门.pdf
查看>>
linux启动tomcat不停的触发gc,tomcat启动时就频繁gc和full gc
查看>>
linux uart串口驱动,X-017-KERNEL-串口驱动开发之uart driver框架
查看>>
linux 添加串口数量,如何在Linux中添加4个以上的串口设备?
查看>>
关于sqoop导入数据的时候添加--split-by配置项对sqoop的导入速度的影响。
查看>>
nginx配置
查看>>
2014-11-9------- 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。...
查看>>
python 魔法方法补充(__setattr__,__getattr__,__getattribute__)
查看>>
NOIP 2010 关押罪犯
查看>>
CentOS7.5删除旧的内核
查看>>
Java常用的非受检异常
查看>>
HDOJ-2054
查看>>
centos7安装eclipse
查看>>
Web:AJAX的详解
查看>>