Как изменить путь к файлу 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);