繁体   English   中英

如何在jar文件的类路径中配置C3p0.properties文件以在类路径之外读取C3P0-config.xml

[英]How to configure C3p0.properties file in a jar file's classpath to read C3P0-config.xml outside the classpath

可能是我说错了这个问题,但这是问题所在。 我有一个名为util的库,在util内,我们有一个数据库类,它将使用C3P0进行数据库连接。 这个util库由团队中的不同开发人员使用。

由于我们拥有模块化系统,因此为了使每个人都更轻松,系统中的每个模块都可以指定自己的数据库连接和属性,以适合他们的模块。 我们这样做的唯一原因是因为所有用于调用执行查询的方法都在该库中定义,因此与其一遍又一遍地重写相同的代码,而不是所有人都使用具有该功能的共享库是非常有效的。

当前设置是,我在util库的类路径中有C3P0.properties文件,并且在其中定义了C3P0-config.xml文件的路径,如下所示。

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

然后,我构建和添加jar,并将其交给其他开发人员。 然后,他们在其应用程序中创建一个conf目录,并添加c3p0-config.xml。 目录的结构如下所示

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)

可能是什么问题呢 ? 我做错了什么?

在显示的日志消息和堆栈跟踪中,没有任何错误。 这些都是DEBUG级别的消息。 c3p0com.mchange库通常应记录在INFO 。)

c3p0mchange-commons-java在许多不同的地方检查潜在的配置信息。 在许多地方,他们什么也没找到,所以继续前进。 DEBUG登录,您正在观察库在CLASSPATH检查/mchange-log.properties的过程, /mchange-log.properties找不到该过程。 DEBUG ,库记录了他们查找,找不到的日志以及未找到的异常。

所有这些都不在乎。 这是正常的。

主要问题是放在c3p0-config.xml的配置用户是否正在使用。 您正在使用文件的相对目录,而不是绝对文件系统位置。 我认为它可以正常工作,相对是相对于流程的工作目录来解释的,但是我不确定它是否可以工作,即使可以,您是否确定它不会脆弱,取决于用户的方式开始您的过程? 用户是否将运行可确保正确工作目录的脚本?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM