gpt4 book ai didi

java - 如何确保仅在数据库发生变化时才调用某个方法?

转载 作者:行者123 更新时间:2023-12-01 14:13:05 25 4
gpt4 key购买 nike

解决这个问题的最佳方法是什么?我想在运行应用程序时第一次调用特定方法,但第二次只有在发生任何更改时才应调用该方法。如果没有变化,那么我不想调用该方法。

我想在运行应用程序时第一次调用 process 方法,它应该像这样打印 - 我不想使用 TestingFramework 条目在 process 方法 调用中。

{Answer-A=1.0.0, Answer-B=1.0.0}

但是之后我有一个后台线程正在运行,它将再次调用 getAttributesFromDatabase 方法,所以现在我只想打印出已更改的信息,但如果没有更改,那么我不想要再次调用process方法。

假设 Animal-AAnimal-B 的任何值发生更改,那么它应该只打印更改信息。

举个例子-假设我的后台线程第二次运行时, map 条目是这样的,没有任何变化-

TestingFramework 1.0.0
Answer-A 1.0.0
Asnwer-B 1.0.0

然后我不想再次调用 process 方法,因为没有任何变化。但不知何故假设值条目已更改为 Answer-AAnswer-B,那么当时,我想使用已更改的条目调用 process 方法。

我希望问题足够清楚。

public static Map<String, String> frameworkInfo = new LinkedHashMap<String, String>();
public static Map<String, String> bundleList = new LinkedHashMap<String, String>();
public static Map<String, String> newBundleList = new LinkedHashMap<String, String>();
private static Map<String, String> oldBundleList = new LinkedHashMap<String, String>();

public static void main(String[] args) {

getAttributesFromDatabase();

loggingAfterEveryXMilliseconds();

}

private static void getAttributesFromDatabase() {

Map<String, String> bundleInformation = new LinkedHashMap<String, String>();

bundleInformation = getFromDatabase();

if(TestingFrameworkInfo.get("TestingFramework") != (bundleInformation.get("TestingFramework"))) {
TestingFrameworkInfo.put("TestingFramework", bundleInformation.get("TestingFramework"));
String version = TestingFrameworkInfo.get("TestingFramework");
printTestingFrameworkBundle("TestingFramework", version);
}

bundleInformation.remove("TestingFramework");

if(!bundleInformation.isEmpty()) {
oldBundleList = bundleList;
bundleList = bundleInformation;
}

final Map<String, MapDifference.ValueDifference<String>> entriesDiffering = Maps.difference(oldBundleList, bundleList).entriesDiffering();
if (!entriesDiffering.isEmpty()) {
for (String key : entriesDiffering.keySet()) {
newBundleList.put(key, bundleList.get(key));
System.out.println("{" + key + "=" + bundleList.get(key) + "}");
}

process(newBundleList);
}
process(bundleList);
}


private static void process(final Map<String, String> test) {
System.out.println(test);
}


private static Map<String, String> getFromDatabase() {

Map<String, String> hello = new LinkedHashMap<String, String>();

String version0 = "1.0.0";
String version1 = "1.0.0";
String version2 = "1.0.0";

hello.put("TestingFramework", version0);
hello.put("Answer-A", version1);
hello.put("Answer-B", version2);

return hello;
}

private static void loggingAfterEveryXMilliseconds() {
new Thread() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {

}
getAttributesFromDatabase();

}
}
}.start();
}

使用下面的代码,我有,它将第一次调用 process 方法,当没有更改时第二次调用 process 方法,然后它再次调用我根本不想要的 process 方法。有人可以帮我解决这个问题吗?

我非常确定,我在这里错过了一件关键的事情,然后我想它就会开始工作。

更新:-

我仍在努力解决这个问题。有人可以帮我解决这个问题吗?

最佳答案

如果您的数据库是 RDBMS,您可以在其中放置检测更改的逻辑,即使用触发器来更新最后修改的列,您的应用程序将轮询该列并在发生更改时调用您的 process 方法变化。

关于java - 如何确保仅在数据库发生变化时才调用某个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18344041/

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