sql >> Base de Datos >  >> RDS >> Mysql

Conexiones de base de datos seguras para subprocesos de Java

No creo que hacer que las conexiones de la base de datos sean seguras para subprocesos sea una práctica común. Por lo general, lo que desea es:

  • Serialice el acceso a alguna parte de su servlet, de modo que no haya más de un servlet ejecutando código a la vez (por ejemplo, implementando el SingleThreadModel interfaz).
  • Bloquear una tabla/página de tabla/fila en particular para que pueda operar en alguna tupla en particular (cambiando el nivel de aislamiento de la base de datos).
  • Usando el bloqueo optimista para detectar filas modificadas en una tabla (usando algún atributo de referencia de la tabla para comprobar si la versión actual es la misma que la de la tabla).

AFAIK, el uso típico de ThreadLocal<Connection> es almacenar una conexión de base de datos única por subproceso, de modo que la misma conexión se pueda usar en diferentes métodos en su lógica comercial sin la necesidad de pasarla como parámetro cada vez. Debido a que la implementación del contenedor de servlet común usa un subproceso para cumplir con una solicitud HTTP, se garantiza que dos solicitudes diferentes usen dos conexiones de base de datos diferentes.