2014-02-12 63 views
2

可能是我錯誤地表述了這個問題,但這是問題所在。我有一個名爲util的庫,在util裏面,我們有一個將使用C3P0進行數據庫連接的數據庫類。這個util庫由團隊內的不同開發人員使用。如何在jar文件的類路徑中配置C3p0.properties文件,以便在類路徑之外讀取C3P0-config.xml

爲了讓每個人都更輕鬆,因爲我們有一個模塊化系統,系統中的每個模塊都可以指定它自己的數據庫連接和屬性,因爲它認爲適合他們的模塊。我們這樣做的唯一原因是因爲調用正在執行的查詢的方法都是在這個庫中定義的,所以不是每個人都反覆重寫相同的代碼,而是使用具有該功能的共享庫非常高效。

當前的設置是我在我的util庫類路徑中有C3P0.properties文件,在裏面我已經定義了這樣的C3P0-config.xml文件的路徑。

com.mchange.v2.c3p0.cfg.xml =。/ CONF/C3P0-config.xml中

然後我建立和罐子,並給它的開發者的其餘部分。然後他們在應用程序中創建conf目錄並添加c3p0-config.xml。 目錄的Strucuture看起來像這樣

Parent directory - module name { 

Sub directories 

-lib -> {Util.jar & other jars} 

-conf -> {c3p0-config.xml & other config files} 

-logs 

-modulename.jar 

} 

上執行的jar文件,我們得到的錯誤

2014-02-12 20:50:59 INFO MLog:124 - MLog clients using log4j logging. 
2014-02-12 20:50:59 DEBUG MLog:101 - Could not find resource path text file for path '/com/mchange/v2/cfg/vmConfigResourcePaths.txt'. Skipping. 
2014-02-12 20:50:59 DEBUG MLog:101 - Added paths from resource path text file at '/mchange-config-resource-paths.txt' 
2014-02-12 20:50:59 DEBUG MLog:101 - Reading VM config for path list /com/mchange/v2/log/default-mchange-log.properties, /mchange-commons.properties, /c3p0.properties, hocon:/reference,/application,/c3p0,/, /mchange-log.properties,/
2014-02-12 20:50:59 DEBUG MLog:101 - The configuration file for resource identifier '/mchange-commons.properties' could not be found. Skipping. 
java.io.FileNotFoundException: Resource not found at path '/mchange-commons.properties'. 
    at com.mchange.v2.cfg.BasicPropertiesConfigSource.propertiesFromSource(BasicPropertiesConfigSource.java:64) 
    at com.mchange.v2.cfg.BasicMultiPropertiesConfig.firstInit(BasicMultiPropertiesConfig.java:185) 
    at com.mchange.v2.cfg.BasicMultiPropertiesConfig.<init>(BasicMultiPropertiesConfig.java:110) 
    at com.mchange.v2.cfg.ConfigUtils.read(ConfigUtils.java:63) 
    at com.mchange.v2.cfg.ConfigUtils.readVmConfig(ConfigUtils.java:115) 
    at com.mchange.v2.cfg.MLogConfigSource.readVmConfig(MLogConfigSource.java:46) 
    at com.mchange.v2.log.MLogConfig.refresh(MLogConfig.java:59) 
    at com.mchange.v2.log.MLog.refreshConfig(MLog.java:59) 
    at com.mchange.v2.log.MLog.<clinit>(MLog.java:51) 
    at com.mchange.v2.naming.JavaBeanReferenceMaker.<clinit>(JavaBeanReferenceMaker.java:51) 
    at com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase.<clinit>(PoolBackedDataSourceBase.java:260) 
    2014-02-12 20:50:59 DEBUG MLog:101 - The configuration file for resource identifier 'hocon:/reference,/application,/c3p0,/' could not be found. Skipping. 
java.io.FileNotFoundException: HOCON lib (typesafe-config) is not available. Also, no resource available at '/reference,/application,/c3p0,/' for HOCON identifier 'hocon:/reference,/application,/c3p0,/'. 
    at com.mchange.v2.cfg.BasicMultiPropertiesConfig.configSource(BasicMultiPropertiesConfig.java:86) 
    at com.mchange.v2.cfg.BasicMultiPropertiesConfig.firstInit(BasicMultiPropertiesConfig.java:184) 
    at com.mchange.v2.cfg.BasicMultiPropertiesConfig.<init>(BasicMultiPropertiesConfig.java:110) 
    at com.mchange.v2.cfg.ConfigUtils.read(ConfigUtils.java:63) 
    at com.mchange.v2.cfg.ConfigUtils.readVmConfig(ConfigUtils.java:115) 
    at com.mchange.v2.cfg.MLogConfigSource.readVmConfig(MLogConfigSource.java:46) 
    at com.mchange.v2.log.MLogConfig.refresh(MLogConfig.java:59) 
    at com.mchange.v2.log.MLog.refreshConfig(MLog.java:59) 
    at com.mchange.v2.log.MLog.<clinit>(MLog.java:51) 
    at com.mchange.v2.naming.JavaBeanReferenceMaker.<clinit>(JavaBeanReferenceMaker.java:51) 
    at com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase.<clinit>(PoolBackedDataSourceBase.java:260) 
2014-02-12 20:50:59 DEBUG MLog:101 - The configuration file for resource identifier '/mchange-log.properties' could not be found. Skipping. 
java.io.FileNotFoundException: Resource not found at path '/mchange-log.properties'. 
    at com.mchange.v2.cfg.BasicPropertiesConfigSource.propertiesFromSource(BasicPropertiesConfigSource.java:64) 
    at com.mchange.v2.cfg.BasicMultiPropertiesConfig.firstInit(BasicMultiPropertiesConfig.java:185) 
    at com.mchange.v2.cfg.BasicMultiPropertiesConfig.<init>(BasicMultiPropertiesConfig.java:110) 
    at com.mchange.v2.cfg.ConfigUtils.read(ConfigUtils.java:63) 
    at com.mchange.v2.cfg.ConfigUtils.readVmConfig(ConfigUtils.java:115) 
    at com.mchange.v2.cfg.MLogConfigSource.readVmConfig(MLogConfigSource.java:46) 
    at com.mchange.v2.log.MLogConfig.refresh(MLogConfig.java:59) 
    at com.mchange.v2.log.MLog.refreshConfig(MLog.java:59) 
    at com.mchange.v2.log.MLog.<clinit>(MLog.java:51) 
    at com.mchange.v2.naming.JavaBeanReferenceMaker.<clinit>(JavaBeanReferenceMaker.java:51) 
    at com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase.<clinit>(PoolBackedDataSourceBase.java:260) 

可能是什麼問題呢?我做錯了什麼?

回答

3

在您所顯示的日誌消息和堆棧跟蹤中,根本沒有任何錯誤。這些都是DEBUG級別的消息。 (c3p0 & com.mchange圖書館應通常在INFO記錄。)

c3p0 & mchange-commons-java支票在許多不同地方的潛在配置信息。在這些地方的許多地方,他們什麼也找不到,繼續前進。記錄在DEBUG,你正在看圖書館檢查/mchange-log.properties,在CLASSPATH,並找不到它的過程。在DEBUG處,他們查看了庫的日誌,他們沒有找到,以及Exception沒有找到。

這些都不關心。這是正常的。

主要問題是配置用戶是否放在c3p0-config.xml正在採取。您正在使用文件的相對目錄,而不是絕對的文件系統位置。我認爲這樣做會起作用,相對被解釋爲相對於流程的工作目錄,但我不確定它會起作用,即使它確實存在,你確定它不會變​​得脆弱,取決於用戶啓動你的過程?用戶是否會運行一個腳本來確保正確的工作目錄?

+0

理想情況下,它應該與相對目錄一起工作,但它沒有。它僅顯示此調試日誌,並不創建連接池。 要回答你的問題,是的是有一個定義的腳本來確保工作目錄不會改變。事實上,我上面提到的結構是靜態的,不會改變。設計團隊已經同意 – kimathie

+1

我認爲最好的做法是在腳本中將期望的c3p0-config.xml的絕對路徑設置爲System屬性,例如'-Dcom.mchange.v2.c3p0 .cfg.xml = $ {APP_HOME}/conf/c3p0-config.xml「,當您從腳本啓動JVM時。 –

相關問題