【发布时间】:2017-06-24 19:18:24
【问题描述】:
我应该如何创建一个线程安全的控制器?
根据最佳实践,控制器是单例的。
考虑下面的代码,我通过自动连接的服务对象存储用户数据,这使我的代码有状态。 我如何使下面的代码线程安全。
@RestController
class ApiController {
@Autowired
IDbService< User > iDBService;
@RequestMapping(value = "/api/adduser", method = RequestMethod.POST)
public ResponseEntity<User> createUser(@RequestBody User user){
User savedUser=iDBService.create(user);
return new ResponseEntity<User>(savedUser, HttpStatus.CREATED);
}
这是我的服务实现。 我的服务中有共享变量
public class IDbServiceImpl<T> implements IDBService<T>{
@Autowired
GenericRepository<T, Serializable> genericRepository;
@Override
public T create(T object) {
return genericRepository.save(object);
}
}
【问题讨论】:
-
代码是线程安全的......假设服务内部没有共享状态......
-
我不会认为这个控制器是有状态的,除非你的 IDbService 是有状态的。
-
如果我的服务是有状态的,那会是个问题
-
在有状态 IDbService 的情况下遵循的最佳方法是?
标签: java spring multithreading rest spring-boot