这个报到功能的方法应该在哪里加锁
这个签到功能的方法应该在哪里加锁?
最近看了关于很多关于Mysql的锁的文章,恰好看到网上这个签到功能,这个方法作用是签到并且返回结果,请问各位在哪里设定事务,加什么锁比较合适?
最近看了关于很多关于Mysql的锁的文章,恰好看到网上这个签到功能,这个方法作用是签到并且返回结果,请问各位在哪里设定事务,加什么锁比较合适?
@Override
74 public Sign signThenReturn(int uid, int gid) {
75 Sign sign = new Sign();
76 ResultSet rs = null;
77 PreparedStatement preparedStatement = null, executePreparedStatement = null;
78 try {
79 conn = getQueryRunner().getDataSource().getConnection();
80 preparedStatement = conn.prepareStatement(" select * from db_userplatform.dt_sign where userid=? and gameid=? ;");
81 preparedStatement.setInt(1, uid);
82 preparedStatement.setInt(2, gid);
83
84 rs = preparedStatement.executeQuery();
85 if (rs.next()) {//查到了更新
86 SignObject signObject = new SignObject();
87 signObject.setId(rs.getInt("id"));
88 signObject.setUid(rs.getInt("userid"));
89 signObject.setGid(rs.getInt("gameid"));
90 signObject.setSignCount(rs.getInt("signCount"));
91 signObject.setIntegration(rs.getInt("integration"));
92 signObject.setLastModifyTime(new Date(rs.getDate("lastModifyTime").getTime()));
93 signObject.setSignHistory(rs.getLong("signHistory"));
94 signObject.setExt(rs.getString("ext"));
95
96
97 Timestamp lastModifyTimeStamp = new Timestamp(signObject.getLastModifyTime().getTime());
98 Timestamp todayStartTimeStamp = CommonDateUtils.getTodayStartTimeStamp();
99 if (todayStartTimeStamp.after(lastModifyTimeStamp)) {//今天没有签过到
100 final long missDays= (System.currentTimeMillis()-signObject.getLastModifyTime().getTime())/(24*60*60*1000);
101 int newSignCount=signObject.getSignCount();
102 String newExt="签到";
103 if(missDays==1)
104 { //连续签到,加分,连续签到次数增加1 ,签到历史移动一位
105 newSignCount+=1;
106 }else
107 {//不连续签到,加分,连续签到次数为1,签到历史移动missDays位
108 newSignCount=1;
109 }
110 if(newSignCount>=91)
111 { //签到超过90天,连续签到次数重置为1
112 newSignCount=1;
113 newExt="连续签到天数重置为1,时间:"+CommonDateUtils.getDate(System.currentTimeMillis());