简单的多终端对同一数据的互斥插入

来源:互联网 发布:java ee8如何安装 编辑:程序博客网 时间:2024/05/11 04:40

                                          简单的多终端对同一数据的互斥插入


相关问题说明:

        两台设置了F5的服务器上,要求部署完全相同程序代码的应用。

        设置了一个定时任务,每天向日志表中插入数据。如果不做限制,一定会生成两条重复的记录。现在要求数据库中的数据不能重复。

基本策略:

        各个服务器上的应用向数据库中执行了查询锁行操作(select * from .... where .... for update),如果有数据则返回false,如果没有数据则插入需要日志数据。

主要代码:

/** * 检查是否需要生成支付对账文件 * @param dateTime * @return */public boolean checkNeedGenPayChkFile(PayOrderCheckGenLog log, String dateTime) {String sql = "SELECT COUNT(*) FROM T_PAY_ORDER_CHECK_GEN_LOG WHERE CHECK_DATE = ? for update ";int count = this.getJdbcTemplate().queryForInt(sql,new Object[] { dateTime });if (count == 0) {// insert;long id = sequence12.nextLongValue();String sql2 = "INSERT INTO T_PAY_ORDER_CHECK_GEN_LOG(CHECK_ID,CHECK_DATE,GATHER_CHECK_FILENAME,STATE,CREATE_TIME ) VALUES(?,?,?,'1',SYSDATE)";this.getJdbcTemplate().update(sql2,new Object[] { id, log.getCheckDate(),log.getGatherCheckFilename() });return true;} else {return false;}}
注:在SERVICE中编写方法,用 @Transactional   将其下的方法设定为原子方法。

原创粉丝点击