Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Conexões de banco de dados seguras para thread Java


Eu não acho que fazer conexões de banco de dados thread-safe seja uma prática comum. Normalmente o que você quer é:
  • Serialize o acesso a alguma parte de seu servlet, para que não haja mais de um servlet executando código por vez (por exemplo, implementando o SingleThreadModel interface).
  • Bloqueando uma tabela/página de tabela/linha específica para que você possa operar em alguma tupla específica (alterando o nível de isolamento do banco de dados).
  • Usando o bloqueio otimista para detectar linhas modificadas em uma tabela (usando algum atributo de referência da tabela para verificar se a versão atual é a mesma da tabela).

AFAIK, o uso típico de ThreadLocal<Connection> é armazenar uma conexão de banco de dados exclusiva por thread, para que a mesma conexão possa ser usada em diferentes métodos em sua lógica de negócios sem a necessidade de passá-la como parâmetro a cada vez. Como a implementação de contêiner de servlet comum usa um encadeamento para atender a uma solicitação HTTP, duas solicitações diferentes garantem o uso de duas conexões de banco de dados diferentes.