Pergunta

É o padrão MySQL JDBC driver de thread-safe? Especificamente eu quero usar uma única conexão em todas as linhas, mas cada declaração só será usado em um único segmento. Existem determinados cenários que são seguros e outros que não são? Qual é a sua experiência aqui?

Foi útil?

Solução

As transações são iniciados / cometido por conexão. A menos que você está fazendo algumas coisas muito específicas (Eu realmente não posso pensar em um exemplo onde isso seria justificado para ser honesto), você é melhor fora com um pool de conexão e de conexão por fio.

Outras dicas

Se autocommit = 1, então é muito possível ter vários segmentos compartilhar a mesma conexão, desde que o acesso à conexão é sincronizado. Se autocommit = 0, você terá que controlar o acesso à conexão via algum tipo de mutex até o cometer acontece.

A menos que você absolutamente são limitadas na quantidade de conexões de sua aplicação pode ter, um pool de conexão pode ser uma alternativa mais viável.

Com base na minha experiência recente, objeto Connection não é thread-safe em Connector / J 5.1.33.

Eu corri em uma situação de impasse descrito no bug 67760 . Não tenho certeza se é um bug, mas um conselho razoável a partir da discussão foi:

[12 de dezembro de 2012 20:33] Todd Farmer

Por favor, não use um único objeto de conexão entre vários tópicos sem sincronização adequada. Conector / J - e, mais importante, o protocolo MySQL cliente-servidor - não permite simultânea operações usando o mesmo objeto de conexão. Se um objeto Connection deve ser compartilhada entre segmentos, é da responsabilidade do código do aplicativo autor para garantir operações são devidamente serializado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top