【问题标题】:How to specify database specific properties while using HikariCp in java如何在 java 中使用 HikariCp 时指定数据库特定属性
【发布时间】:2019-08-02 22:39:27
【问题描述】:

在通过 HikariCP 库启动数据库连接时,我需要添加如下所示的 oracle 数据库属性,但在网上没有找到任何示例。

    oracle.jdbc.timezoneAsRegion=true
    oracle.jdbc.timestampTzInGmt=true

【问题讨论】:

    标签: java spring oracle jdbc hikaricp


    【解决方案1】:

    这对我有用 Spring Boot 2.3.2.RELEASE:

    application.properties:

    spring.datasource.hikari.data-source-properties.oracle.jdbc.timezoneAsRegion=true
    spring.datasource.hikari.data-source-properties.oracle.jdbc.timestampTzInGmt=true
    

    检查:

    @Autowired
    private DataSource dataSource;
    :
    logger.info(dataSource.getConnection().unwrap(OracleConnection.class).getProperties().getProperty("oracle.jdbc.timezoneAsRegion"));
    logger.info(dataSource.getConnection().unwrap(OracleConnection.class).getProperties().getProperty("oracle.jdbc.timestampTzInGmt"));
    

    输出:

    是的
    真的

    【讨论】:

      【解决方案2】:

      这就像在您的DataSource 中添加新的addDataSourceProperty 一样简单

      public class DataSource {
      
          private static HikariConfig config = new HikariConfig();
          private static HikariDataSource ds;
      
          static {
              config.setJdbcUrl( "jdbc_url" );
              config.setUsername( "database_username" );
              config.setPassword( "database_password" );
              ....
              config.addDataSourceProperty( "oracle.jdbc.timezoneAsRegion" , "true" );
              config.addDataSourceProperty( "oracle.jdbc.timestampTzInGmt" , "true" );
      
              ds = new HikariDataSource( config );
          }
      
          private DataSource() {}
      
          public static Connection getConnection() throws SQLException {
              return ds.getConnection();
          }
      }
      

      要验证连接中的设置,您必须首先unwrap 获取Oracle 连接

      def hkConn = DataSource.getConnection() 
      
      def conn  = hkConn.unwrap(OracleConnection.class); 
      
      println conn.getProperties().getProperty("oracle.jdbc.timezoneAsRegion");
      println conn.getProperties().getProperty("oracle.jdbc.timestampTzInGmt");
      

      返回

      true
      true
      

      使用 HikariCP-2.7.2 和 Oracle 12.1 测试

      【讨论】:

        【解决方案3】:

        你在使用 Spring Boot 吗?

        如果您使用的是 Spring Boot,您可以尝试通过属性进行设置:

        spring.datasource.hikari.*= # Hikari specific settings

        https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

        使用 MySQL 的属性文件示例:

        spring.datasource.hikari.mysql.driver-class-name=com.mysql.jdbc.Driver
        spring.datasource.hikari.mysql.jdbc-url=jdbc:mysql://10.0.9.198:3306/develop_report?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&rewriteBatchedStatements=true
        spring.datasource.hikari.mysql.username=root
        spring.datasource.hikari.mysql.password=123456
        spring.datasource.hikari.mysql.minimum-idle=5
        spring.datasource.hikari.mysql.idle-timeout=180000
        spring.datasource.hikari.mysql.maximum-pool-size=20
        spring.datasource.hikari.mysql.auto-commit=true
        spring.datasource.hikari.mysql.pool-name=Mysql-spring.datasource.hikariCP
        spring.datasource.hikari.mysql.max-lifetime=1800000
        spring.datasource.hikari.mysql.connection-timeout=30000
        spring.datasource.hikari.mysql.connection-test-query=SELECT 1
        spring.datasource.hikari.mysql.validation-timeout=5000
        

        【讨论】:

          猜你喜欢
          • 2012-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-24
          相关资源
          最近更新 更多