Use la agrupación de conexiones para administrar las conexiones JDBC: la fuente de datos DBCP y la fuente de datos C3P0

Escribí anteriormente cómo Java se conecta a una base de datos simplemente y obtiene una conexión a través de DriverManager, pero rara vez se usa en la práctica, debido a la baja eficiencia, el uso de grupos de conexiones puede mejorar en gran medida el rendimiento del programa

Primero, el principio del conjunto de conexiones de la base de datos

Cuando se utiliza una base de datos, la necesidad de base de datos para conectar, la conexión es a la original: la obtención de la conexión DriverManager , una base de datos objeto de conexión corresponde a una conexión de base de datos física , cada operación de base de datos se abre una conexión física, y luego remató uso, frecuente Abrir y cerrar causará un bajo rendimiento del sistema , como se muestra en la figura:

Entonces, ¿cómo resolvemos la ineficiencia causada por la frecuente apertura y cierre de las conexiones de la base de datos cuando se usa la base de datos?

El grupo de conexiones de la base de datos se resuelve de esta manera:

cuando se inicia la aplicación, el sistema establece activamente suficientes conexiones de base de datos y forma estas conexiones en un grupo . Cada vez que se usa, no es necesario volver a abrir la conexión, y se toma directamente del grupo de conexiones. Se usan algunas conexiones, están agotadas y no es necesario cerrarlas , solo regrese al grupo de conexiones. Usando el grupo de conexiones, la eficiencia del programa ha mejorado enormemente.

En segundo lugar, el uso del grupo de conexión de la base de datos.

JDBC agrupación de conexiones de base de datos utilizada para representar javax.sql.DataSource, el origen de datos solamente una interfaz a , un servidor comercial tiene que proporcionar para lograr, se utilizan más comúnmente para lograr organizaciones abiertas (como el DBCP, C3P0), el origen de datos se denomina generalmente como fuente de datos , que comprende Grupo de conexión y gestión de grupo de conexión, pero es habitual referirse a DataSource como grupo de conexión

1. fuente de datos DBCP

La implementación del grupo de conexión debe basarse en dos paquetes jar. Para todos los primeros pasos, primero debe agregar paquetes jar:

Use la fuente de datos DBCP para obtener el método de conexión de la base de datos :

	//创建数据源对象
	BasicDataSource bds = new BasicDataSource(); 
	//设置连接池所需的驱动
	bds.setDriverClassName("com.mysql.jdbc.Driver");
	//设置连接数据库的URL
	bds.setUrl("jdbc:mysql://localhost:3306/csdn");
	//设置连接数据库的用户名
	bds.setUsername("root");
	//设置连接数据库的密码
	bds.setPassword("root");
	//设置连接池的初始连接数
	bds.setInitialSize(5);
	//设置连接池最多有多少个活动的连接数
	bds.setMaxActive(20);
	//设置连接池中最多有多少空闲的连接
	bds.setMinIdle(2);

Nota: toda la aplicación solo necesita una fuente de datos , lo que significa que el código anterior solo se ejecuta una vez

Optimización: puede establecer los bds anteriores como una variable miembro estática e inicializar el objeto de origen de datos cuando se inicia la aplicación. Cuandosea ​​necesario obtener una conexión de base de datos en el programa, acceda directamente al objeto bds y obtenga una conexión de base de datos

Luego obtenga la conexión de la base de datos a través de DataSource :

	//通过数据源获得数据库的连接
	Connection con = bds.getConnection();
	......
	//释放连接
	con.close();
2. Fuente de datos C3P0

En comparación con la fuente de datos DBCP anterior, el rendimiento de la fuente de datos C3P0 es mejor , se recomienda su uso , ya que C3P0 puede limpiar automáticamente la conexión ya no se usa , también puede limpiar automáticamente la declaración y ResultSet .

Del mismo modo, si utiliza el grupo de conexiones C3P0, debe aumentar el paquete jar: c3p0-0.9.1.2.jar

Utilice la fuente de datos C3P0 para obtener el método de conexión de la base de datos :

	//创建连接池实例
	ComboPooleDataSource cds = new ComboPooleDataSource();
	//设置连接池所需的驱动
	cds.setDriverClass("com.mysql.jdbc.Driver");
	//设置连接数据库的URL
	cds.setjdbcUrl("jdbc:mysql://localhost:3306/csdn");
	//设置连接数据库的用户名
	cds.setUser("root");
	//设置连接数据库的密码
	cds.setPassword("root");
	//设置连接池的初始连接数
	cds.setInitialPoolSize(20);
	//设置最大连接数
	cds.setMaxPoolSize(30);
	//设置最小连接数
	cds.setMinPoolSize(3);
	//设置连接池里的缓存 Statement 的最大数
	cds.setMaxStatement(150);

La forma de crear un grupo de conexiones C3P0 es básicamente similar al método anterior para crear un grupo de conexiones DBCP. Después de obtener el grupo de conexiones C3P0, se obtiene la misma conexión a la base de datos :

	//获得数据库的连接
	Connection con = cds.getConnection();
	//同样的释放连接
	con.close();

Nota: En este momento, la liberación de la conexión de base de datos , pero no cierra la base de datos de la conexión física , sólo la liberación de la conexión, libera la conexión a la piscina, otros usuarios pueden también utilizar la conexión.

Publicado 7 artículos originales · ganó 8 · visitado 1268

Supongo que te gusta

Origin blog.csdn.net/tanghaixu/article/details/105622680
Recomendado
Clasificación