HikariCP使用实例

Posted 田野与天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HikariCP使用实例相关的知识,希望对你有一定的参考价值。

当然,以下是一个详细的HikariCP示例代码,演示了如何配置和使用HikariCP连接池:

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class HikariCPDemo 
    public static void main(String[] args) 
        // 创建HikariCP配置对象
        HikariConfig config = new HikariConfig();

        // 配置数据源属性
        config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
        config.setUsername("username");
        config.setPassword("password");

        // 配置连接池属性
        config.setMinimumIdle(5);
        config.setMaximumPoolSize(10);
        config.setConnectionTimeout(3000);

        // 创建Hikari数据源
        HikariDataSource dataSource = new HikariDataSource(config);

        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;

        try 
            // 从连接池获取连接
            connection = dataSource.getConnection();

            // 执行查询
            String sql = "SELECT * FROM students";
            statement = connection.prepareStatement(sql);
            resultSet = statement.executeQuery();

            // 处理查询结果
            while (resultSet.next()) 
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
            
         catch (SQLException ex) 
            ex.printStackTrace();
         finally 
            // 释放资源
            if (resultSet != null) 
                try 
                    resultSet.close();
                 catch (SQLException ex) 
                    ex.printStackTrace();
                
            
            if (statement != null) 
                try 
                    statement.close();
                 catch (SQLException ex) 
                    ex.printStackTrace();
                
            
            if (connection != null) 
                try 
                    connection.close();
                 catch (SQLException ex) 
                    ex.printStackTrace();
                
            

            // 关闭数据源
            dataSource.close();
        
    

在上述代码中,我们首先创建了一个HikariConfig对象,并配置了数据库连接信息和连接池属性。然后,我们使用HikariDataSource类创建一个HikariCP数据源对象,将配置对象传入构造函数。接下来,我们通过调用getConnection()方法从连接池中获取一个连接对象。然后,我们执行一个查询操作,将结果打印出来。最后,我们释放资源,包括关闭结果集、预处理语句和连接对象,以及关闭数据源。

需要注意的是,在实际使用中,我们通常会将数据源的配置信息放在外部配置文件中,例如hikari.properties,并使用Properties对象加载配置。然后,可以通过调用config.load(properties)方法将属性配置应用到HikariConfig对象中。

此外,为了正确使用HikariCP连接池,您还需要将HikariCP的依赖项添加到项目的构建文件(例如pom.xml)中。例如,在Maven项目中,您可以添加以下依赖项:

<dependency>
    <groupId>

com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>4.0.3</version>
</dependency>

请确保根据您实际的数据库配置进行适当的修改,并在运行代码之前正确配置数据库连接信息。

使用 HikariCP 到多个数据库的连接池

【中文标题】使用 HikariCP 到多个数据库的连接池【英文标题】:Connection pool with HikariCP to multiple databases 【发布时间】:2015-01-12 01:08:57 【问题描述】:

我正在开发一个查询多个数据库的监控插件。我想使用 HikariCP 来保持连接打开,但我不知道如何实例化连接池。

HikariCP 是否只为多个数据库使用一个池?或者一个数据库只有一个池,我有责任实例化与我将使用的数据库一样多的池。

【问题讨论】:

【参考方案1】:

后者:池与单个数据库配置参数相关联,您有责任实例化与我将使用的数据库一样多的池。相应地创建池。

我有一个DataSourceFactory 来完成这个:

public final class DataSourceFactory 

    private static final Logger LOG = LoggerFactory.getLogger(DataSourceFactory.class);

    //connection to MySQL
    private static DataSource mySQLDataSource;
    //connection to PostgreSQL
    private static DataSource postgresDataSource;

    private DataSourceFactory()  

    //generic method to create the DataSource based on configuration
    private static DataSource getDataSource(String configurationProperties) 
        Properties conf = new Properties();
        try 
            conf.load(DataSourceFactory.class.getClassLoader().getResourceAsStream(configurationProperties));
         catch (IOException e) 
            LOG.error("Can't locate database configuration", e);
        
        HikariConfig config = new HikariConfig(conf);
        HikariDataSource dataSource = new HikariDataSource(config);
        return dataSource;
    

    //retrieve the datasource for MySQL
    public static DataSource getMySQLDataSource() 
        LOG.debug("Retrieving data source for MySQL");
        if (mySQLDataSource == null) 
            synchronized(DataSourceFactory.class) 
                if (mySQLDataSource == null) 
                    LOG.debug("Creating data source for MySQL");
                    mySQLDataSource = getDataSource("mysql-connection.properties");
                
            
        
        return mySQLDataSource;
    

    //retrieve the datasource for Postgres
    public static DataSource getPostgresDataSource() 
        LOG.debug("Retrieving data source for Postgres");
        if (postgresDataSource == null) 
            synchronized(DataSourceFactory.class) 
                if (postgresDataSource == null) 
                    LOG.debug("Creating data source for Postgres");
                    postgresDataSource = getDataSource("postgres-connection.properties");
                
            
        
        return postgresDataSource;
    

这是一个文件配置示例:

dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
dataSource.url=jdbc:mysql://theHostName:thePort/nameOfDatabase
dataSource.user=user
dataSource.password=thIsIsN07mYR3alPa$s
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=100
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
autoCommit=false
maximumPoolSize=10

【讨论】:

你有例子吗? @AngocA 发布示例。 我对启动多个池的最大担忧是,一个池一次不能有少于 1 个处于活动状态的连接。所以,如果你启动 30 个连接池,即使在空闲阶段,它们也至少有 30 个连接

以上是关于HikariCP使用实例的主要内容,如果未能解决你的问题,请参考以下文章

HikariCP 个人实例

使用 HikariCP 到多个数据库的连接池

在SpringBoot中使用HikariCP连接池

使用 HikariCP 数据源

hikaricp 使用(配置问题)

用 HikariCP 深入理解 Spring boot