簡體   English   中英

在 Java 中使用 HikariCP 時如何指定數據庫特定屬性?

[英]How to specify database specific properties while using HikariCP in Java?

我需要在通過 HikariCP 庫啟動數據庫連接時添加以下 Oracle 數據庫屬性,但沒有在網上找到任何示例。

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

這在Spring Boot 2.3.2.RELEASE中對我有用:

應用程序屬性:

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"));

輸出:

真的
真的

這就像在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();
    }
}

要驗證連接中的設置,您必須首先打開以獲取 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 測試

你在使用 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM