.description(“简单优雅的restfun风格”)
.version(“1.0”)
.build();
}
}
3.给接口添加注解
@RestController
public class UserController {
// 创建线程安全的Map
static Map<Integer, User> users = Collections.synchronizedMap(new HashMap<Integer, User>());
/**
-
根据ID查询用户
-
@param id
-
@return
*/
@ApiOperation(value=“获取用户详细信息”, notes=“根据url的id来获取用户详细信息”)
@ApiImplicitParam(name = “id”, value = “用户ID”, required = true, dataType = “Integer”, paramType = “path”)
@RequestMapping(value = “user/{id}”, method = RequestMethod.GET)
public ResponseEntity getUserById (@PathVariable(value = “id”) Integer id){
JsonResult r = new JsonResult();
try {
User user = users.get(id);
r.setResult(user);
r.setStatus(“ok”);
} catch (Exception e) {
r.setResult(e.getClass().getName() + “:” + e.getMessage());
r.setStatus(“error”);
e.printStackTrace();
}
return ResponseEntity.ok®;
}
/**
-
查询用户列表
-
@return
*/
@ApiOperation(value=“获取用户列表”, notes=“获取用户列表”)
@RequestMapping(value = “users”, method = RequestMethod.GET)
public ResponseEntity getUserList (){
JsonResult r = new JsonResult();
try {
List userList = new ArrayList(users.values());
r.setResult(userList);
r.setStatus(“ok”);
} catch (Exception e) {
r.setResult(e.getClass().getName() + “:” + e.getMessage());
r.setStatus(“error”);
e.printStackTrace();
}
return ResponseEntity.ok®;
}
/**
-
添加用户
-
@param user
-
@return
*/
@ApiOperation(value=“创建用户”, notes=“根据User对象创建用户”)
@ApiImplicitParam(name = “user”, value = “用户详细实体user”, required = true, dataType = “User”)
@RequestMapping(value = “user”, method = RequestMethod.POST)
public ResponseEntity add (@RequestBody User user){
JsonResult r = new JsonResult();
try {
users.put(user.getId(), user);
r.setResult(user.getId());
r.setStatus(“ok”);
} catch (Exception e) {
r.setResult(e.getClass().getName() + “:” + e.getMessage());
r.setStatus(“error”);
e.printStackTrace();
}
return ResponseEntity.ok®;
}
/**
-
根据id删除用户
-
@param id
-
@return
*/
@ApiOperation(value=“删除用户”, notes=“根据url的id来指定删除用户”)
@ApiImplicitParam(name = “id”, value = “用户ID”, required = true, dataType = “Long”, paramType = “path”)
@RequestMapping(value = “user/{id}”, method = RequestMethod.DELETE)
public ResponseEntity delete (@PathVariable(value = “id”) Integer id){
JsonResult r = new JsonResult();
try {
users.remove(id);
r.setResult(id);
r.setStatus(“ok”);
} catch (Exception e) {
r.setResult(e.getClass().getName() + “:” + e.getMessage());
r.setStatus(“error”);
e.printStackTrace();
}
return ResponseEntity.ok®;
}
/**
-
根据id修改用户信息
-
@param user
-
@return
*/
@ApiOperation(value=“更新信息”, notes=“根据url的id来指定更新用户信息”)
@ApiImplicitParams({
@ApiImplicitParam(name = “id”, value = “用户ID”, required = true, dataType = “Long”,paramType = “path”),
@ApiImplicitParam(name = “user”, value = “用户实体user”, required = true, dataType = “User”)
})
@RequestMapping(value = “user/{id}”, method = RequestMethod.PUT)
public ResponseEntity update (@PathVariable(“id”) Integer id, @RequestBody User user){
JsonResult r = new JsonResult();
try {
User u = users.get(id);
u.setUsername(user.getUsername());
u.setAge(user.getAge());
users.put(id, u);
r.setResult(u);
r.setStatus(“ok”);
} catch (Exception e) {
r.setResult(e.getClass().getName() + “:” + e.getMessage());
r.setStatus(“error”);
e.printStackTrace();
}
return ResponseEntity.ok®;
}
@ApiIgnore//使用该注解忽略这个API
@RequestMapping(value = “/hi”, method = RequestMethod.GET)
public String jsonTest() {
return " hi you!";
}
}
Json格式输出类 JsonResult.class
package cn.saytime.bean;
public class JsonResult {
总目录展示
该笔记共八个节点(由浅入深),分为三大模块。
高性能。 秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。该笔记将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这4个方面重点介绍。
一致性。 秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性,其难度可想而知。因此,将用一个节点来专门讲解如何设计秒杀减库存方案。
高可用。 虽然介绍了很多极致的优化思路,但现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,还要设计一个PlanB来兜底,以便在最坏情况发生时仍然能够从容应对。笔记的最后,将带你思考可以从哪些环节来设计兜底方案。
篇幅有限,无法一个模块一个模块详细的展示(这些要点都收集在了这份《高并发秒杀顶级教程》里),麻烦各位转发一下(可以帮助更多的人看到哟!)
由于内容太多,这里只截取部分的内容。
高可用。 虽然介绍了很多极致的优化思路,但现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,还要设计一个PlanB来兜底,以便在最坏情况发生时仍然能够从容应对。笔记的最后,将带你思考可以从哪些环节来设计兜底方案。
篇幅有限,无法一个模块一个模块详细的展示(这些要点都收集在了这份《高并发秒杀顶级教程》里),麻烦各位转发一下(可以帮助更多的人看到哟!)
[外链图片转存中…(img-fUTCrVq7-1721154040466)]
[外链图片转存中…(img-LF8fkqo6-1721154040467)]
由于内容太多,这里只截取部分的内容。