gpt4 book ai didi

java - 如何在运行时编辑 application.properties(供下次使用)

转载 作者:可可西里 更新时间:2023-11-01 11:14:30 25 4
gpt4 key购买 nike

我希望能够检查脚本是否存在于 Redis 集群中。如果没有,我将需要从我的 resources 文件夹 加载一个新脚本并保存该新脚本的相应 SHA 值。我想在应用程序下次启动时保存该 SHA 值,在 application.properties 中。理想情况下,这将通过覆盖 sha 值的先前条目来完成

我知道属性文件在启动期间被读取一次,但这并不重要,因为我只想将该 SHA 值保存到 application.properties 以供下次使用,即防止开销每次检查脚本并加载。

这是我编写脚本的方法

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 的详细信息:

redis.enabled=true
redis.hostname=xxxx
redis.port=xxxx
redis.password=xxxx
redis.sha=xxxx

这是在正确的轨道上吗?另外,在使用新属性重建 application.properties 后,我将如何将其保存回 resources 文件夹?有没有更有效的方法来做到这一点,而无需重新创建整个 application.properties 只是为了添加一行?

最佳答案

无需在 application.properties 中存储 Lua 脚本的 SHA 摘要.

使用 Redis 客户端的 API 在应用程序启动时获取 SHA 摘要。

例如,Lettuce 提供以下 API用于脚本:
String digest(V script)
String scriptLoad(V script)
List<Boolean> scriptExists(String... digests)

您可以在每次应用程序启动时执行以下代码以获取脚本的摘要:

public String sha(String script) {
String shaDigest = redisScriptingCommands.digest(script);
boolean scriptExists = redisScriptingCommands.scriptExists(shaDigest).get(0);
if (!scriptExists) {
redisScriptingCommands.scriptLoad(script);
}
return shaDigest;
}

关于java - 如何在运行时编辑 application.properties(供下次使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56046246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com