データベース接続プール
記事のディレクトリ
1.データベース接続プールとJDBCの比較
接続プールはデータベースのテクノロジーです
。JDBCはユーザーリクエストごとに新しい接続オブジェクトを作成し、使用後にユーザーをキャンセルします。複数のユーザーが同時にアクセスすると、接続オブジェクトが頻繁に作成および破棄され、メモリは破棄されました。
接続プールの初期化中に、バッチが初期化されます。データベース接続オブジェクトは、接続オブジェクトの再利用を実現するために使い果たされると、接続プールに返されます。接続オブジェクトの新しいバッチを作成するだけでは不十分です。接続の最大数に達したら、要求が解放されて接続プールに返されるのを待ちます
2.データベース接続プールの使用
2.1ガイドパッケージ
Maven Webサイトにアクセスして、必要な接続プールを検索し、コードをコピーして、プロジェクトのpom.xmlファイルにアクセスして依存関係をインポートします。
2.2使用
2.2.1db.propertiesの構成
db.propertiesで初期容量と最大容量を増やします
initSize = p.getProperty("db.initSize");
maxSize = p.getProperty("db.maxSize");
リソースディレクトリのdb.properties
db.username=root
db.password=123456
db.url=jdbc:mysql://localhost:3306/citylifefk?characterEncoding=utf8&serverTimezone=UTC
db.driver=com.mysql.jdbc.Driver
db.initSize = 25
db.maxSize = 50
2.2.2utilディレクトリのDBUtilクラス
6つの静的変数を定義し、データを1回ロードしてデータを共有します
private static String username;
private static String password;
private static String url;
private static String driver;
private static String initSize;
private static String maxSize
接続プールオブジェクトを作成する
private static BasicDataSource basicDataSource;
静的ブロックコンテンツ:
static {
try {
InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
// FileInputStream in=new FileInputStream("db.properties");
System.out.println("in:" + in);
//Properties 将properties属性文件数据以k-v的形式加载到内存中
Properties p = new Properties();
//p.load(in)将int类型加载
p.load(in);
//properties里保存到变量中
username = p.getProperty("db.username");
password = p.getProperty("db.password");
url = p.getProperty("db.url");
driver = p.getProperty("db.driver");
initSize = p.getProperty("db.initSize");
maxSize = p.getProperty("db.maxSize");
System.out.println(username);
System.out.println(password);
System.out.println(url);
System.out.println(driver);
} catch (IOException e) {
e.printStackTrace();
}
}
BasicDataSourceメソッドを使用して、接続プールを取得するためのメソッドをカプセル化します
basicDataSource = new BasicDataSource();
データベースのパラメータを接続プールオブジェクトに設定し、basicDataSourceに戻ります
basicDataSource.setDriverClassName(driver);
basicDataSource.setUsername(username);
basicDataSource.setPassword(password);
basicDataSource.setUrl(url);
basicDataSource.setInitialSize(Integer.parseInt(initSize));
basicDataSource.setMaxActive(Integer.parseInt(maxSize));
return basicDataSource;
接続プールを介して接続オブジェクトを取得します
//通过连接池获取连接对象
public static Connection getConn(){
Connection connection = null;
try {
connection = DBUtil.getBData().getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
DBUtilの完全なコードは、utilディレクトリにあります。
package util;
/*
连接数据的类
*/
import org.apache.commons.dbcp.BasicDataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class DBUtil {
private static String username;
private static String password;
private static String url;
private static String driver;
private static String initSize;
private static String maxSize;
private static BasicDataSource basicDataSource;
static {
try {
InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
// FileInputStream in=new FileInputStream("db.properties");
System.out.println("in:" + in);
Properties p = new Properties();
p.load(in);
username = p.getProperty("db.username");
password = p.getProperty("db.password");
url = p.getProperty("db.url");
driver = p.getProperty("db.driver");
initSize = p.getProperty("db.initSize");
maxSize = p.getProperty("db.maxSize");
System.out.println(username);
System.out.println(password);
System.out.println(url);
System.out.println(driver);
} catch (IOException e) {
e.printStackTrace();
}
}
//封装一个获取连接池的连接方法
public static BasicDataSource getBData() {
basicDataSource = new BasicDataSource();
//将数据库的参数设置到连接池对象中
basicDataSource.setDriverClassName(driver);
basicDataSource.setUsername(username);
basicDataSource.setPassword(password);
basicDataSource.setUrl(url);
//将字符串转为Integeter类型
basicDataSource.setInitialSize(Integer.parseInt(initSize));
basicDataSource.setMaxActive(Integer.parseInt(maxSize));
return basicDataSource;
}
//通过连接池获取连接对象
public static Connection getConn(){
Connection connection = null;
try {
connection = DBUtil.getBData().getConnection();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return connection;
}
}
2.2.3テスト
TestパッケージのJavaパッケージの下に新しいテストクラスを作成します:DBTest
import org.junit.Test;
import util.DBUtil;
import java.sql.Connection;
public class DBTest {
//单元测试 junit 单元测试包
/*单元测试方法
注意:1 方法返回值只能写void
2 方法不能传参数
3 方法上面使用@Test注解*/
@Test
public void test1(){
Connection conn = DBUtil.getConn();
System.out.println("conn:"+conn);
}
}
試験結果:
印刷されたconnデータベース接続プール接続が成功しました