2. Agrupación de conexiones JDBC

1. Grupo de conexiones JDBC

En el desarrollo real, obtener conexiones o liberar conexiones requiere muchos recursos. Utilizamos la tecnología de agrupación de conexiones para resolver problemas de rendimiento.

1.1 Descripción general del grupo de conexiones

1.1.1 Concepto

Use el grupo para administrar la conexión, de modo que la conexión pueda reutilizarse. Usamos el grupo para obtener la conexión. Después de llamar a close () de la conexión, no está realmente cerrado, sino que regresó al grupo.
Inserte la descripción de la imagen aquí

1.1.2 Especificaciones

Java proporciona una interfaz común para el grupo de conexiones de la base de datos: javax.sql.Datasource. Cada fabricante debe implementar esta interfaz en su propio grupo de conexiones para facilitar que el programa cambie entre diferentes grupos de conexiones.

1.2 Grupo de conexiones personalizado

1.2.1 Análisis

  • Cree una implementación de grupo de conexión (fuente de datos) e implemente la interfaz javax.sql.Datasource. En este caso, solo se usa el método getConnection (). Para simplificar este caso, proporcione el método usted mismo y no implemente la interfaz.
  • Proporcione una colección para almacenar conexiones, eliminar y agregar operaciones, seleccione LinkedList.
  • Inicialice el grupo y proporcione tres conexiones.
  • Llame a getConnection () para obtener la conexión. Para asegurarse de que la conexión actual solo puede ser utilizada por un subproceso, la conexión se elimina del grupo.
  • Cuando termine, llame a Cerrar () de Conexión para devolver la conexión al grupo.

1.2.2 Código

package com.freedom.pool;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.LinkedList;

public class JdbcUtils {
	private static final String url = "jdbc:mysql://localhost:3306/javaweb";
	private static final String user = "root";
	private static final String password = "258369";
	// 创建池并初始化
	private static LinkedList<Connection> pool = new LinkedList<>();
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			for (int i = 0; i < 3; i++) {
				Connection connection = DriverManager.getConnection(url, user, password);
				pool.add(connection);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * @Description: 获得连接
	 * @return
	 */
	public static Connection getConnection() {
		return pool.removeFirst();
	}

	/**
	 * @Description: 释放连接
	 * @param connection
	 */
	public static void release(Connection connection) {
		if (connection != null) {
			pool.addLast(connection);
		}
	}

}

1.3 Grupo de conexiones personalizado: mejora del método

1.3.1 Requisitos

La desventaja de lo anterior es que cuando se devuelve la conexión, se debe llamar al método release (). Si el usuario llama al cierre () de la conexión, se liberarán los recursos, de modo que el grupo de conexiones se pueda usar sin conexión. Para este propósito, el método close () necesita ser mejorado para que tenga la función de devolver la conexión.

1.3.2 Método de implementación

Los métodos de mejora incluyen herencia, modo decorador y proxy dinámico, que se implementa aquí usando el modo decorador.

1.3.3 Código

public class MyConnection implements Connection {

	private Connection connection;

	private LinkedList<MyConnection> pool;

	public MyConnection(Connection connection, LinkedList<MyConnection> pool) {
		this.connection = connection;
		this.pool = pool;
	}

	@Override
	public void close() throws SQLException {
		// 方法增强
		pool.addLast(this);
	}

	// 其他方法调用原来的方法
	@Override
	public <T> T unwrap(Class<T> iface) throws SQLException {
		return connection.unwrap(iface);
	}
	
	//------这里省略其他方法--------//
}
public class MyJdbcUtils {
	private static final String url = "jdbc:mysql://localhost:3306/javaweb";
	private static final String user = "root";
	private static final String password = "258369";
	// 创建池并初始化
	private static LinkedList<MyConnection> pool = new LinkedList<>();
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			for (int i = 0; i < 3; i++) {
				Connection connection = DriverManager.getConnection(url, user, password);
				MyConnection myConnection = new MyConnection(connection, pool);
				pool.add(myConnection);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * @Description: 获得连接
	 * @return
	 */
	public static Connection getConnection() {
		return pool.removeFirst();
	}

}

97 artículos originales publicados · elogiados 3 · 10,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_39530821/article/details/103058616
Recomendado
Clasificación