Как изменить путь к файлу JCS cache.ccf?

Я пытаюсь изменить путь к файлу 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 ответа

У меня была эта проблема - и поскольку в моих проектах есть несколько загрузчиков классов (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");

Расширяя ответ Джона выше. Пользовательский код для загрузки конфигурации из файла. Поместите это перед созданием 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);       
        }
    }

Вы можете проверить свой путь к классу. Похоже, только src находится в classpath, а не в папке config. Для меня мои *.ccf файлы размещены в директории config, которая находится в моем classpath, и мне нужно только указать путь к файлу ccf в виде /client_cache.ccf, чтобы JCS мог его забрать.

Это также зависит от вашей среды развертывания. Однако, если в вашем classpath указан /config, он должен работать.

Я нашел эту соответствующую информацию

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

CompositeCacheManager ccm = CompositeCacheManager.getUnconfiguredInstance(); 
Properties props = new Properties(); 
props.load(/* load properties from some location defined by your app */); 
ccm.configure(props);
Другие вопросы по тегам