簡體   English   中英

Spring Boot:打開數據庫連接時設置PostgreSQL運行時參數

[英]Spring Boot: setting a PostgreSQL run-time parameter when database connection is open

我正在尋找打開數據庫連接時設置運行時參數的正確方法。 我的運行時參數實際上是一個時區,但是我認為這對於任意參數都適用。

我找到了以下解決方案,但我覺得這些都不是對的

  1. Jdbc攔截器

    因為Spring Boot默認將Apache Tomcat連接池作為默認設置,所以我可以使用org.apache.tomcat.jdbc.pool.JdbcInterceptor來攔截連接。

    我不認為此攔截器提供了在連接打開時執行語句的可靠方法。 對於設置僅應設置一次的參數而言,不必攔截此攔截器提供的每個語句。

  2. initSQL屬性

    Apache的池連接具有內置功能,可以通過PoolProperties.initSQL參數提供的語句來初始化自身。 這是在ConnectionPool.createConnection(...)方法中執行的。

    不幸的是, 從Spring刪除了對該參數的官方支持,並且此后未引入任何等效功能。

    我的意思是,我仍然可以像下面的示例中那樣使用數據源構建器,然后將該屬性入侵到連接池中,但這不是一個好方法。

     // Thank's to property binders used while creating custom datasource, // the datasource.initSQL parameter will be passed to an underlying connection pool. @Bean @ConfigurationProperties(prefix = "datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } 

    更新資料

    我在Spring Boot 1.x應用程序中對此進行了測試。 上面的語句對於Spring Boot 2應用程序不再有效,因為:

    1. 默認的Tomcat數據源被Hikari取代,該Hikari支持spring.datasource.hikari.connection-init-sql屬性。 它的文檔說, 獲取將在創建新連接時將在所有新連接上執行的SQL字符串,然后再將其添加到池中。

    2. 似乎為Tomcat數據源重新引入了類似的屬性,即spring.datasource.tomcat.init-sql

  3. ConnectionPreparer和AOP

    這不是實際的解決方案。 它更像是靈感。 連接准備器是一種用於在Spring Data JDBC Extensions項目中初始化Oracle連接的機制。 這個東西有它自己的問題 ,不再維護,但可以用作類似解決方案的基礎。

如果您的參數實際上是一個時區,為什么不找到一種設置屬性的方法。

例如,如果你想存儲或與預定義的時間標記讀取日期時間做到這一點,正確的方法是設置屬性hibernate.jdbc.time_zone處於休眠entityManagerspring.jpa.properties.hibernate.jdbc.time_zoneapplication.properties

暫無
暫無

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

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