c3p0 データベース接続プールの使用 (1)
データベース接続プールの理論的知識
c3p0 データベース接続プールを使用する場合は、まずデータベース接続プールとは何か、およびデータベース接続プールが導入される理由を理解する必要があります。
-
JDBC を使用してデータベースと対話する場合、データベースにアクセスするたびに接続が作成されます
Connection
。データベースの操作が完了すると、接続はすぐに閉じられ、次回のアクセスのために接続が再接続されます。デメリットとしては、接続申請はコンピュータの最下位層を扱うことになり、各アプリケーションの接続操作に時間がかかってしまいます。 -
したがって、上記の問題を解決するために、プログラマは接続を取得したいだけでなく、運用プロセス中に接続の申請を待機するために多くの時間とリソースを費やしたくありません。業務処理レベルで。したがって、データベース接続プールが存在します。データ接続プールの「プール」は、同じものを多数配置し、アクティビティを維持できるプールとして想像できます。データベース接続プールはデータベース接続用のプールです。その中には多数のデータベース接続が存在する可能性があり、データベース接続を使用する必要がある場合は、プールから (つまり、アドレスを通じて) 取得するだけで済みます。データベース接続プール内のデータベース接続 適用も時間のかかる操作ですが、これと前の操作の違いは何でしょうか? 確かに、データベース接続プール内のデータベース接続も申請する必要がありますが、唯一の違いは、データベース接続はアプリケーションの初期化プロセス中に事前に申請され、接続は閉じられないことです。このようにして、業務処理中にデータベース接続の申請を待つ必要がなくなり、データベース接続プールから直接「取得」するだけです。
-
データベース接続プール テクノロジはアイデアです。このアイデアを実装する企業は数多くあります。データベース接続プールの基盤となるテクノロジは企業ごとに異なりますが、効果は同じです。必要なのは、それらを使用することです。データベース上の一般的なデータベース接続プール テクノロジは、マーケットには、c3p0、ドルイド、DBCP... 今日学ぶのは c3p0 です
特定のコードは C3p0 を実装します
データベースの作成
c3p0 はサードパーティであるため、これを使用するには c3p0 jar パッケージを使用する必要があります。(Maven プロジェクトは依存関係を直接インポートできます) https://mvnrepository.com/artifact/com.mchange/c3p0 (これは Maven の特定の接続です。対応するバージョンを見つけた後に直接ダウンロードするか、依存関係をインポートできます)
ダウンロード後、jar パッケージをプロジェクトの lib ディレクトリにインポートするだけで完了です。ここではブロガーがMavenを使用しているため、この部分は表示されません。
まずは任意の名前でデータベースを作成しますが、今回作成した名前は(test)です!
次に、テーブルを作成します。具体的なコードとテーブルの構造は次のとおりです。
/*
Navicat Premium Data Transfer
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 50734
Source Host : localhost:3306
Source Schema : test
Target Server Type : MySQL
Target Server Version : 50734
File Encoding : 65001
Date: 24/09/2021 16:32:12
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for cakeshop
-- ----------------------------
DROP TABLE IF EXISTS `cakeshop`;
CREATE TABLE `cakeshop` (
`id` int(11) NOT NULL DEFAULT 0,
`name` varchar(20) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL DEFAULT NULL,
`price` double NULL DEFAULT NULL,
`size` varchar(30) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = gb2312 COLLATE = gb2312_chinese_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of cakeshop
-- ----------------------------
INSERT INTO `cakeshop` VALUES (1, '草莓蛋糕', 157, '大号');
INSERT INTO `cakeshop` VALUES (2, '蓝莓蛋糕', 121, '中号');
INSERT INTO `cakeshop` VALUES (3, '提拉米苏', 154, '小号');
INSERT INTO `cakeshop` VALUES (4, '巧克力杏仁蛋糕', 253, '大号');
INSERT INTO `cakeshop` VALUES (5, '黑森林蛋糕', 130, '中号');
INSERT INTO `cakeshop` VALUES (6, '沙架蛋糕', 156, '大号');
INSERT INTO `cakeshop` VALUES (7, '史多伦蛋糕', 214, '小号');
INSERT INTO `cakeshop` VALUES (8, 'Castella蛋糕', 221, '大号');
INSERT INTO `cakeshop` VALUES (9, '撒哈蛋糕', 234, '小号');
INSERT INTO `cakeshop` VALUES (10, '木材蛋糕', 310, '中号');
INSERT INTO `cakeshop` VALUES (11, '波士顿派', 244, '小号');
INSERT INTO `cakeshop` VALUES (12, '戚风蛋糕', 112, '小号');
INSERT INTO `cakeshop` VALUES (13, '瑞士卷', 110, '大号');
INSERT INTO `cakeshop` VALUES (14, '焦糖玛奇朵', 241, '小号');
INSERT INTO `cakeshop` VALUES (15, '翻粮蛋糕', 173, '大号');
INSERT INTO `cakeshop` VALUES (16, '维也纳巧克力杏仁蛋糕', 223, '小号');
INSERT INTO `cakeshop` VALUES (17, '起士蛋糕', 154, '大号');
INSERT INTO `cakeshop` VALUES (18, '巧克力蛋糕', 100, '中号');
INSERT INTO `cakeshop` VALUES (19, '卡布琪诺', 113, '小号');
INSERT INTO `cakeshop` VALUES (20, '火焰石', 353, '中号');
INSERT INTO `cakeshop` VALUES (21, '巧克力小雪', 190, '中号');
INSERT INTO `cakeshop` VALUES (22, '焦糖小碗', 89, '大号');
INSERT INTO `cakeshop` VALUES (23, 'Brownie布朗尼', 311, '大号');
INSERT INTO `cakeshop` VALUES (24, 'Red Velvet Cake红丝绒蛋糕', 401, '中号');
INSERT INTO `cakeshop` VALUES (25, 'Financier费南雪', 388, '中号');
SET FOREIGN_KEY_CHECKS = 1;
c3p0設定情報の注入
c3p0 の注入 データベースに関する情報は、構成ファイルまたはメソッド内の注入を通じて注入できます。
- まずディスプレイ構成ファイルを挿入しましょう。
リソースの下に c3p0-config.xml を作成します (この名前である必要があります)。その内容は次のとおりです。
<c3p0-config>
<!-- 使用默认的配置读取连接池对象 -->
<default-config>
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://47.93.197.238:3306/test</property>
<property name="user">root</property>
<property name="password">root123456</property>
<!-- 连接池参数 -->
<!--初始化的申请的连接数量-->
<property name="initialPoolSize">5</property>
<!--最大的连接数量-->
<property name="maxPoolSize">10</property>
<!--连接超时时间-->
<property name="checkoutTimeout">3000</property>
</default-config>
<named-config name="otherc3p0">
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://47.93.197.238:3306/test</property>
<property name="user">root</property>
<property name="password">root123456</property>
<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">8</property>
<property name="checkoutTimeout">1000</property>
</named-config>
</c3p0-config>