Discuss / Java / 事务 REQUIRED级别

事务 REQUIRED级别

Topic source

净净一隅

#1 Created at ... [Delete] [Delete and Lock User]

1. 注册请求

@PostMapping("/register")
public ModelAndView register(HttpServletRequest req, Register registerInfo) {
System.out.println(registerInfo);
try {
UserService userService = AppConfig.context.getBean(UserService.class);
User user = userService.register(registerInfo);
if (user == null) {
return new ModelAndView("/register.html", Map.of("errorMsg", "邮件已注册,请登录或者重新注册!"));
}
req.getSession().setAttribute("user", user);
req.getSession().setMaxInactiveInterval(1000);
ModelAndView mv = new ModelAndView("/index.html", Map.of("user", user));
return mv;
}catch (SQLException sql){
sql.printStackTrace();
return new ModelAndView("/register.html", Map.of("errorMsg", "注册异常,请稍后重试!"));
}catch (RuntimeException e){
String msg=e.getMessage();
e.printStackTrace();
return new ModelAndView("/register.html", Map.of("errorMsg", msg));
}catch (Exception e){
e.printStackTrace();
return new ModelAndView("/register.html", Map.of("errorMsg", "注册异常,请稍后重试!"));
}
}

2. 注册

@MetricTime("register")
@Transactional
public User register(Register registerInfo) throws SQLException{
System.out.println("开始注册");
String email=registerInfo.getEmail();
String name=registerInfo.getUsername();
String password=registerInfo.getPassword();
TransactionStatus tx=null;
tx=this.txManager.getTransaction(new DefaultTransactionDefinition());
KeyHolder holder=new GeneratedKeyHolder();
if(getUserFromDB(email)!=null){
throw new RuntimeException(email+" exists. please go to [sign in]");
}
if(1!=jdbcTemplate.update(
(conn)-> {
PreparedStatement ps=conn.prepareStatement(
"insert into user(name,email,password) values(?,?,?)", Statement.RETURN_GENERATED_KEYS);
ps.setObject(1,name);
ps.setObject(2,email);
ps.setObject(3,password);
return ps;
},
holder
)){
throw new RuntimeException("Insert failed");
}
//添加注册积分
this.addBonus(holder.getKey().longValue());
//提交事务
this.txManager.commit(tx);
return new User(holder.getKey().longValue(),email,password,name);
}

3. 添加注册积分

/**
* 添加积分
* @param studentId
*/
@Transactional
public void addBonus(long studentId){
int registerBouns=5;
TransactionStatus tx=null;
tx=this.txManager.getTransaction(new DefaultTransactionDefinition());
if(1!=jdbcTemplate.update("insert into bonus(studentId,bonus) value(?,?)",studentId,registerBouns)){
throw new RuntimeException("add bonus failed from userid= "+studentId);
};
this.txManager.commit(tx);
}

净净一隅

#2 Created at ... [Delete] [Delete and Lock User]

哎呀,写错了,不要参考


  • 1

Reply