8

我正在尝试更改 cache.ccf 文件的路径大约一个小时......
当我打电话时JCS.getInstance("myRegion");,我收到了这个错误:

Exception in thread "main" java.lang.IllegalStateException: Failed to load properties for name [/cache.ccf]

我试图将 cache.ccf 放入 src 文件夹。在这种情况下,一切正常。但我希望它在./config/目录中,而不是在./src. 我试图更改配置文件名:

JCS.setConfigFilename("../config/cache.ccf");

但它不工作,我得到同样的错误:

Exception in thread "main" java.lang.IllegalStateException: Failed to load properties for name [../config/cache.ccf]

JCS 试图找到"../config/cache.ccf"在 src 目录中命名的文件。
在这里我找到了这句话:
类路径应该包括这个文件所在的目录或者文件应该放在类路径的根目录下,因为它是自动发现的。

但是即使 cache.ccf 文件位于项目的根目录中,我的应用程序也不起作用。
如何更改 cache.ccf 文件的路径?

4

4 回答 4

10

我遇到了这个问题——而且因为我的项目中有多个类加载器(axis2、tomcat),所以很难弄清楚将 cache.ccf 文件放在哪里。我最终没有使用 .properties 文件并直接配置它 - 这就是我的做法......

CompositeCacheManager ccm = CompositeCacheManager.getUnconfiguredInstance();
Properties props = new Properties();

props.put("jcs.default","DC");
props.put("jcs.default.cacheattributes",
          "org.apache.jcs.engine.CompositeCacheAttributes");
// lots more props.put - this is basically the contents of cache.ccf

ccm.configure(props);
JCS sessionCache = JCS.getInstance("bbSessionCache");
于 2012-10-24T11:21:30.140 回答
2

扩展上面乔恩的答案。从文件加载配置的自定义代码。将它放在实例化 JCS 之前。

    final String configFilename = System.getProperty("jcs.configurationFile");

    if (configFilename != null)
    {
        try (FileReader f = new FileReader(configFilename))
        {
            Properties props = new Properties();
            props.load(f);
            CompositeCacheManager ccm = CompositeCacheManager.getUnconfiguredInstance();
            ccm.configure(props);       
        }
    }
于 2015-04-21T21:07:28.000 回答
1

您可能需要检查您的类路径。似乎只有 src 在类路径中而不是 config 文件夹中。对我来说,我将我的 *.ccf 文件放在我的类路径中的 config 目录中,我只需要将 ccf 文件的路径指定为 /client_cache.ccf 以便 JCS 获取它。

它还取决于您的部署环境。但是,如果您的类路径中列出了 /config,它应该可以工作。

于 2012-05-30T02:59:46.357 回答
0

我找到了这个相关信息

https://commons.apache.org/proper/commons-jcs/faq.html#configuration-file

CompositeCacheManager ccm = CompositeCacheManager.getUnconfiguredInstance(); 
Properties props = new Properties(); 
props.load(/* load properties from some location defined by your app */); 
ccm.configure(props);
于 2016-11-29T06:38:59.930 回答