Я хочу иметь возможность проверить, существует ли сценарий в кластере Redis.Если этого не произойдет, мне нужно будет загрузить новый скрипт из моего resources folder
и сохранить соответствующее значение SHA этого нового скрипта.Я хотел бы сохранить это значение SHA для следующего запуска приложения, внутри application.properties
.В идеале это можно сделать, переписав предыдущую запись для значения ша
. Я знаю, что файл свойств читается один раз при запуске, но это не имеет значения, поскольку я хочу сохранить это значение SHA только в * 1005.* для использования в следующий раз, т.е. для предотвращения накладных расходов на проверку скрипта и загрузку каждый раз.
Это мой метод для подготовки скриптов
static String prepareScripts() throws ExecutionException, InterruptedException, IOException {
List <Boolean> list = (List) asyncCommands.scriptExists(sha).get();
shaDigest = sha;
if (list.get(0) == false) {
URL url = AbstractRedisDao.class.getClassLoader().getResource("script.txt");
File file = new File(url.getPath());
String str = FileUtils.readFileToString(file, "ISO_8859_1");
shaDigest = (String) asyncCommands.scriptLoad(str).get();
Properties properties = new Properties();
try {
FileWriter writer = new FileWriter("application.properties");
BufferedWriter bw = new BufferedWriter(writer);
Iterator propertyIt = properties.entrySet().iterator();
while (propertyIt.hasNext() ) {
Map.Entry nextHolder = (Map.Entry) propertyIt.next();
while (nextHolder.getKey() != ("redis.scriptActiveDev")) {
bw.write(nextHolder.getKey() + "=" + nextHolder.getValue());
}
}
bw.write("redis.scriptActiveDev=" + shaDigest);
} catch (IOException e) {
System.err.format("IOException: %s%n", e);
}
return shaDigest;
} else {
return shaDigest;
}
}
это подробности для повторного использования вapplication.properties:
redis.enabled=true
redis.hostname=xxxx
redis.port=xxxx
redis.password=xxxx
redis.sha=xxxx
Это на правильном пути?Кроме того, как я могу сохранить application.properties
обратно в папку resources
после перестроения его с новым свойством?Есть ли более эффективный способ сделать это без воссоздания всего application.properties
только для добавления одной строки?