如何使用 Hibernate 和 Spring Boot 配置和监控 HikariCP

Posted

技术标签:

【中文标题】如何使用 Hibernate 和 Spring Boot 配置和监控 HikariCP【英文标题】:How to configure and monitor HikariCP with Hibernate and Spring Boot 【发布时间】:2016-05-21 15:17:54 【问题描述】:

我有一个简单的带有Hibernate的Spring Boot项目,我想知道我的HikariCP配置类和application.properties是否正确,如何检查和监控连接池?

我的配置类:

@Configuration
class HikariCPConfig 

   @Value("$spring.datasource.username")
   private String user;

   @Value("$spring.datasource.password")
   private String password;

   @Value("$spring.datasource.url")
   private String dataSourceUrl;

   @Value("$spring.datasource.dataSourceClassName")
   private String dataSourceClassName;

   @Value("$spring.datasource.poolName")
   private String poolName;

   @Value("$spring.datasource.connectionTimeout")
   private int connectionTimeout;

   @Value("$spring.datasource.maxLifetime")
   private int maxLifetime;

   @Value("$spring.datasource.maximumPoolSize")
   private int maximumPoolSize;

   @Value("$spring.datasource.minimumIdle")
   private int minimumIdle;

   @Value("$spring.datasource.idleTimeout")
   private int idleTimeout;

   @Bean
   public HikariDataSource primaryDataSource() 
       Properties dsProps = new Properties();
       dsProps.put("url", dataSourceUrl);
       dsProps.put("user", user);
       dsProps.put("password", password);
       dsProps.put("prepStmtCacheSize",250);
       dsProps.put("prepStmtCacheSqlLimit",2048);
       dsProps.put("cachePrepStmts",Boolean.TRUE);
       dsProps.put("useServerPrepStmts",Boolean.TRUE);

       Properties configProps = new Properties();
          configProps.put("dataSourceClassName", dataSourceClassName);
          configProps.put("poolName",poolName);
          configProps.put("maximumPoolSize",maximumPoolSize);
          configProps.put("minimumIdle",minimumIdle);
          configProps.put("minimumIdle",minimumIdle);
          configProps.put("connectionTimeout", connectionTimeout);
          configProps.put("idleTimeout", idleTimeout);
          configProps.put("dataSourceProperties", dsProps);

      HikariConfig hc = new HikariConfig(configProps);
      HikariDataSource ds = new HikariDataSource(hc);
      return ds;
   

application.properties 文件:

server.port= 8888
spring.jpa.databasePlatform=org.hibernate.dialect.mysql5Dialect
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update

spring.datasource.dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/db_test
spring.datasource.username=root
spring.datasource.password=
spring.datasource.poolName=SpringBootHikariCP
spring.datasource.maximumPoolSize=5
spring.datasource.minimumIdle=3
spring.datasource.maxLifetime=2000000
spring.datasource.connectionTimeout=30000
spring.datasource.idleTimeout=30000
spring.datasource.pool-prepared-statements=true
spring.datasource.max-open-prepared-statements=250

仅使用这个配置类和属性文件,是否确定 HikariCP 工作正常?因为即使我注释了整个配置类也能连接到数据库,所以我不确定。

【问题讨论】:

【参考方案1】:

Hikari 是 auto-configured,这就是当您删除自定义配置类时它起作用的原因。只需删除HikariCPConfig

我想您使用spring.datasource 命名空间并非偶然。为什么不尝试配置现有功能而不是自己创建配置类?

您可以通过检查 auto-configuration report 来检查 Hikari 是否已正确配置

【讨论】:

感谢您的帮助。

以上是关于如何使用 Hibernate 和 Spring Boot 配置和监控 HikariCP的主要内容,如果未能解决你的问题,请参考以下文章

在hibernate内如何配置一对一的关系

如何使用 Spring-Security 3 和 Hibernate 4 将 spring security xml 配置 hibernate 转换为 java config

使用 spring 和 hibernate 时,如何处理会话/事务?

在Spring中使用Hibernate 4

如何使用 Hibernate 和 Spring Boot 配置和监控 HikariCP

如何在 Spring 和 Hibernate 中使用两个数据库/数据源