Hi,
ich habe folgendes Problem:
wir haben eine Reihe von Programmen, die die Datenqualität einer Datenbank verbessern sollen. Diese laufen täglich, oder wöchentlich oder monatlich. Da haben sich im Laufe der Jahre mehrere Programme angesammelt.
Jetzt war es so, dass es eine Batch-Datei zu jedem Programm gab und diese dann in der Windows Tasksliste zeitlich gesteuert ausgeführt worden ist. Natürlich Nachts um keine Performance zu klauen. Da die Tools unterschiedlich lange dauern und teilweise aber auf dieselben Daten zugreifen, wurden die dann im Task-Planer mit unterschiedlichen Startzeiten geplant. Mal mit einer Stunde Zeit für aufwändigere Sachen und mal mit einer halben Stunde Zeit für nicht so aufwendige.
Nach den ganzen Überarbeitungen werden die Daten dann zu allem Überfluss auch noch exportiert und an eine andere Abteilung gesendet, damit diese auch Dinge mit den Daten tut. Problem war, dass die Nacht langsam aber sicher zu kurz geworden ist für die ganzen Tools, damit am nächsten Morgen der Export auch noch pünktlich raus geht.
Also bin ich jetzt hergegangen und habe alle Tools unter ein großes Tool gestellt, welches zu einer Zeit startet und die Tools einfach sequentiell abarbeitet, das spart einen Haufen Zeit, weil ich mir keine Puffer mehr planen muss, weil das Kontroll-Tool weiß ja, wann eins der kleinen Programme fertig ist und startet dann direkt das nächste.
Nun zu meiner Frage:
die Kontrolle, welches Tool gestartet werden soll und welches nicht, mache ich aktuell über ein Array von 0 und 1, welches ich als Argument mit übergebe. So kann ich mit einer Kombination aus Nullen und Einsen sowohl ein Tool alleine, als auch eine Gruppe von Tools starten.
Das funktioniert zwar, aber nur so lange, wie ich lebe. Das System ist von außen nicht wirklich wartbar, bzw. man kann nicht direkt sehen, was eine 1 an welcher Stelle macht.
Aktuell sieht das so aus:
Ich suche aber nach einer Möglichkeit, dass man das irgendwie "lesbar" konfigurieren könnte. Mir fällt aber nichts ein.
ich habe folgendes Problem:
wir haben eine Reihe von Programmen, die die Datenqualität einer Datenbank verbessern sollen. Diese laufen täglich, oder wöchentlich oder monatlich. Da haben sich im Laufe der Jahre mehrere Programme angesammelt.
Jetzt war es so, dass es eine Batch-Datei zu jedem Programm gab und diese dann in der Windows Tasksliste zeitlich gesteuert ausgeführt worden ist. Natürlich Nachts um keine Performance zu klauen. Da die Tools unterschiedlich lange dauern und teilweise aber auf dieselben Daten zugreifen, wurden die dann im Task-Planer mit unterschiedlichen Startzeiten geplant. Mal mit einer Stunde Zeit für aufwändigere Sachen und mal mit einer halben Stunde Zeit für nicht so aufwendige.
Nach den ganzen Überarbeitungen werden die Daten dann zu allem Überfluss auch noch exportiert und an eine andere Abteilung gesendet, damit diese auch Dinge mit den Daten tut. Problem war, dass die Nacht langsam aber sicher zu kurz geworden ist für die ganzen Tools, damit am nächsten Morgen der Export auch noch pünktlich raus geht.
Also bin ich jetzt hergegangen und habe alle Tools unter ein großes Tool gestellt, welches zu einer Zeit startet und die Tools einfach sequentiell abarbeitet, das spart einen Haufen Zeit, weil ich mir keine Puffer mehr planen muss, weil das Kontroll-Tool weiß ja, wann eins der kleinen Programme fertig ist und startet dann direkt das nächste.
Nun zu meiner Frage:
die Kontrolle, welches Tool gestartet werden soll und welches nicht, mache ich aktuell über ein Array von 0 und 1, welches ich als Argument mit übergebe. So kann ich mit einer Kombination aus Nullen und Einsen sowohl ein Tool alleine, als auch eine Gruppe von Tools starten.
Das funktioniert zwar, aber nur so lange, wie ich lebe. Das System ist von außen nicht wirklich wartbar, bzw. man kann nicht direkt sehen, was eine 1 an welcher Stelle macht.
Aktuell sieht das so aus:
Java:
public static void main(String[] args) {
try {
boolean tool1 = getArg(args, 0);
boolean tool2 = getArg(args, 1);
boolean tool3 = getArg(args, 2);
boolean tool4 = getArg(args, 3);
LOG.info("Tool1 = " + tool1);
LOG.info("Tool2 = " + tool2);
LOG.info("Tool3 = " + tool3);
LOG.info("Tool4 = " + tool4);
LOG.info(" ");
if(tool1) {
try { tool1.main(null); } catch (Exception e) { LOG.error("Fehler in tool1: ", e); }
}
if(tool2) {
try { tool2.main(null); } catch (Exception e) { LOG.error("Fehler in tool2: ", e); }
}
} catch (Exception e) {
LOG.error("Fehler im Prüfer", e);
}
}
private static boolean getArg(String[] args, int i) {
if(args == null) return true;
if(args.length == 0) return true;
if((args.length - 1) < i) return false;
String arg = args[i];
return ("1".equals(arg));
}