スレッドセーフなコントローラを作成するにはどうすればよいですか?スプリングブートでスレッドセーフコントローラを使用する方法
ベストプラクティスとして、コントローラはシングルトンです。
私のコードをステートフルにするautowiredサービスオブジェクトを介してユーザーデータを格納する以下のコードを考えてみましょう。 以下のコードをスレッドセーフにするにはどうしたらいいですか?
@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がstatefullでない限り、このコントロールステートフルは考慮しません。 – GPI
私のサービスがステートフルな場合、それは問題になるでしょう –