Il thread MySQL Connector / JDBC è sicuro?

Il driver JDBC standard MySQL è thread-safe? Nello specifico voglio utilizzare una singola connessione su tutti i thread, ma ogni istruzione verrà utilizzata solo in un singolo thread. Ci sono determinati scenari che sono sicuri e altri che non lo sono? Qual è la tua esperienza qui?

Le transazioni sono avviate / impegnate per connessione. A meno che tu non stia facendo alcune cose molto specifiche (non posso davvero pensare ad un esempio in cui sarebbe giustificato essere onesto), stai meglio con un pool di connessioni e una connessione per thread.

Se autocommit = 1, è ansible che più thread condividano la stessa connessione, a condizione che l’accesso alla connessione sia sincronizzato. Se autocommit = 0, dovrai controllare l’accesso alla connessione tramite una sorta di mutex fino a quando il commit non avviene.

A meno che non siate assolutamente limitati dalla quantità di connessioni che la vostra applicazione può avere, un pool di connessioni può essere un’alternativa più valida.

In base alla mia recente esperienza, l’object Connection non è thread-safe in Connector / J 5.1.33.

Ho avuto una situazione di deadlock descritta nell’errore 67760 . Non sono sicuro se si tratta di un bug, ma un consiglio ragionevole dalla discussione è stato:

[12 Dic 2012 20:33] Todd Farmer

Si prega di non utilizzare un singolo object Connection su più thread senza una corretta sincronizzazione. Connector / J – e ancora più importante, il protocollo client-server MySQL – non consente operazioni concorrenti che utilizzano lo stesso object Connection. Se un object Connection deve essere condiviso tra thread, è responsabilità dell’autore del codice dell’applicazione assicurarsi che le operazioni siano serializzate correttamente.