我們有一個多租戶應用程序,它具有多個數據源,並且要爲每個數據源單獨配置數據池屬性(maxActive,minIdle等)。動態設置Tomcat池屬性
目前我正在構建一個org.apache.tomcat.jdbc.pool.DataSource
並手動設置一些屬性,如用戶名和密碼dataSource.setUserName()
和dataSource.setPassword()
。我想通過從字符串加載配置來設置其餘屬性,例如minIdle=20;initialSize=15
。
DataSource
上有兩種方法看起來像他們會做到這一點,但似乎沒有做我所期望的。我嘗試了dataSource.setConnectionProperties("..")
以及一些屬性,並填充了一個Properties
對象並將它傳遞給dataSource.setDbProperties()
,但是當我通過JMX查看池屬性時似乎沒有任何效果。我只能通過諸如dataSource.setInitialSize()
這樣的特定設置器來改變這些屬性。
我可以想到,在沒有上述嘗試的情況下設置每個屬性的唯一方法是遍歷每個屬性,並通過if-else或switch-case邏輯來確定哪些屬性dataSource設置器調用來設置值。
那麼有沒有辦法從一個字符串動態設置這些屬性,而無需調用每個單獨的setter?
當我設置的用戶名任一setConnectionProperties
或setDbProperties
,它的確發生了變化,但我想這可能是具體的東西像用戶名和密碼,我試圖設置沒有效果的其他屬性。
編輯:爲了澄清,數據源屬性將從數據庫中加載,並且可以即時添加新的數據源,因此使用應用程序屬性將不起作用。