Каков наилучший способ решить эту проблему? Я хочу вызвать конкретный метод в первый раз, когда я запускаю свое приложение, но второй раз его нужно вызывать только всякий раз, когда есть какие-либо изменения. Если изменений нет, я не хочу вызывать этот метод.Вызвать метод в первый раз, а затем вызвать его снова, когда есть какие-либо изменения в данных
Ниже приведен метод, который вызывается из моего основного приложения. И в приведенном ниже методе я извлекаю данные из базы данных. Впервые, после извлечения данных из БД, карта будет иметь что-то вроде ценам ниже
BundleFramework 1.0.0
Bundle-A 1.0.0
Bundle-B 1.0.0
Теперь я хочу, чтобы распечатать BundleFramework и его версию отдельно. Затем вызовите метод процесса, который будет включать Bundle-A и Bundle-B и его версию на карте в первый раз.
И теперь мой фоновый поток работает каждые две секунды, что также вызовет метод getBundlesInformation
. Теперь, если нет изменений в версии для Bundle-A and Bundle-B
, тогда я не хочу вызывать метод обработки, но если есть какие-либо изменения в любой из версий Bundle-A or Bundle-B
, передайте это изменение только process method
.
Я почти в моем нижнем коде, но то, что происходит в настоящее время, - если в базе данных для Bundle-A и Bundle-B нет изменений, то также он вызывает метод процесса с Bundle-A и Bundle-B Информация.
Что я хочу в первый раз (при запуске из основного приложения), он должен вызывать метод процесса с Bundle-A и Bundle-B, а в следующий раз он должен вызывать метод процесса только тогда, когда есть какие-либо изменения в версия этого пакета.
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>();
private static void getAttributesFromDatabase() {
Map<String, String> bundleInformation = new LinkedHashMap<String, String>();
bundleInformation = getFromDatabase();
if(!bundleInformation.get("BundleFramework").equals(frameworkInfo.get("BundleFramework"))) {
frameworkInfo.put("BundleFramework", bundleInformation.get("BundleFramework"));
String version = frameworkInfo.get("BundleFramework");
printFrameworkBundle("BundleFramework", version);
}
bundleInformation.remove("BundleFramework");
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 Map<String, String> getFromDatabase() {
Map<String, String> data= new LinkedHashMap<String, String>();
String version0 = "1.0.0";
String version1 = "1.0.0";
String version2 = "1.0.0";
data.put("BundleFramework", version0);
data.put("Bundle-A", version1);
data.put("Bundle-B", version2);
return data;
}
Может ли кто-нибудь помочь мне с этим? Я использую базу данных Nosql, поэтому у меня не может быть триггера.
Обновленный код: -
Ниже мой полный код-
public class App {
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 makeCall(Map<String, String> test) {
System.out.println(test);
}
private static void getAttributesFromDatabase() {
Map<String, String> bundleInformation = new LinkedHashMap<String, String>();
bundleInformation = getFromDatabase();
if(!bundleInformation.get("Framework").equals(frameworkInfo.get("Framework"))) {
frameworkInfo.put("Framework", bundleInformation.get("Framework"));
String version = frameworkInfo.get("Framework");
printFrameworkBundle("Framework", version);
}
bundleInformation.remove("Framework");
if(!bundleInformation.isEmpty()) {
oldBundleList = bundleList;
bundleList = bundleInformation;
}
if(oldBundleList != null) {
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) + "}");
}
makeCall(newBundleList);
}
} else {
makeCall(bundleList);
}
}
private static void printFrameworkBundle(String string, String version) {
System.out.println(string+" - "+version);
}
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("Framework", version0);
hello.put("BundleA", version1);
hello.put("BundleB", version2);
return hello;
}
/**
* This is a simple which will call the logHistogramInfo method after every
* X Milliseconds
*/
private static void loggingAfterEveryXMilliseconds() {
new Thread() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
}
getAttributesFromDatabase();
}
}
}.start();
}
}
: Да, хорошо поймать .. Я добавил, что, но все же он вызовет метод процесса второй раз, если нет изменений в версии этих пакетов. Если вы хотите, вы можете попробовать запустить его также. – ferhan
Держись .. Я как-то испортил .. Позвольте мне изменить код сразу для вас .. – ferhan
Я только что скорректировал свой код .. Дайте мне знать, если еще не ясно. – ferhan