如何在spring boot中使用线程安全控制器

weixin_38081402 2019-09-12 11:25:54
我该如何创建一个线程安全的控制器? 根据最佳实践,控制器是单身人士. 考虑下面的代码,其中我通过自动装配的服务对象存储用户数据,这使我的代码有状态.我如何使下面的代码线程安全. @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); } }
...全文
11 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38104933 2019-09-12
  • 打赏
  • 举报
回复
默认情况下,您的控制器是单件,默认情况下您的服务也是单件. 因此,为了使它们的线程安全,您必须确保在服务内部发生的操作必须是线程安全的,以防更改服务中对象的状态,即.一个列表. 如果使用rdbms,那么您就遇到了与事务相关的问题. 如果您使用spring和Jpa,则事务管理器会在您使用@Transactional的情况下处理您的更新.如果是普通的jdbc方法,那么你可以使用纯jdbc并自己进行事务处理,也可以使用transaction manager附带的spring-jdbc. 如果您希望在正在进行写入时不更改数据库行,则必须考虑与行锁定相关的机制. – gkatzioura 2月7日15:23 如果JPA使用@Transactional将完成工作.但是,根据您的应用程序,您可能需要考虑锁定.检查this关于用jpa锁定的文章.

435

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧