HikariCP连接池Java示例
时间:2020-01-09 10:35:21 来源:igfitidea点击:
在本文中,我们将介绍如何在JDBC应用程序中使用HikariCP配置连接池。
Mika对HikariCP的依赖
如果使用的是Maven,则可以在pom.xml中添加以下依赖项,该依赖项适用于Java 8至Java 11.
<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency>
我们也可以从此处下载jarshttps://search.maven.org/search?q = com.zaxxer.hikaricp
HikariCP连接池Java示例
在示例数据库中使用的是MySQL,它连接到theitroad架构,表是EMPLOYEE,其列为id,FIRST_NAME,LAST_NAME和DEPARTMENT。
创建HIkariCP数据源的最佳方法是实例化HikariConfig类的实例,并提供用于连接数据库和连接池的属性。然后传递该配置实例以创建HikariDataSource对象。
我们需要设置的与数据库相关的配置是驱动程序类,URL,用户名和密码。
我们可以设置的一些与连接池相关的属性如下:
- autoCommit –此属性控制从池返回的连接的默认自动提交行为。默认为true。
- connectionTimeout –此属性控制客户端等待来自池的连接的最大毫秒数。默认值为30秒。
- idleTimeout-此属性控制允许连接在池中保持空闲状态的最长时间。默认值为10分钟。
- maxLifetime –此属性控制池中连接的最大生存期。默认值为30分钟。
- maximumPoolSize-此属性控制允许池达到的最大大小,包括空闲和正在使用的连接。默认值是10.
对于示例数据库凭证和与连接池有关的配置属性,保留在属性文件(db.properties)中。
DB.DRIVER_CLASS=com.mysql.cj.jdbc.Driver DB.DB_URL=jdbc:mysql://localhost:3306/theitroad DB.DB_USER=root DB.DB_PASSWORD=admin DB.MAX_POOL_SIZE=5
通过设置从属性文件读取的数据库属性和连接池属性,以下类用于创建HikariDataSource。
import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.sql.DataSource; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; public class DSCreator { private static HikariDataSource ds; static { try { Properties properties = new Properties(); // Loading properties file from classpath InputStream inputStream = DSCreator.class .getClassLoader() .getResourceAsStream("db.properties"); if(inputStream == null){ throw new IOException("File not found"); } properties.load(inputStream); HikariConfig config = new HikariConfig(); // This property is optional now config.setDriverClassName(properties.getProperty("DB.DRIVER_CLASS")); config.setJdbcUrl(properties.getProperty("DB.DB_URL")); config.setUsername(properties.getProperty("DB.DB_USER")); config.setPassword(properties.getProperty("DB.DB_PASSWORD")); config.setMaximumPoolSize(Integer.parseInt(properties.getProperty("DB.MAX_POOL_SIZE"))); config.addDataSourceProperty("cachePrepStmts", "true"); config.addDataSourceProperty("prepStmtCacheSize", "250"); config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); // Create DataSource ds = new HikariDataSource(config); }catch(IOException e) { e.printStackTrace(); } } public static DataSource getDataSource() { return ds; } }
测试类,该类使用返回的DataSource对象创建连接并查询数据库。
public class DSDemo { public static void main(String[] args) { DSDemo dsDemo = new DSDemo(); dsDemo.displayEmployeeById(16); } private void displayEmployeeById(int id){ Connection connection = null; String selectSQL = "SELECT * FROM EMPLOYEE WHERE id = ?"; PreparedStatement prepStmt = null; try { DataSource ds = DSCreator.getDataSource(); connection = ds.getConnection(); prepStmt = connection.prepareStatement(selectSQL); prepStmt.setInt(1, id); ResultSet rs = prepStmt.executeQuery(); while(rs.next()){ System.out.println("id: " + rs.getInt("id")); System.out.println("First Name: " + rs.getString("FIRST_NAME")); System.out.println("Last Name: " + rs.getString("LAST_NAME")); System.out.println("Department: " + rs.getString("DEPARTMENT")); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(connection != null){ try { connection.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }