Explicação detalhada do pool de conexão de banco de dados Java
O princípio do pool de conexão de banco de dados é:
A idéia básica do pool de conexões é armazenar a conexão do banco de dados como um objeto na memória quando o sistema é inicializado. Quando o usuário precisa acessar o banco de dados, em vez de estabelecer uma nova conexão, um objeto de conexão gratuito estabelecido é retirado do pool de conexões. Após o uso, o usuário não fecha a conexão, mas coloca a conexão novamente no pool de conexão para acesso à próxima solicitação. O estabelecimento e a desconexão das conexões são gerenciados pelo próprio pool de conexões. Ao mesmo tempo, você também pode controlar o número inicial de conexões no pool de conexões, os limites superior e inferior das conexões, o número máximo de tempos de uso para cada conexão, o tempo de marcha lenta máxima etc. definindo os parâmetros do pool de conexões. Ele também pode monitorar o número de conexões de banco de dados, uso etc. por meio de seu próprio mecanismo de gerenciamento.
Pools de conexão de banco de dados comumente usados:
Os pools de conexão de banco de dados comumente usados incluem JNDI, C3P0, Jacarta do Apache e DBCPBONECP. Entre eles, terceiros que dependem da estrutura de cantar usam C3P0 e DBCP; e o Bonecp é considerado o pool de conexão de banco de dados mais rápido. O DataSource criado pelo método JNDI realmente implementa javax.sql.datasource (nenhum dos outros três métodos)
Agora, apresentaremos principalmente como usar o método JNDI. Este método é implementado por um servidor da Web (por exemplo: Tomcat, WebLogic, Websphere, Tomcat) para implementar Java.SQL.Datasource. O servidor da Web é responsável por inicializar a fonte de dados, criar conexões, alocar e gerenciar conexões. Como é uma função implementada pelo próprio servidor da Web, não é necessário introduzir pacotes de jar especiais no projeto, mas é necessário adicionar configurações relevantes a alguns arquivos de configuração do servidor. Em seguida, pegue o servidor Tomcat (o banco de dados é MySQL) como um exemplo para descrever o uso desse método.
Criação e inicialização do banco de dados:
Criar teste de tabela (Id int Primary Key, Nome Varchar (10), Float de Price) Inserir nos valores de teste (1, 'inglês', 22.2); inserir em valores de teste (2, 'matemática', 78.9); inserir em valores de teste (3, 'história', 77.9);
1. Coloque o driver de dados MySQL-Connector-Java-5.0.3-bin.jar na lib no diretório Tomcat
2. Modifique o arquivo context.xml no confinte do Tomcat e adicione suporte para configuração de recursos
<Resource Auth = "Container" driverClassName = "com.mysql.jdbc.driver" maxactive = "100" maxidle = "30" maxwait = "10000" name = "jdbc/ewsdb" userName = "root" = "admin" type = "javax.sql.data" url = "jdbc: mysql: // localhost: 3306/test1"/>
<Descrição do atributo de recurso>
1) Nome: Especifique o nome JNDI do recurso.
2) Auth: especifica o gerente que gerencia o recurso, que possui dois valores opcionais: contêiner e aplicação. O contêiner significa que o contêiner cria e gerencia o recurso, e o aplicativo significa que o aplicativo da web cria e gerencia o recurso.
3) Tipo: especifique o nome da classe Java do recurso.
4) Nome de usuário: especifique o nome do usuário para conectar -se ao banco de dados.
5) Senha: especifique a senha para conectar -se ao banco de dados.
6) DriverClassName: Especifica o nome da classe de implementação do driver na unidade JDBC conectando -se ao banco de dados.
7) URL: especifique o URL para conectar -se ao banco de dados. 127.0.0.1 é o IP do servidor de banco de dados a ser conectado, 3306 é a porta do servidor de banco de dados e o BookDB é o nome do banco de dados.
8) Maxactive: especifica o número máximo de conexões de banco de dados ativos no pool de conexão do banco de dados. O valor é 0, indicando que não é restrito.
9) Maxidle: Especifica o número máximo de conexões de banco de dados no pool de conexão do banco de dados que estão ociosas. O valor é 0, indicando que não é restrito.
10) Maxwait: Especifica o tempo máximo (em milissegundos) para que o pool de conexão do banco de dados esteja ocioso. Após esse período, uma exceção será lançada. O valor é -1, o que significa que você pode esperar indefinidamente.
maxactive = "100"
Indica o número máximo de conexões que podem ser obtidas no pool de conexões em simultaneidade. Se o banco de dados não for usado sozinho para um aplicativo, a configuração do parâmetro Maxactive poderá impedir que um aplicativo obtenha conexões ilimitadas de outros aplicativos. Se um banco de dados for usado apenas para oferecer suporte a um aplicativo, o Maxactive poderá teoricamente ser definido com o número máximo de conexões que o banco de dados pode suportar. A MaxActive simplesmente representa o número máximo de conexões que podem ser obtidas simultaneamente através do pool de conexões. A aquisição e liberação de conexões são de mão dupla. Quando o aplicativo solicita simultaneamente o pool de conexão, o pool de conexões precisa obter a conexão do banco de dados. Então, quando o aplicativo usa a conexão e retorna a conexão ao pool de conexão, o pool de conexão também retorna a conexão ao banco de dados ao mesmo tempo? Obviamente, a resposta é não. Se isso acontecer, o pool de conexões se tornará desnecessário, o que não apenas melhorará o desempenho, mas também reduzirá o desempenho. Então, como lidar com a conexão após a devolução?
maxidle = "30"
Se o maxactive = 100 for alcançado durante a simultaneidade, o pool de conexões deverá obter 100 conexões do banco de dados para fornecer o aplicativo para uso. Quando o aplicativo fecha a conexão, pois MaxIdle = 30, nem todas as conexões serão retornadas ao banco de dados. 30 conexões serão mantidas no pool de conexão e o status está ocioso.
minidle = ”2”
O mínimo não entra em vigor por padrão. Seu significado é que, quando há poucos minidles no pool de conexões, o thread de monitoramento do sistema inicia a função suplementar. Geralmente, não iniciamos o encadeamento suplementar.
Pergunta: Como definir Maxactive e Maxidle?
Em teoria, o Maxactive deve ser definido como o número máximo de simultaneidade de aplicações, para que, mesmo no caso de simultaneidade máxima, o aplicativo ainda possa obter conexões do pool de conexões. No entanto, a dificuldade é que é difícil estimar com precisão o número máximo de simultaneidade. Definir -o para o número máximo de simultaneidade é uma ótima garantia de qualidade de serviço.
As conexões correspondentes do Maxidle são na verdade conexões longas mantidas pelo pool de conexões, que também é a parte em que o pool de conexões reproduz suas vantagens. Em teoria, manter conexões mais longas pode responder mais rapidamente ao aplicar solicitações, mas a manutenção de muitas conexões consumirá uma grande quantidade de recursos no banco de dados. Portanto, quanto maior o maxidle, melhor. No mesmo exemplo acima, recomendamos definir o Maxidle para um número próximo a 50 em 50-100, como 55. Isso permite manter menos conexões de banco de dados enquanto levam em consideração a simultaneidade máxima e, na maioria dos casos, ele pode fornecer ao aplicativo a velocidade correspondente mais rápida.
3. Abra o arquivo web.xml do aplicativo e adicione a seguinte configuração
<Cource-ref> <cription> conexão DB </cription> <s-ref-name> jdbc/ewsdb </s-ref-name> <ser-type> javax.sql.datasource </s-type> <ser-Auth> container </res-Auth> </Resource-ref>
<weRce-ref> Descrição do atributo:
1) Descrição: Uma explicação do recurso referenciado.
2) RES-REF-NAME: Especifica o nome JNDI do recurso referenciado, correspondendo ao atributo de nome no elemento <Source>.
3) Res-Type: Especifica o nome da classe do recurso referenciado, correspondente ao atributo de tipo no elemento <Source>.
4) Res-Auth: especifique o gerente que gerencia os recursos referenciados, correspondendo ao atributo de autenticação no elemento <Source>
4. Escreva o código Java e coloque -o no ambiente Tomcat, como segue
Crie JSP Exemplo: Myjsp.jsp
<%@ página linguagem = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c//dtd html 4.01 transitório //" http://www.ww.ww.wg.wwg.wwg.wwg/htd.wwg/htd html 4.01 transitório // "http://www.ww.ww.wg.wwg.wwg/htd Html 4.01 transitório // EN" página import = "java.io.*" %> < %@ página import = "java.util.*" %> < %@ página import = "java.sql.*" %> < %@ página import = "java.sql. import = "javax.sql.*" %> < %@ página import = "javax.sql.*" %> < %@ página import = "javax.sql.*" %> < %@ página import = "javax.naming. Declaração stmt; ResultSet RS; Contexto ctx = new InitialContext (); DataSource DS = (DataSource) ctx.lookup ("Java: Comp/Env/JDBC/EWSDB"); Conn = ds.getConnection (); stmt = conn.createstatement (); // query registros rs = stmt.executeQuery ("Selecione ID, nome, preço do teste"); // resultado da consulta de saída out.println ("<borda da tabela = 1 largura = 400>"); while (rs.Next ()) {String col1 = rs.getString (1); String col2 = rs.getString (2); float col3 = rs.getfloat (3); // imprima os dados exibidos out.println ("<tr> <td>"+col1+"</td> <td>"+col2+"</td> <td>"+col3+"</td> </tr>");} out.println ("</tabela"); // Feche o conjunto de resultados, a declaração SQL e a conexão com o banco de dados rs.close (); stmt.close (); Conn.Close (); } catch (Exceção e) {out.println (e.getMessage ()); E.PrintStackTrace (); } %> </body> </html>Digite http: // localhost: 8080/test/myjsp.jsp no seu navegador para visualizar os resultados
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!