Combate JDBC (7) Apache commons e fonte de dados de fonte aberta pool de conexão DBCP

Apache commons e pool de conexão de fonte de dados de fonte aberta DBCP

1 、 Apache commons

Apache Commons é um kit de ferramentas muito útil para resolver vários problemas práticos comuns . O site oficial do Apache Commons é apresentado.
Aqui estão algumas introduções do kit de ferramentas:

Tipos de descrição
BeanUtils Commons-BeanUtils fornece pacotes para reflexão Java e API de introspecção
Entre A Betwixt fornece serviços para mapear JavaBeans para documentos XML e vice-versa.
Corrente A cadeia fornece o "modelo de cadeia de responsabilidade" que realiza o complexo fluxo de processamento da organização.
CLI CLI fornece API simples para parâmetros de linha de comando, opções, grupos de opções, opções obrigatórias, etc.
Codec Codec contém alguns algoritmos gerais de codificação e decodificação. Incluindo alguns codificadores de voz, Hex, Base64 e codificador de URL.
Coleções Commons-Collections fornece um pacote de classes para estender e aumentar o framework Java Collection padrão
Configuração A ferramenta Commons-Configuration fornece ajuda de leitura para várias configurações e arquivos de referência.
Daemon Um mecanismo alternativo para código java tipo daemon unix
DBCP Commons-DBCP fornece serviço de pool de conexão de banco de dados
DbUtils DbUtils é uma biblioteca auxiliar JDBC, código de limpeza de recursos simples para completar tarefas de banco de dados.
Digestor Commons-Digester é uma ferramenta de mapeamento de objetos XML-Java para analisar arquivos de configuração XML.
Descoberta Commons-Discovery fornece ferramentas para localizar recursos (incluindo classes) e mapear nomes de serviço / referência e nomes de recursos usando vários padrões. .
ELE Commons-EL fornece um interpretador para expressões EL definidas na especificação JSP2.0.
FileUpload FileUpload torna mais fácil adicionar recursos de upload de arquivo poderosos e de alto desempenho para seus aplicativos e servlets
HttpClient Commons-HttpClient fornece uma estrutura que pode funcionar com clientes de protocolo HTTP.
Eu IO é um conjunto de ferramentas I / O
Geléia Jelly é um mecanismo de processamento e script baseado em XML. O Jelly aproveita as muitas vantagens das tags designadas por JSP, mecanismos de script no Velocity, Cocoon e Xdoclet. O Jelly pode ser usado na linha de comando, Ant ou Servlet.
Jexl Jexl é uma linguagem de expressão que estende a linguagem de expressão definida por JSTL com base na experiência do Velocity. .
JXPath Commons-JXPath fornece ferramentas para usar a sintaxe Xpath para manipular JavaBeans de acordo com a convenção de nomenclatura de classe Java. Também oferece suporte a mapas, DOM e outros modelos de objetos. .
Lang Commons-Lang fornece muitos conjuntos de classes de ferramentas comuns e fornece algumas funções estendidas das classes java.lang
Fantoche Commons-Latka é um pacote de teste funcional HTTP para QA automatizado, teste de aceitação e atenuação.
Lançador O componente Launcher é um carregador de aplicativos Java de plataforma cruzada. Commons-launcher elimina a necessidade de processamento em lote ou scripts Shell para carregar classes Java. A classe Java original vem do projeto Jakarta Tomcat 4.0
Exploração madeireira Commons-Logging é uma classe de pacote que implementa várias APIs de registro.
Matemática Matemática é um componente matemático e estatístico leve e independente que resolve muitos problemas práticos que são muito comuns, mas não apareceram na linguagem padrão Java a tempo.
Modelador Commons-Modeler fornece um mecanismo para modelar MBeans compatível com a especificação JMX.
Internet Net é um conjunto de ferramentas de rede, baseado no código NetComponents, incluindo cliente FTP e assim por diante.
Piscina Commons-Pool fornece uma interface comum de pool de objetos, um kit de ferramentas para criar pools de objetos modulares e implementações de pools de objetos comuns.
Primitivas Commons-Primitives fornece um suporte menor, mais rápido e fácil de usar para tipos básicos de Java. Atualmente, é principalmente para coleções de tipos básicos. .
Validador commons-validator fornece uma estrutura simples e extensível para definir validadores (métodos de validação) e regras de validação em um arquivo XML. Apoiar a internacionalização de regras de verificação e mensagens de erro.

2. Use o DBCP de código aberto para otimizar o design da fonte de dados

Dois pacotes são necessários para usar a conexão de fonte de dados DBCP em JDBC

Você também pode baixar, se necessário

Após o download, adicione-o ao módulo de projeto correspondente. Arquivo- "Estrutura do Projeto-" Módulo- "Dependências
在这里插入图片描述

2.1, use DBCP para substituir o código da fonte de dados do pool de conexão da fonte de dados

Dê uma olhada no código anterior:

public final class JDBCUtils {
    
    
    private static DataSource datasource;//代理模式的数据源2,实现了DataSource接口
    public static Connection getConnect() throws SQLException {
    
    //异常应该抛出
        return datasource.getConnection();
    }

    static{
    
    //使用class.forName()方法一般用于静态代码块,而且该方法注册驱动不依赖具体的类库
        try {
    
    
            //forName进行类的加载时优先加载静态代码块。
            Class.forName("com.mysql.cj.jdbc.Driver");
            datasource=new DataSource2();
        } catch (ClassNotFoundException e) {
    
    
            e.printStackTrace();
        }
    }


    public static void free(Connection conn, Statement st, ResultSet res) {
    
    
        try {
    
    
            if (res != null) //原则1:晚点连接早点释放。原则2:先创建的后释放
                res.close();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
                try {
    
    
                    if (st != null)
                        st.close();
                } catch (SQLException e) {
    
    
                    e.printStackTrace();
                } finally {
    
    
                    if (conn != null)
                        try {
    
    
                            conn.close();
                            //datasource.free(conn);//重用,将创建的连接不关闭,而是将其回收到连接池
                        } catch (Exception e) {
    
    
                            e.printStackTrace();
                        }
                }
        }
    }
 }

Usamos uma implementação de pool de conexão de fonte de dados simples escrita por nós mesmos. Agora usamos DBCP para mudar.

Etapa 1: crie um arquivo de configuração (defina as informações básicas de propriedade da conexão)

No desenvolvimento real, geralmente criamos um arquivo de configuração de propriedades e, em seguida, colocamos os parâmetros do banco de dados no arquivo de configuração, o que facilita o gerenciamento dos parâmetros do banco de dados.Quando os parâmetros do banco de dados mudam, você pode encontrar rapidamente o arquivo de configuração e depois modificá-lo.
在这里插入图片描述
Se você não estiver criando um arquivo de configuração, precisará criar uma propriedade no código e, em seguida, definir os parâmetros do banco de dados, que são difíceis de escrever. Não é suficientemente flexível.

第二步,修改数据源的引用和创建
我们只需要修改下面这段代码:

static{
    
    //使用class.forName()方法一般用于静态代码块,而且该方法注册驱动不依赖具体的类库
        try {
    
    
            //forName进行类的加载时优先加载静态代码块。
            Class.forName("com.mysql.cj.jdbc.Driver");
            datasource=new DataSource2();
        } catch (ClassNotFoundException e) {
    
    
            e.printStackTrace();
        }
    }

修改为:

 static{
    
    //使用class.forName()方法一般用于静态代码块,而且该方法注册驱动不依赖具体的类库
        try {
    
    
            //forName进行类的加载时优先加载静态代码块。
            Class.forName("com.mysql.cj.jdbc.Driver");
            //datasource=new DataSource2();
            InputStream inputs = JDBCUtils.class.getClassLoader().getResourceAsStream("DBCP_Config.properties");
            Properties properties = new Properties();
            properties.load(inputs);
            datasource = BasicDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

运行代码报错,原因就是我们利用的加载文件的方式是JDBCUtils.class.getClassLoader().getResourceAsStream(),而我们的文件没有放对位置。其路径,我们可用如下方法打印出来。

  System.out.println(JDBCUtils.class.getClassLoader().getResource(""));

在这里插入图片描述

在将配置文件放到了对应的目录以后运行测试代码

 for(int i=0;i<10;i++){
    
    
            Connection conn = JDBCUtils.getConnect();
            System.out.println(conn);
            JDBCUtils.free(conn,null,null);
        }

报错:
在这里插入图片描述
原因:从理解上看是缺少了一个类文件,logging,即缺少了commons-logging-1.2-bin.tar.gz架包。导入以后运行:
在这里插入图片描述
从输出上看,我们可对比我们自己实现的dataSource,可以说DBCP自己肯定重写了toString方法。输出的是数据库连接的一些信息。

2.2、总结

  • 一,使用DBCP的重点是获取DataSource对象
  • 二,使用DBCP不仅可以节约资源,而且可以直接将查询结果封装成对象,方便使用。
  • 三,在实际开发中建议使用properties配置文件。

Acho que você gosta

Origin blog.csdn.net/qq_44861675/article/details/107871172
Recomendado
Clasificación