JDBC combat (7) Apache commons y grupo de conexiones de fuente de datos de código abierto DBCP

Apache commons y grupo de conexiones de fuente de datos de código abierto DBCP

1 、 Apache commons

Apache Commons es un kit de herramientas muy útil para resolver varios problemas prácticos comunes . Se presenta el sitio web oficial de Apache Commons.
Aquí hay algunas introducciones del kit de herramientas:

Tipos de descripción
BeanUtils Commons-BeanUtils proporciona paquetes para la API de introspección y reflexión de Java
Entre Betwixt proporciona servicios para mapear JavaBeans a documentos XML y viceversa.
Cadena Chain proporciona el "modelo de cadena de responsabilidad" que se da cuenta del complejo flujo de procesamiento de la organización.
CLI CLI proporciona una API simple para parámetros de línea de comandos, opciones, grupos de opciones, opciones obligatorias, etc.
Códec El códec contiene algunos algoritmos generales de codificación y decodificación. Incluyendo algunos codificadores de voz, codificador Hex, Base64 y URL.
Colecciones Commons-Collections proporciona un paquete de clases para ampliar y aumentar el marco estándar de Java Collection
Configuración La herramienta Commons-Configuration proporciona ayuda de lectura para varias configuraciones y archivos de referencia.
Demonio Un mecanismo alternativo para el código java tipo unix-daemon
DBCP Commons-DBCP proporciona servicio de grupo de conexiones de base de datos
DbUtils DbUtils es una biblioteca auxiliar de JDBC, un código de limpieza de recursos simple para completar las tareas de la base de datos.
Digeridor Commons-Digester es una herramienta de mapeo de objetos XML-Java para analizar archivos de configuración XML.
Descubrimiento Commons-Discovery proporciona herramientas para localizar recursos (incluidas las clases) y mapas de servicios / nombres de referencia y nombres de recursos mediante el uso de varios patrones. .
EL Commons-EL proporciona un intérprete para las expresiones EL definidas en la especificación JSP2.0.
Subir archivo FileUpload facilita la adición de capacidades de carga de archivos potentes y de alto rendimiento a sus aplicaciones y servlets
HttpClient Commons-HttpClient proporciona un marco que puede funcionar con clientes de protocolo HTTP.
yo IO es un conjunto de herramientas de E / S
Gelatina Jelly es un motor de procesamiento y secuencias de comandos basado en XML. Jelly aprovecha las muchas ventajas de las etiquetas designadas JSP, los motores de script en Velocity, Cocoon y Xdoclet. Jelly se puede utilizar en la línea de comandos, Ant o Servlet.
Jexl Jexl es un lenguaje de expresión que amplía el lenguaje de expresión definido por JSTL basándose en la experiencia de Velocity. .
JXPath Commons-JXPath proporciona herramientas para usar la sintaxis de Xpath para manipular JavaBeans conforme a la convención de nomenclatura de clases de Java. También es compatible con mapas, DOM y otros modelos de objetos. .
Lang Commons-Lang proporciona muchos conjuntos de clases de herramientas comunes y algunas funciones extendidas de clases java.lang
Marioneta Commons-Latka es un paquete de prueba funcional HTTP para pruebas automatizadas de control de calidad, aceptación y atenuación.
Lanzacohetes El componente Launcher es un cargador de aplicaciones Java multiplataforma. Commons-launcher elimina la necesidad de procesamiento por lotes o scripts Shell para cargar clases Java. La clase Java original proviene del proyecto Jakarta Tomcat 4.0
Inicio sesión Commons-Logging es una clase de paquete que implementa varias API de registro.
Matemáticas Math es un componente matemático y estadístico ligero y autónomo que resuelve muchos problemas prácticos que son muy comunes pero que no han aparecido en el lenguaje estándar de Java a tiempo.
Modelador Commons-Modeler proporciona un mecanismo para modelar MBeans compatibles con la especificación JMX.
Red Net es un conjunto de herramientas de red, basado en el código NetComponents, incluido el cliente FTP, etc.
Piscina Commons-Pool proporciona una interfaz de grupo de objetos común, un conjunto de herramientas para crear grupos de objetos modulares e implementaciones de grupos de objetos comunes.
Primitivos Commons-Primitives proporciona un soporte más pequeño, más rápido y más fácil de usar para los tipos básicos de Java. Actualmente, es principalmente para colecciones de tipos básicos. .
Validador commons-validator proporciona un marco simple y extensible para definir validadores (métodos de validación) y reglas de validación en un archivo XML. Apoyar la internacionalización de reglas de verificación y mensajes de error.

2. Utilice DBCP de código abierto para optimizar el diseño de la fuente de datos

Se requieren dos paquetes para usar la conexión de origen de datos DBCP en JDBC

También puede descargar si es necesario

Después de descargarlo, agréguelo al módulo de proyecto correspondiente. Archivo- "Estructura del proyecto-" Módulo- "Dependencias
在这里插入图片描述

2.1, use DBCP para reemplazar el código de la fuente de datos del grupo de conexiones de la fuente de datos

Eche un vistazo al 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 una implementación de grupo de conexiones de fuente de datos simple escrita por nosotros mismos. Ahora usamos DBCP para cambiar.

Paso 1: Cree un archivo de configuración (establezca la información de propiedad básica de la conexión)

En el desarrollo real, generalmente creamos un archivo de configuración de propiedades y luego colocamos los parámetros de la base de datos en el archivo de configuración, lo que facilita la gestión de los parámetros de la base de datos.Cuando los parámetros de la base de datos cambian, puede encontrar rápidamente el archivo de configuración y luego modificarlo.
在这里插入图片描述
Si no está creando un archivo de configuración, entonces necesita crear una propiedad en el código y luego establecer los parámetros de la base de datos, lo cual es difícil de escribir. No lo suficientemente flexible.

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

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配置文件。

Supongo que te gusta

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