¿Qué es un grupo de conexiones de base de datos?

En Java, las tecnologías de acceso a bases de datos se pueden dividir en las siguientes categorías:

  • JDBC accede directamente a la base de datos
  • Tecnología JDO
  • Herramientas de O / R de terceros, como Hibernate, ibatis, mybatis, etc.

JDBC es la piedra angular de java para acceder a la base de datos, JDO, Hibernate, etc., simplemente encapsula mejor JDBC.
JDBC (Java Database Connectivity) es una interfaz pública (un conjunto de API) que es independiente de un sistema de administración de base de datos específico y de un acceso y operación de base de datos SQL general . Define una biblioteca de clases Java estándar para acceder a la base de datos, (java.sql , javax .sql) Utilice esta biblioteca para acceder fácilmente a los recursos de la base de datos de forma estándar. JDBC proporciona una forma unificada de acceder a diferentes bases de datos , protegiendo algunos problemas detallados para los desarrolladores. El objetivo de JDBC es permitir que los programadores de Java utilicen JDBC para conectarse a cualquier sistema de base de datos que proporcione un controlador JDBC, de modo que los programadores no necesiten saber demasiado sobre las características de un sistema de base de datos en particular, lo que simplifica y acelera enormemente la proceso de desarrollo.
Inserte la descripción de la imagen aquí
Por supuesto, puede usar los controladores de diferentes proveedores de bases de datos sin usar una interfaz JDBC unificada, pero esto no reflejará la portabilidad de Java.
JDBC es un conjunto de interfaces proporcionadas por la empresa Sun para operaciones de bases de datos. Los programadores de Java solo necesitan programar para este conjunto de interfaces. Los diferentes proveedores de bases de datos deben proporcionar diferentes implementaciones para este conjunto de interfaces. La colección de diferentes implementaciones es el motor de diferentes bases de datos. ----- Programación orientada a interfaces

Es decir,
JDBC: un conjunto de
controladores JDBC de interfaz para operaciones de base de datos : se deben proporcionar diferentes implementaciones para este conjunto de interfaces. La colección de diferentes implementaciones es el controlador de diferentes bases de datos. Por ejemplo, el uso de mysql requiere un paquete jar controlado por mysql

Grupo de conexiones de base de datos c3p0, dhcp

Al usar y desarrollar programas web basados ​​en bases de datos, el modo tradicional (JDBC) básicamente sigue los siguientes pasos:

  1. Establecer una conexión de base de datos en el programa principal (como servlet, beans)
  2. Realizar operaciones sql
  3. Desconecte la conexión de la base de datos

Sin embargo, existen problemas con este modo de desarrollo:
las conexiones ordinarias de la base de datos JDBC se obtienen utilizando DriverManager. Cada vez que se establece una conexión a la base de datos, la conexión debe cargarse en la memoria y luego se verifican el nombre de usuario y la contraseña (se toma 0.05s ~ 1s) de tiempo). Cuando se necesita una conexión a la base de datos, se solicita una a la base de datos y la conexión se desconecta una vez finalizada la ejecución. De esta manera consumirá muchos recursos y tiempo. Los recursos de conexión a la base de datos no se han reutilizado correctamente. Si cientos o incluso miles de personas están en línea al mismo tiempo, las operaciones frecuentes de conexión a la base de datos ocuparán una gran cantidad de recursos del sistema e incluso pueden causar fallas en el servidor.
Para cada conexión de base de datos, debe desconectarse después de su uso. De lo contrario, si el programa no se cierra debido a una anomalía, provocará una pérdida de memoria en el sistema de la base de datos y, finalmente, hará que la base de datos se reinicie.
Este tipo de desarrollo no puede controlar la cantidad de objetos de conexión creados y los recursos del sistema se asignarán sin consideración. Si hay demasiadas conexiones, también puede causar pérdidas de memoria y fallas del servidor.
Para resolver el problema de conexión de la base de datos en el desarrollo tradicional, se puede utilizar la tecnología de grupo de conexión de base de datos.
La idea básica del grupo de conexiones de la base de datos es establecer un "grupo de búfer" para las conexiones de la base de datos. Ponga un cierto número de conexiones en el grupo de búfer de antemano. Cuando necesite establecer una conexión de base de datos, solo necesita sacar una del "grupo de búfer" y volver a colocarla después de su uso.
El grupo de conexiones de la base de datos es responsable de asignar, administrar y liberar las conexiones de la base de datos y permite que las aplicaciones reutilicen una conexión de base de datos existente en lugar de restablecer una.
Cuando se inicializa el grupo de conexiones de la base de datos, se crea un cierto número de conexiones de la base de datos y se coloca en el grupo de conexiones. El número de estas conexiones de la base de datos se establece por el número mínimo de conexiones de la base de datos. Independientemente de si estas conexiones de base de datos se utilizan o no, el grupo de conexiones siempre se asegurará de que haya al menos este número de conexiones. El número máximo de conexiones de base de datos en el grupo de conexiones limita el número máximo de conexiones que este grupo de conexiones puede ocupar. Cuando el número de conexiones solicitadas por la aplicación del grupo de conexiones excede el número máximo de conexiones, estas solicitudes se agregarán al cola de espera.

El grupo de conexiones de base de datos de JDBC está representado por javax.sql.DataSource. DataSource es solo una interfaz. La interfaz generalmente la implementa el servidor (Weblogic, WebSphere, Tomcat). También hay algunas organizaciones de código abierto que brindan implementación:

  • Grupo de conexiones de base de datos DBCP
  • Grupo de conexiones de base de datos C3P0

DataSource generalmente se denomina fuente de datos, que incluye dos partes: grupo de conexiones y administración del grupo de conexiones. Es habitual llamar a DataSource como grupo de conexiones.
DataSource se usa para reemplazar DriverManager para obtener Connection, que es rápido y puede mejorar en gran medida el acceso a la base de datos. velocidad.
Fuente de datos DHCP

DBCP es una implementación de grupo de conexiones de código abierto de Apache Software Foundation. Este grupo de conexiones depende de otro sistema de código abierto de esta organización: Common-pool. Si desea utilizar esta implementación de grupo de conexiones, debe agregar los siguientes dos archivos jar a el sistema:
Commons -dbcp.jar: la realización del grupo de conexiones
Commons-pool.jar: el grupo de conexiones de la biblioteca dependiente
Tomcat realizado por el grupo de conexiones se realiza mediante este grupo de conexiones. El grupo de conexiones de la base de datos se puede utilizar en combinación con el servidor de aplicaciones o la aplicación puede utilizarlo de forma independiente.

La fuente de datos es diferente a la conexión a la base de datos, no es necesario crear múltiples fuentes de datos, es la fábrica la que genera la conexión a la base de datos, por lo que toda la aplicación solo necesita una fuente de datos.
Cuando finaliza el acceso a la base de datos, el programa aún cierra la conexión de la base de datos como antes: conn.close (); Pero el código anterior no cierra la conexión física a la base de datos, simplemente libera la conexión de la base de datos y la devuelve a la conexión de la base de datos. piscina.

Hay dos formas de crear conexiones de base de datos para los dos grupos de conexiones.

public class DataSourceTest {
    
    
	
	//使用 C3P0 方式二:
	@Test
	public void test4() throws SQLException{
    
    
		DataSource ds = new ComboPooledDataSource("helloc3p0");
		
		Connection conn = ds.getConnection();
		
		System.out.println(conn);
	}
	
	//使用 C3P0 方式一:
	@Test
	public void test3() throws Exception{
    
    
		ComboPooledDataSource cpds = new ComboPooledDataSource();
		cpds.setDriverClass("com.mysql.jdbc.Driver");
		cpds.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/test");
		cpds.setUser("root");
		cpds.setPassword("123456");
	 
		Connection conn = cpds.getConnection();
		
		System.out.println(conn);
	}
	
	//使用 DBCP 方式二:
	@Test
	public void test2() throws Exception{
    
    
		Properties pros = new Properties();
		pros.load(DataSourceTest.class.getClassLoader().getResourceAsStream("dbcp.properties"));
		
		DataSource ds = BasicDataSourceFactory.createDataSource(pros);
		
		Connection conn = ds.getConnection();
		
		System.out.println(conn);
	}
	
	//使用 DBCP 方式一:
	@Test
	public void test1() throws SQLException{
    
    
		BasicDataSource bds = new BasicDataSource();
		bds.setDriverClassName("com.mysql.jdbc.Driver");
		bds.setUrl("jdbc:mysql://127.0.0.1:3306/test");
		bds.setUsername("root");
		bds.setPassword("123456");
		
		bds.setInitialSize(10);
		bds.setMaxActive(10);
		
		Connection conn = bds.getConnection();
		
		System.out.println(conn);
		
		//将连接放回到连接池中
		conn.close();
	}
 
}

El uso del segundo c3p0 requiere un archivo de configuración (por supuesto, también puede usar un archivo de propiedades), y el nombre del archivo de configuración debe ser c3p0-config.xml, porque la capa inferior del fabricante de la base de datos encapsula los datos basados ​​en la clave- value, por lo que se basará en esta clave. Para realizar una lectura coincidente, debe colocarse bajo la ruta de src, ya que la lectura se realiza mediante un cargador de clases. El uso de dhcp en el segundo método requiere un archivo de propiedades que es aproximadamente el mismo que el archivo de propiedades de jdbc, así que no lo repetiré.

c3p0-config.xml

<c3p0-config>
  <named-config name="helloc3p0"> 
  
  	<!-- 连接数据库的四个字符串 -->
  	<property name="driverClass">com.mysql.jdbc.Driver</property>
  	<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/test</property>
  	<property name="user">root</property>
  	<property name="password">123456</property>
  
  	<!-- 若连接池满了一次增长几个 -->
    <property name="acquireIncrement">5</property>
    
    <!-- 连接池初始大小 -->
    <property name="initialPoolSize">10</property>
    
    <!-- 连接池中最小连接数 -->
    <property name="minPoolSize">5</property>
    
    <!-- 连接池中最大连接数 -->
    <property name="maxPoolSize">10</property>
 
	<!-- 整个连接池中最多管理的 Statement 的个数 -->
    <property name="maxStatements">10</property> 
    
    <!-- 连接池中每个连接最多管理的 Statement 的个数 -->
    <property name="maxStatementsPerConnection">2</property>
 
  </named-config>
</c3p0-config>

Nota: El nombre del archivo de configuración debe ser coherente con los parámetros que se pasarán en DataSource ds = new ComboPooledDataSource ("helloc3p0");

Supongo que te gusta

Origin blog.csdn.net/WA_MC/article/details/113526437
Recomendado
Clasificación