Я пытаюсь прочитать и написать файл свойств со всеми подключениями к серверу и базе данных в моем проекте веб-приложений JSF в eclipse. Я использую log4j для записи на консоль. Мой config.properties файл:Почему мой файл свойств не обновлен в моем проекте веб-приложений?
dbserver=localhost
dbname=mydatabase;instance=myinstance
dbuser=myuser
dbpassword=mypassword
Я разместил свой файл config.properties в папке/WebAPP WEB-INF/классов (это путь к классам не так ли?). Я проверил, что он правильно читает файл в этом конкретном месте, потому что если я удалю файл, он сломается.
В моем управляемом компоненте у меня есть функции для чтения и записи в файл config.properties.
public void getSettings() {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("config.properties");
Properties properties = new Properties();
try {
properties.load(input);
this.server = properties.getProperty("dbserver");
this.db = properties.getProperty("dbname");
this.user = properties.getProperty("dbuser");
this.pass = properties.getProperty("dbpassword");
logger.info("Config file successfully loaded!");
} catch (IOException e) {
logger.error("Loading Database Settings Error with " + e);
} finally {
if (input != null) {
try {
input.close();
logger.info("Closing config file...");
} catch (IOException e) {
logger.error("Error closing config file with " + e);
}
}
}
}
public void saveSettings() {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Properties props = new Properties();
OutputStream out = null;
try {
props.setProperty("dbserver", this.server);
props.setProperty("dbname", this.db);
props.setProperty("dbuser", this.user);
props.setProperty("dbpassword", this.pass);
URL url = classLoader.getResource("config.properties");
File file = null;
try {
file = new File(url.toURI().getPath());
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// File f = new File("config.properties");
out = new FileOutputStream(file);
props.store(out, "This is an optional header comment string");
logger.info("Config file successfully saved!");
} catch (IOException io) {
logger.error("Saving configuration properties failed error with : " + io.getMessage());
} finally {
if (out != null) {
try {
logger.info("Closing config file...");
out.close();
} catch (IOException e) {
logger.error("Failed closing configuration properties file error with : " + e);
}
}
}
}
У меня никогда не было проблемы с чтением из файла свойств, но мне было трудно записывать файл. Этот вопрос, казалось, была решена путем указания
URL url = classLoader.getResource("config.properties");
Теперь, если я изменю имя сервера «локальный» на «192.168.1.1», я могу видеть, что новая информация сохраняется, даже если я обновить страницу или перезапустите сервер. ОДНАКО ... когда я открываю файл config.properties, я все еще вижу
dbserver=localhost
, когда я ожидал увидеть
dbserver=192.168.1.1
информация, кажется, сохраняется где-то еще, даже если файл по-прежнему остается одна и та же? Как и где я могу получить доступ к содержимому своих свойств, чтобы увидеть изменения, которые он делает?
JSF ничего не знает о (re) загрузке файлов свойств таким образом. Таким образом, ваш вопрос не связан с jsf. _ «Я поместил файл config.properties в папку webapp/WEB-INF/classes (это правильный путь к классу?). Я« _ Нет, вот где это должно закончиться. Скорее всего, место находится в папке src (например, src/main/resources при использовании maven) – Kukeltje
Большое спасибо за вашу помощь. Я все еще пытаюсь переварить то, что вы сказали, но это открыло мне глаза. –