如何在我的application.properties文件中的Spring Boot应用程序中配置HikariCP?

时间:2014-10-21 15:54:05

标签: java spring spring-boot hikaricp

我试图在我的Spring Boot(1.2.0.M1)应用程序中设置HikariCP,因此我可以使用它来代替Tomcat DBCP进行测试。我想在我的application.properties文件中配置连接池,就像我在使用Tomcat一样,但我无法弄清楚我应该怎么做。我发现的所有示例都显示了JavaConfig样式,或者使用单独的HikariCP属性文件。有人可以帮我弄清楚在application.properties中配置它的属性名吗?我也希望从使用driverClassName方法切换到DataSourceClassName方法,因为它看起来更干净并且是推荐的。这在我的application.properties文件中也可以吗?

这是我对Tomcat DBCP的看法(只是一些基本的配置,没有完全刷新)

spring.datasource.validation-query=SELECT 1
spring.datasource.max-active=10
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=5
spring.datasource.test-on-borrow=true
spring.datasource.test-on-return=true

我目前正在使用driverClassName和jdbc url来设置连接:

spring.datasource.url=jdbc:mysql://localhost:3306/myDb
spring.datasource.driverClassName=com.mysql.jdbc.Driver

15 个答案:

答案 0 :(得分:108)

@Configuration
@ConfigurationProperties(prefix = "params.datasource")
public class JpaConfig extends HikariConfig {

    @Bean
    public DataSource dataSource() throws SQLException {
        return new HikariDataSource(this);
    }

}

<强> application.yml

params:
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    jdbcUrl: jdbc:mysql://localhost:3306/myDb
    username: login
    password: password
    maximumPoolSize: 5

<强>已更新!从Spring Boot 1.3.0版本开始:

  1. 只需将HikariCP添加到依赖项
  2. 配置application.yml
  3. <强> application.yml

    spring:
      datasource:
        type: com.zaxxer.hikari.HikariDataSource
        url: jdbc:h2:mem:TEST
        driver-class-name: org.h2.Driver
        username: username
        password: password
        hikari:
          idle-timeout: 10000
    

    <强>已更新!从Spring Boot 2.0.0版本开始:

    默认连接池已从Tomcat更改为Hikari:)

答案 1 :(得分:21)

您只能使用application.yml / application.properties。无需显式创建任何DataSource Bean

您需要排除ydemartino

所提及的tomcat-jdbc
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
        </exclusion>
    </exclusions>
</dependency>

由于您不会创建DataSource bean,因此必须在application.yml / application.properties

中使用值为spring.datasource.type的{​​{1}}显式指定Hikari
com.zaxxer.hikari.HikariDataSource

在application.yml / application.properties中,您可以在spring: datasource: hikari: connection-test-query: SELECT 1 FROM DUAL minimum-idle: 1 maximum-pool-size: 5 pool-name: yourPoolName auto-commit: false driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/myDb username: login password: password type: com.zaxxer.hikari.HikariDataSource

中配置Hikari特定参数,例如池大小等

答案 2 :(得分:20)

我偶然发现HikariCP并且我对基准测试感到惊讶,我想尝试而不是默认选择C3P0而且我很惊讶我努力让configurations正确因为配置根据您使用的技术堆栈的组合而不同。

我已设置Spring Boot项目JPA, Web, Security启动器(使用Spring Initializer)将PostgreSQL用作HikariCP作为连接池的数据库。
我使用Gradle作为构建工具,我想分享对我有用的内容,以便进行以下假设:

  1. Spring Boot Starter JPA(Web&amp; Security - 可选)
  2. Gradle build too
  3. PostgreSQL使用数据库(即架构,用户,数据库)运行和设置
  4. 如果您使用的是build.gradle或等效的Gradle,则需要以下pom.xml

    buildscript {
        ext {
            springBootVersion = '1.5.8.RELEASE'
        }
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        }
    }
    
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'war'
    
    group = 'com'
    version = '1.0'
    sourceCompatibility = 1.8
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        compile('org.springframework.boot:spring-boot-starter-aop')
    
        // Exclude the tomcat-jdbc since it's used as default for connection pooling
        // This can also be achieved by setting the spring.datasource.type to HikariCP 
        // datasource see application.properties below
        compile('org.springframework.boot:spring-boot-starter-data-jpa') {
            exclude group: 'org.apache.tomcat', module: 'tomcat-jdbc'
        }
        compile('org.springframework.boot:spring-boot-starter-security')
        compile('org.springframework.boot:spring-boot-starter-web')
        runtime('org.postgresql:postgresql')
        testCompile('org.springframework.boot:spring-boot-starter-test')
        testCompile('org.springframework.security:spring-security-test')
    
        // Download HikariCP but, exclude hibernate-core to avoid version conflicts
        compile('com.zaxxer:HikariCP:2.5.1') {
            exclude group: 'org.hibernate', module: 'hibernate-core'
        }
    
        // Need this in order to get the HikariCPConnectionProvider
        compile('org.hibernate:hibernate-hikaricp:5.2.11.Final') {
            exclude group: 'com.zaxxer', module: 'HikariCP'
            exclude group: 'org.hibernate', module: 'hibernate-core'
        }
    }
    

    以上build.gradle中有一堆排除,那是因为

    1. 首先排除,指示在下载jdbc-tomcat依赖项时排除spring-boot-starter-data-jpa连接池的gradle。这可以通过设置spring.datasource.type=com.zaxxer.hikari.HikariDataSource来实现,但如果我不需要它,我不想要额外的依赖
    2. 第二次排除,指示gradle在下载hibernate-core依赖项时排除com.zaxxer,因为hibernate-core已经Spring Boot已下载,我们不希望最终不同的版本。
    3. 第三次排除,指示gradle在下载hibernate-core模块时排除hibernate-hikaricp,以使HikariCP使用org.hibernate.hikaricp.internal.HikariCPConnectionProvider作为连接提供程序而非弃用com.zaxxer.hikari.hibernate.HikariConnectionProvider
    4. 一旦我弄明白build.gradle以及要保留什么以及不保留什么,我就准备好将datasource配置复制/粘贴到我的application.properties中,并期望一切都能与飞行一起使用颜色,但不是真的,我偶然发现了以下问题

      • Spring启动无法找到数据库详细信息(即url,驱动程序),因此无法设置jpa和hibernate(因为我没有将属性键值命名为右)
      • HikariCP回归com.zaxxer.hikari.hibernate.HikariConnectionProvider
      • 指示Spring在自动配置hibernate / jpa时使用新的连接提供程序,然后HikariCP失败,因为它在key/value中寻找一些application.properties并抱怨dataSource, dataSourceClassName, jdbcUrl 。我必须调试HikariConfig, HikariConfigurationUtil, HikariCPConnectionProvider并发现HikariCP找不到application.properties的属性,因为它的名称不同。

      无论如何,这是我不得不依赖试验和错误的地方,并确保HikariCP能够选择属性(即数据源的db详细信息,以及池属性)以及Sping Boot行为与预期一致,我最终得到了以下application.properties文件。

      server.contextPath=/
      debug=true
      
      # Spring data source needed for Spring boot to behave
      # Pre Spring Boot v2.0.0.M6 without below Spring Boot defaults to tomcat-jdbc connection pool included 
      # in spring-boot-starter-jdbc and as compiled dependency under spring-boot-starter-data-jpa
      spring.datasource.type=com.zaxxer.hikari.HikariDataSource
      spring.datasource.url=jdbc:postgresql://localhost:5432/somedb
      spring.datasource.username=dbuser
      spring.datasource.password=dbpassword
      
      # Hikari will use the above plus the following to setup connection pooling
      spring.datasource.hikari.minimumIdle=5
      spring.datasource.hikari.maximumPoolSize=20
      spring.datasource.hikari.idleTimeout=30000
      spring.datasource.hikari.poolName=SpringBootJPAHikariCP
      spring.datasource.hikari.maxLifetime=2000000
      spring.datasource.hikari.connectionTimeout=30000
      
      # Without below HikariCP uses deprecated com.zaxxer.hikari.hibernate.HikariConnectionProvider
      # Surprisingly enough below ConnectionProvider is in hibernate-hikaricp dependency and not hibernate-core
      # So you need to pull that dependency but, make sure to exclude it's transitive dependencies or you will end up 
      # with different versions of hibernate-core 
      spring.jpa.hibernate.connection.provider_class=org.hibernate.hikaricp.internal.HikariCPConnectionProvider
      
      # JPA specific configs
      spring.jpa.properties.hibernate.show_sql=true
      spring.jpa.properties.hibernate.format_sql=true
      spring.jpa.properties.hibernate.use_sql=true
      spring.jpa.properties.hibernate.id.new_generator_mappings=false
      spring.jpa.properties.hibernate.default_schema=dbschema
      spring.jpa.properties.hibernate.search.autoregister_listeners=false
      spring.jpa.properties.hibernate.bytecode.use_reflection_optimizer=false
      
      # Enable logging to verify that HikariCP is used, the second entry is specific to HikariCP
      logging.level.org.hibernate.SQL=DEBUG
      logging.level.com.zaxxer.hikari.HikariConfig=DEBUG
      logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE 
      

      如上所示,配置根据以下命名模式分为几类

      • spring.datasource.x (Spring自动配置会选择这些,HikariCP也会这样)
      • spring.datasource.hikari.x (HikariCP选择这些来设置池,记下camelCase字段名称)
      • spring.jpa.hibernate.connection.provider_class (指示Spring使用新的HibernateConnectionProvider)
      • spring.jpa.properties.hibernate.x (由Spring用于自动配置JPA,记下带下划线的字段名称)

      很难找到教程或帖子或某些资源,它们显示了如何使用上述属性文件以及如何命名属性。好吧,你有它。

      将带有application.properties(或至少类似)build.gradle的{​​{1}}投入Spring Boot JPA项目版本(1.5.8)应该像魅力一样工作并连接到预先配置的数据库(即在我的情况下,它是PostgreSQL,HikariCP & Springspring.datasource.url中找出要使用的数据库驱动程序。

      我没有看到创建DataSource bean的必要性,因为Spring Boot能够通过调查application.properties来完成所有事情,而且很简单。

      HikariCP的github article中的wiki显示了如何使用JPA设置Spring Boot,但缺乏解释和细节。

      以上两个文件也可作为公开要点https://gist.github.com/rhamedy/b3cb936061cc03acdfe21358b86a5bc6

答案 3 :(得分:7)

这适用于我的启动应用程序,以防它有用。该类告诉您配置对象要查找的属性:

https://github.com/brettwooldridge/HikariCP/blob/2.3.x/hikaricp-common/src/main/java/com/zaxxer/hikari/AbstractHikariConfig.java

我认为通过将datasource_whatever添加到源配置文件中的属性键可以支持多个数据源。干杯!

@Configuration
class DataSourceConfig {

   @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.connectionTimeout}')
   private int connectionTimeout;

   @Value('${spring.datasource.maxLifetime}')
   private int maxLifetime;

   @Bean
   public DataSource primaryDataSource() {
      Properties dsProps = [url: dataSourceUrl, user: user, password: password]
      Properties configProps = [
            connectionTestQuery: 'select 1 from dual',
            connectionTimeout: connectionTimeout,
            dataSourceClassName: dataSourceClassName,
            dataSourceProperties: dsProps,
            maxLifetime: maxLifetime
      ]

      // A default max pool size of 10 seems reasonable for now, so no need to configure for now.
      HikariConfig hc = new HikariConfig(configProps)
      HikariDataSource ds = new HikariDataSource(hc)
      ds
   }
}

答案 4 :(得分:7)

您不需要使用冗余代码将属性值放入变量。您可以直接使用属性文件设置属性。

hikari.properties文件放在类路径中。

driverClassName=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/myDb
connectionTestQuery=SELECT 1
maximumPoolSize=20
username=...
password=...

制作这样的数据源bean。

@Bean(destroyMethod = "close")
public DataSource dataSource() throws SQLException {
    HikariConfig config = new HikariConfig("/hikari.properties");
    HikariDataSource dataSource = new HikariDataSource(config);

    return dataSource;
}

答案 5 :(得分:6)

你不能在@Andy Wilkinson所说的application.properties配置中使用dataSourceClassName方法。如果你想拥有dataSourceClassName,你可以使用Java Config:

@Configuration
@ComponentScan
class DataSourceConfig {

 @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 DataSource 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;
   }
  } 

你无法使用dataSourceClassName,因为它会抛出异常

Caused by: java.lang.IllegalStateException: both driverClassName and dataSourceClassName are specified, one or the other should be used.

表示spring boot从spring.datasource.url属性推断Driver,同时设置dataSourceClassName会创建此异常。为了使其正确,您的application.properties对于HikariCP数据源看起来应该是这样的:

# hikariCP 
  spring.jpa.databasePlatform=org.hibernate.dialect.MySQLDialect
  spring.datasource.url=jdbc:mysql://localhost:3306/exampledb
  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

注意:请检查类路径中是否有任何tomcat-jdbc.jar或commons-dbcp.jar是否通过传递依赖添加了大部分时间。如果这些存在于类路径中,则Spring Boot将使用默认连接池(即tomcat)配置数据源。如果类路径中没有其他提供程序,HikariCP将仅用于创建数据源。有来自tomcat的后备序列 - &gt;到HikariCP - &gt;到Commons DBCP。

答案 6 :(得分:5)

您可以使用dataSourceClassName方法,这是MySQL的一个示例。 (用弹簧靴1.3和1.4测试)

首先,您需要从类路径中排除tomcat-jdbc,因为它将被选中以支持hikaricp。

的pom.xml

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jdbc</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

application.properties

spring.datasource.dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
spring.datasource.dataSourceProperties.serverName=localhost
spring.datasource.dataSourceProperties.portNumber=3311
spring.datasource.dataSourceProperties.databaseName=mydb
spring.datasource.username=root
spring.datasource.password=root

然后添加

@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
    return DataSourceBuilder.create().build();
}

我在这里创建了一个测试项目:https://github.com/ydemartino/spring-boot-hikaricp

答案 7 :(得分:5)

根据文档进行了更改,

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html

示例:

spring:
    datasource:
        url: 'jdbc:mysql://localhost/db?useSSL=false'
        username: root
        password: pass
        driver: com.mysql.jdbc.Driver
        hikari:
            minIdle: 10
            idle-timeout: 10000
            maximumPoolSize: 30

以下是我们在hikari上可以进行的以下配置更改,请根据您的需要进行添加/更新。

autoCommit
connectionTimeout
idleTimeout
maxLifetime
connectionTestQuery
connectionInitSql
validationTimeout
maximumPoolSize
poolName
allowPoolSuspension
readOnly
transactionIsolation
leakDetectionThreshold

答案 8 :(得分:4)

事实证明,除了数据库连接数量之外,几乎所有HikariCP的默认设置都适用于我。我在application.properties中设置了该属性:

spring.datasource.maximumPoolSize=20

就我所知,Andy Wilkinson是正确的,你不能使用Spring引导HikariCP的dataSourceClassName配置方法。

答案 9 :(得分:4)

这是个好消息。 HikariCP是Spring Boot 2.0.0的默认连接池。

Spring Boot 2.0.0 Release Notes

  

Spring Boot 2.0中的默认数据库池技术已从Tomcat Pool切换到HikariCP。我们发现Hakari提供了卓越的性能,我们的许多用户比Tomcat Pool更喜欢它。

答案 10 :(得分:2)

下面的代码可用于静态数据源初始化。

public class MyDataSource {
    private static final String DB_USERNAME="spring.datasource.username";
    private static final String DB_PASSWORD="spring.datasource.password";
    private static final String DB_URL ="spring.datasource.url";
    private static final String DB_DRIVER_CLASS="spring.datasource.driver-class-name";

    private static Properties properties = null;
    private static HikariDataSource dataSource;

    static {
        try {
            properties = new Properties();
            properties.load(new FileInputStream("src/main/resources/application.properties"));

            dataSource = new HikariDataSource();
            dataSource.setDriverClassName(properties.getProperty(DB_DRIVER_CLASS));

            dataSource.setJdbcUrl(properties.getProperty(DB_URL));
            dataSource.setUsername(properties.getProperty(DB_USERNAME));
            dataSource.setPassword(properties.getProperty(DB_PASSWORD));

            dataSource.setMinimumIdle(100);
            dataSource.setMaximumPoolSize(2000);
            dataSource.setAutoCommit(false);
            dataSource.setLoginTimeout(3);

        } catch (IOException | SQLException e) {
            ((Throwable) e).printStackTrace();
        }
    }

    public static DataSource getDataSource(){
        return dataSource;
    }

    public static Connection getConnection() throws SQLException{
        return getDataSource().getConnection();
    }
}

答案 11 :(得分:2)

现在使用HikcariCp作为默认连接池,使用新版本的spring boot,可以直接如下图。

@Configuration
public class PurchaseOrderDbConfig {
    
    @Bean
    @ConfigurationProperties(prefix = "com.sysco.purchaseorder.datasoure")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

}

应用程序.yml

com:
  sysco:
    purchaseorder:
      datasoure:
        driverClassName: com.mysql.jdbc.Driver
        jdbcUrl: jdbc:mysql://localhost:3306/purchaseorder
        username: root
        password: root123
        idleTimeout: 600000

如果要打印空闲超时值

ApplicationContext context=SpringApplication.run(ApiBluePrint.class, args);
   HikariDataSource dataSource=(HikariDataSource) context.getBean(DataSource.class);
   System.out.println(dataSource.getIdleTimeout());

如果您不定义任何自定义值,您将获得 600000 的值,其中默认值为 300000

答案 12 :(得分:1)

随着后来的spring-boot版本,切换到Hikari可以完全在配置中完成。我使用1.5.6.RELEASE并且这种方法有效。

<强>的build.gradle:

compile "com.zaxxer:HikariCP:2.7.3"

申请YAML

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      idleTimeout: 60000
      minimumIdle: 2
      maximumPoolSize: 20
      connectionTimeout: 30000
      poolName: MyPoolName
      connectionTestQuery: SELECT 1

更改connectionTestQuery以适合您的基础数据库。这就是它,不需要代码。

答案 13 :(得分:1)

我的设置:
Spring Boot v1.5.10
Hikari v.3.2.x(评估)

要真正了解Hikari数据源的配置,我建议禁用Spring Boot的数据源自动配置。

将以下内容添加到application.properties: -

  

spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

这将禁用Spring Boot自行配置DataSource的功能。

现在您可以定义自己的自定义配置来创建HikariDataSource bean并使用所需的属性填充它。

  

注意:::
公共类HikariDataSource扩展了HikariConfig

你需要

  1. 使用所需的Hikari Properties
  2. 填充HikariConfig对象
  3. 初始化HikariDataSource对象,将HikariConfig对象作为参数传递给构造函数。
  4.   

    我相信定义自己的自定义配置类(   @Configuration)自己创建数据源并填充   它与在单独的文件中定义的数据源属性(比   传统的:application.properties)

      通过这种方式,我可以定义   我自己的sessionFactory Bean使用Hibernate建议:   &#34; LocalSessionFactoryBean的&#34;使用您的Hikari数据源进行分类和填充&gt;和其他基于Hiberante-JPA的房产。

    基于Spring Boot的Hikari DataSource属性摘要: -

      

    spring.datasource.hikari.allow池悬浮=真
      spring.datasource.hikari.auto提交=假
      spring.datasource.hikari.catalog =
      spring.datasource.hikari.connection-INIT-SQL =
      spring.datasource.hikari.connection测试查询=
      spring.datasource.hikari.connection超时= 100个
      spring.datasource.hikari.data源类名=
      spring.datasource.hikari.data源-J-正d-1 =
      spring.datasource.hikari.driver类名=
      spring.datasource.hikari.idle超时= 50
      spring.datasource.hikari.initialization-快速失败=真
      spring.datasource.hikari.isolate内部查询=真
      spring.datasource.hikari.jdbc-URL =
      spring.datasource.hikari.leak检测阈值=
      spring.datasource.hikari.login超时= 60个
      spring.datasource.hikari.max-寿命=
      spring.datasource.hikari.maximum池大小= 500个
      spring.datasource.hikari.minimum空闲= 30
      spring.datasource.hikari.password =
      spring.datasource.hikari.pool名=
      spring.datasource.hikari.read只=真
      spring.datasource.hikari.register-的mbeans =真
      spring.datasource.hikari.transaction隔离=
      spring.datasource.hikari.username =
      spring.datasource.hikari.validation超时=

答案 14 :(得分:0)

这将帮助想要通过spring自动配置为其应用程序配置hikaricp的任何人。对于我的项目,我使用spring boot 2,将hikaricp作为JDBC连接池,将mysql作为数据库。我在其他答案中没有看到的一件事是data-source-properties,可用于设置spring.datasource.hikari.*路径上不可用的各种属性。这等效于使用HikariConfig类。要为mysql特定的属性配置数据源和hikaricp连接池,我在application.yml文件中使用了spring自动配置注释和以下属性。

@EnableAutoConfiguration放在您的一个配置Bean文件中。

application.yml 文件如下所示。

spring:
  datasource:
    url: 'jdbc:mysql://127.0.0.1:3306/DATABASE?autoReconnect=true&useSSL=false'
    username: user_name
    password: password
    hikari:
      maximum-pool-size: 20
      data-source-properties:
        cachePrepStmts: true
        prepStmtCacheSize: 250
        prepStmtCacheSqlLimit: 2048
        useServerPrepStmts: true
        useLocalSessionState: true
        rewriteBatchedStatements: true
        cacheResultSetMetadata: true
        cacheServerConfiguration: true
        elideSetAutoCommits: true
        maintainTimeStats: false