Controladores de mola - segurança de thread e armazenamento de recursos

Eu tenho uma pergunta sobre segurança de mvc e rosca de mola.

Estamos desenvolvendo aplicativos web que serão armazenados no tomcat. Se bem entendi, o Tomcat cria um thread por solicitação e tem algum pool de threads. Agora, o servlet dispatcher é compartilhado entre solicitações e provavelmente é seguro para encadeamento.

Mas quando eu criar controlador assim:

@Controller
@RequestMapping("/manage")
public class QuestionManagementController {

ele temSingleton escopo para que o mesmo controlador seja usado por todas as solicitações provenientes de todos os usuários.

Eu estou querendo saber como esse problema geralmente é resolvido:

1: são controladores criados comSession escopo? (mas eu acho que também pode haver problemas se um usuário fizer rapidamente algumas coisas que podem levar a condições de corrida no controlador).

2: os controladores são definidos comorequest

3: criar controladores sem estado que não compartilham variáveis ​​em nível de classe, ou tê-los no modo somente leitura

ou talvez haja melhores "melhores práticas" que resolvam esse tipo de problema.

Eu estou fazendo esta pergunta, porque agora nós os temos comoSingleton com escopo definido, e há um problema, que na maioria dos métodos estamos consultando o usuário no banco de dados, e não podemos armazenar essas informações na variável de nível de classe devido ao escopo. Poderíamos tentar usar alguma coleção segura de thread, mas depois poderia haver outros recursos precisando de acesso sincronizado.

questionAnswers(1)

yourAnswerToTheQuestion