データベース接続プール(c3p0 + druid + druidツールクラス)
注:この実験は、mavenプロジェクトの下にjarパッケージをインポートするようにpom.xmlファイルを構成することです。
データベース接続プール:実際にはコンテナ(コレクション)、データベース接続を格納するためのコンテナ
システムが初期化された後、コンテナが作成され、いくつかの接続オブジェクトがコンテナに適用されます。ユーザーがデータベースにアクセスすると、接続オブジェクトがコンテナから取得されます。ユーザーがデータベースにアクセスすると、接続オブジェクトが返されます。コンテナに。
- リソースを節約する
- ユーザーアクセスがより効率的
- javax.sql.DataSource
- インターフェイスには特定の実装クラスはありませんが、ドライバーサプライヤは使用中にインターフェイスを実装します
DataSource 接口由驱动程序供应商实现。共有三种类型的实现 1. 基本实现 - 生成标准的 Connection 对象 2. 连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。 3. 分布式事务实现 - 生成一个 Connection 对象,该对象可用于分布式事务,大多数情况下总是参与连接池。此实现与中间层事务管理器一起使用,大多数情况下总是与连接池管理器一起使用。 4. 接口的方法(获取连接) Connection getConnection() 尝试建立与此 DataSource 对象所表示的数据源的连接。 Connection getConnection(String username, String password) 尝试建立与此 DataSource 对象所表示的数据源的连接。 5. 归还链接:如果连接对象connection是从连接池中获取的,那么调用Connection.close()方法,则不会关闭连接了,而是归还连接给连接池。
- C3P0データベース接続プールテクノロジー
使用手順:
- c3p0の依存関係をインポートする
<dependencies> <dependency> <groupId>com.mchange</groupId> <artifactId>mchange-commons-java</artifactId><!-- c3p0所依赖的jar包 --> <version>0.2.12</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <!-- 必要依赖 --> <version>0.9.5.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <!-- 必要依赖 --> <version>5.1.6</version> <scope>runtime</scope> <!-- 只在运行时生效 --> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
- c3p0-config.xml構成ファイルを作成します
注:mavenプロジェクトディレクトリの要件に準拠するには、c3p0-config.xmlをresourcesディレクトリに配置する必要があります
<c3p0-config> <!-- 使用默认的配置读取连接池对象 --> <default-config> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/xskc</property> <property name="user">root</property> <property name="password">root</property> <!-- 连接池参数 --> <property name="initialPoolSize">5</property><!-- 初始池中连接数量 --> <property name="maxPoolSize">10</property><!-- 最大连接数量,超过此数量会报错 --> <property name="checkoutTimeout">3000</property><!-- 超时时间 --> </default-config> <named-config name="anotherc3p0"><!-- 指定名称的配置,可以在DataSource中指定名称调用此配置,而不再使用默认配置 --> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/xskc</property> <property name="user">root</property> <property name="password">root</property> <!-- 连接池参数 --> <property name="initialPoolSize">5</property> <property name="maxPoolSize">8</property> <property name="checkoutTimeout">1000</property> </named-config> </c3p0-config>
- C3P0接続プールを使用する
package zhi.itlearn; import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class C3P0Utils { public static void main(String[] args) throws SQLException { //创建数据库连接池对象 DataSource ds = new ComboPooledDataSource(); //使用anotherc3p0连接池配置 //DataSource ds2 = new ComboPooledDataSource("anotherc3p0"); //获取连接对象 Connection connection = ds.getConnection(); //打印connection,测试是否有拿到连接对象 System.out.println(connection); } }
- Duridデータベース接続プールテクノロジー
Durid:Alibabaが提供するデータベース接続プール実装テクノロジー
- 使用手順
- jarパッケージの依存関係をインポートします
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.4</version> </dependency>
- 構成ファイルを定義します(プロパティ構成ファイルを使用)
注:プロパティ構成ファイルには任意の名前を付けることができますが、resourcesフォルダーに配置する必要があります。
ここでの名前:druid-config.properties
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/xskc username=root password=root initialSize=5 maxActive=10 maxWait=3000
- データベース接続プールオブジェクトを取得し、接続接続を取得します:DruidDataSourceFactoryクラスを介して
package zhi.itlearn; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.util.Properties; public class DuridDemo { public static void main(String[] args) throws Exception { //加载配置文件 Properties pro = new Properties(); //通过类加载器获取资源文件,并返回字节流 InputStream asStream = DuridDemo.class.getClassLoader().getResourceAsStream("duril-config.properties"); //加载字节流 pro.load(asStream); //获取连接池对象:通过DruidDataSourceFactory类 DataSource source = DruidDataSourceFactory.createDataSource(pro); //获取连接 Connection connection = source.getConnection(); System.out.println(connection); } }
- Duridツールクラスを定義します:JDBCUtils.class
package zhi.itlearn; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class JDBCUtils { private static DataSource ds; static { try { //加载配置文件 Properties pro = new Properties(); pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("duril-config.properties")); //获得DataSource连接池对象 ds = DruidDataSourceFactory.createDataSource(pro); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public static DataSource getDateSource(){ return ds; } public static Connection getConnection() throws SQLException { return ds.getConnection(); } public static void close(Statement stat,Connection conn){ close(null,stat,conn); } public static void close(ResultSet rs, Statement stat, Connection conn){ if (rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stat!=null){ try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn!=null){ try { conn.close(); //归还连接 } catch (SQLException e) { e.printStackTrace(); } } } }
- JDBCUtilsツールクラスをテストします
package zhi.itlearn; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JDBCUtilsTest { public static void main(String[] args) throws SQLException { Connection connection = JDBCUtils.getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM student WHERE sage = 19"); ResultSet set = statement.executeQuery(); while(set.next()){ System.out.println(set.getString("sname")); } JDBCUtils.close(set,statement,connection); } }