Erste Schritte Variablen in abhängigkeit von Git branch

cyb0rg

Aktives Mitglied
Hi Zusammen,

für ein grösseres Projekt bin ich auf der Suche nach einer "eleganten" methode um je nachdem in welchem Branch von Git man sich aktuell befindet, eine bestimmte Konfiguration zu laden. Sprich eine Variable z.B DATABASE mit dem "korrektem" wert zuzuweisen.

Und das ohne zuviel Code in der Funktion selbst:

pseudo func:

Java:
private Data getData(){

    Database db = new Database( DATABASE );

    return db.getData();

}

Java:
private Data getData(){

    Database db = new Database( [I]DATABASE );
    return db.getData();[/I]
     
}
Ich hab mit dem gedanken gespielt das ganze über eine Annotation zu lösen:

pseudo func:

Java:
@LoadCorrectDatabase
private Data getData(){

    Database db = new Database( [I]DATABASE );
    return db.getData();[/I]
     
}
Aber aktuell sehe ich den weg nicht das elegant zu lösen, so wie ich es aktuell mach ist:

pseudo func:

Java:
private Data getData(){

    Database db = new Database( getCorrectDatabase()[I] );
    return db.getData();[/I]
     
}

private String getCorrectDatabase() {

   
Process process = Runtime.getRuntime().exec("git rev-parse --abbrev-ref HEAD");
process.waitFor();

BufferedReader reader =
        new BufferedReader(new InputStreamReader( process.getInputStream() ));

String branchName = reader.readLine();
String DATABASE;

if (branchName.equals( "main" )) {
     DATABASE = "123.123.123.123";
} else if (branchName.equals( "dev" )) {
    DATABASE = "321.321.321.321";
} else {
    DATABASE = "localhost";
}

return DATABASE;

}
 

LimDul

Top Contributor
Aus dem Bauch heraus: "Warum?". In der Regel sollte man eine Anwendung - außer lokal - nicht direkt aus dem Filesystem starten sondern in der Regel mittels Maven/Gradle bauen.

Ich würde sowas eher über Maven Profile lösen, die dann entsprechend andere properties Dateien kopieren/befüllen.
 

cyb0rg

Aktives Mitglied
Aus dem Bauch heraus: "Warum?". In der Regel sollte man eine Anwendung - außer lokal - nicht direkt aus dem Filesystem starten sondern in der Regel mittels Maven/Gradle bauen.
Ich möchte, dass beim Debuggen bzw Entwickeln "automatisch" die Richtigen informationen geladen werden, und dass habe ich bisher nicht anders hinbekommen.
Früher habe ich noch etwa 4 Variablen gehabt -> String local, quali, main, remote;
Natürlich nicht so auf einer Linie sondern einzeln deklariert. Und entsprechend die "richtigen" Server angegeben für die Datenbank oder den RestInterface.
Aber ich "vergesse" es mal gerne... wenn ich Debuggen muss bzw etwas gefixt hab und ins Qual oder Main Branch mergen will... muss mich immer daran erinnern....
Ich würde sowas eher über Maven Profile lösen, die dann entsprechend andere properties Dateien kopieren/befüllen.
Mit Maven Profile hab ich es bisher nicht hinbekommen... vielleicht muss ich mir die nochmals anschauen. Hatte ich eig sogar nur fürs Builden angeschaut.
Könnte ich dann auch gegebenfalls wenn benötigt über Maven Profile dann auch ein commando ausführen z.B einen neuen Stand der Prod Datenbank ins Devl rüberschreiben oder so? also remote? mit Remote meine ich über SSH.
 

Neumi5694

Top Contributor
Deine Methode ist nicht schlechter als das, was mir einfallen würde. Der Branch muss halt Informationen darüber haben, was geladen werden soll, die beim Merge in den Master nicht dort reingelangen (gitignore).
Die können nun in einer Datei stehen oder in den Projekteigenschaften, falls die pro Branch eigens abgespeichert werden. Em Ende so oder so Murks, dafür sind die Branches nicht gedacht.
 

thecain

Top Contributor
Ich würde das ganze via System properties lösen. Entweder via properties file oder direkt beim Start übergeben. Das ggf dann in ein Startskript wo auch die Branchunterscheidung gemacht werden könnte.
Im Code selber würde ich davon nichts haben.
 

httpdigest

Top Contributor
Am Ende so oder so Murks, dafür sind die Branches nicht gedacht.
^ This.

In den Sourcen einer Anwendung sollten keine umgebungsspezifischen Parameter wie etwa IPs oder Datenbank-URLs, etc. stehen.
Nur, wenn sich mal die IP der Datenbank ändert, willst du doch keine neue JAR/Version deiner Anwendung bauen müssen?
Da sich dein Anwendungsfall aber anscheinend nur auf das Ausführen der Anwendung aus der IDE heraus beschränkt, würde ich eben auch IDE-spezifische Mittel verwenden, wie etwa Environment/Umgebungs-Variablen über mehrere Run-Configurations. Und die Anwendung liest dann etwa die Umgebungsvariablen (z.B: DB_HOST) aus. Dann brauchst du auch nicht immer den Git Branch zu wechseln, wenn du dich gegen eine andere Umgebung verbinden willst: Halt einfach eine andere Run Configuration deiner Anwendung in der IDE ausführen.

EDIT: Das hier meine ich (Beispiel IntelliJ IDEA):

1662836030034.png
 
Zuletzt bearbeitet:

cyb0rg

Aktives Mitglied
^ This.

In den Sourcen einer Anwendung sollten keine umgebungsspezifischen Parameter wie etwa IPs oder Datenbank-URLs, etc. stehen.
Nur, wenn sich mal die IP der Datenbank ändert, willst du doch keine neue JAR/Version deiner Anwendung bauen müssen?
Da sich dein Anwendungsfall aber anscheinend nur auf das Ausführen der Anwendung aus der IDE heraus beschränkt, würde ich eben auch IDE-spezifische Mittel verwenden, wie etwa Environment/Umgebungs-Variablen über mehrere Run-Configurations. Und die Anwendung liest dann etwa die Umgebungsvariablen (z.B: DB_HOST) aus. Dann brauchst du auch nicht immer den Git Branch zu wechseln, wenn du dich gegen eine andere Umgebung verbinden willst: Halt einfach eine andere Run Configuration deiner Anwendung in der IDE ausführen.

EDIT: Das hier meine ich (Beispiel IntelliJ IDEA):

Anhang anzeigen 19053
erstmal vielen dank an alle für die Antworten!
kann ich alles sehr gut nachvollziehen, bin auch kein Fan davon es im Code "Hard zu Coden".

@httpdigest
vielen dank für den Screenshot... hab vorher gesucht aber nichts so auf die schnelle gefunden.. ich nutze glücklicherweise "ebenfalls" Intellij auf meinem Rechner. Das werde ich jetzt auf jedenfall schonmal versuchen, gefällt mir ohne es getestet zu haben zumindest für den Teil vom Desktop recht gut!

Hast du da auch eine Idee, wie ich z.B "veranlassen" kann, dass sobald ich im Debug Modus bin mit der entsprechenden Konfiguration eine Datenbank z.B Mongo neu Kopiert wird von einem PROD server zu einem DEV Server z.B?.

Also quasi... beim Debuggen immer bestimmte "Actions" ausführen..

Dafür habe ich bisher immer ein Bash oder Python script auf dem server oder lokal die "manuell" ausgeführt werden müssen.

Würde auch das gerne automatisieren.
 

httpdigest

Top Contributor
Hast du da auch eine Idee, wie ich z.B "veranlassen" kann, dass sobald ich im Debug Modus bin mit der entsprechenden Konfiguration eine Datenbank z.B Mongo neu Kopiert wird von einem PROD server zu einem DEV Server z.B?.

Also quasi... beim Debuggen immer bestimmte "Actions" ausführen..

Dafür habe ich bisher immer ein Bash oder Python script auf dem server oder lokal die "manuell" ausgeführt werden müssen.

Würde auch das gerne automatisieren.
Ja, das ist auch alles möglich. Schau dir doch einfach mal alle möglichen Optionen und Konfigurationen einer Run Configuration an.
Wenn du etwas suchst, wirst du die Option "Add before launch task" finden. Dort kannst du dann aus diversen Möglichkeiten wählen, wie etwa, ein externes Tool ausführen (was auch cmd oder ssh sein kann). Einfach mal etwas gucken und explorieren. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Fabiator Variablen Variablen Zählen Allgemeine Java-Themen 3
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
berserkerdq2 Labels in IJVM sind keine lokalen Variablen oder? Allgemeine Java-Themen 2
O Fehler bei Variablen Allgemeine Java-Themen 2
N File Path mit Variablen angeben Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
R Geometry erstellen die abhängig von Variablen ist Allgemeine Java-Themen 6
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
P static Blocks und variablen Allgemeine Java-Themen 41
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
V Datentypen Graphikrechner 2/Strings und Variablen in Doubles umwandeln Allgemeine Java-Themen 6
S Kann man Variablen oder Felder definieren deren Typ zwei Interfaces ist..? Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
D BlueJ, Variablen die mehrfach vorkommen gleichzeitig umbenennen Allgemeine Java-Themen 3
C Variablen Variablen mit unendlichem Wert Allgemeine Java-Themen 22
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
T Maximale Felder maximale Variablen Allgemeine Java-Themen 2
W Lebendige Variablen herauslesen Allgemeine Java-Themen 1
K Summierung einer Variablen Allgemeine Java-Themen 5
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
Messoras Klassen Sämtliche Variablen einer Klasse übernehmen Allgemeine Java-Themen 6
K Static Variablen verbieten Allgemeine Java-Themen 10
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6
J Text lesen und in Variablen speichern Allgemeine Java-Themen 3
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
F Variablen Variablen schachteln Allgemeine Java-Themen 6
7 6 int variablen vergleichen Allgemeine Java-Themen 34
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
M Variablen Variablen in Text einbinden Allgemeine Java-Themen 5
K Überschreiben von Variablen bei rekursivem Funktionsaufruf Allgemeine Java-Themen 2
R Übergreifende Variablen? Allgemeine Java-Themen 10
OnDemand Input/Output Variablen in Datei Speichern um sie wieder auszulesen Allgemeine Java-Themen 4
D Variablen zur Laufzeit global speichern (Registry Pattern?) Allgemeine Java-Themen 6
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
D Alle Variablen final setzen ? Allgemeine Java-Themen 26
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
C Classloading und statische Variablen Allgemeine Java-Themen 2
K Variablen speichern Allgemeine Java-Themen 2
S Variablen bei Aufruf zurücksetzen Allgemeine Java-Themen 4
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
V Gibt es einen Variablen Cast? Allgemeine Java-Themen 8
K Mehrere JVMs die auf eine Klasse mit statischen Variablen zugreift Allgemeine Java-Themen 19
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
J Statische Variablen, Threadübergreifend. Allgemeine Java-Themen 4
E Variablen anderer Klassen auslesen (nur Name bekannt) Allgemeine Java-Themen 4
P Variablen in einer anderen Klasse auf Änderungen überwachen Allgemeine Java-Themen 12
V Typargument einer Variablen erfragen Allgemeine Java-Themen 4
B Rechnen mit mehreren Variablen Allgemeine Java-Themen 2
G Thread variablen Sichtbarkeit Allgemeine Java-Themen 15
J Java Pfad nicht mehr in Path Variablen??? Allgemeine Java-Themen 2
T Mit JNI finale Variablen überschreiben Allgemeine Java-Themen 14
T JNI -> auf Java-Variablen etc zugreifen Allgemeine Java-Themen 6
M Bezeichnung für Component-Variablen Allgemeine Java-Themen 6
M Variablen an Java-Programm übergeben Allgemeine Java-Themen 3
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
A Überschreibung von Variablen Allgemeine Java-Themen 3
A JavaCC: Variablen zaehlen Allgemeine Java-Themen 12
B globale und lokale Variablen Allgemeine Java-Themen 17
G referenz von variablen Allgemeine Java-Themen 9
O getRuntime().Exec() - Environment - Variablen setzen? Allgemeine Java-Themen 2
S XML-Parsing / public-Member-Variablen / Design-Frage Allgemeine Java-Themen 8
M Variablen Speicher wieder freigeben ? Allgemeine Java-Themen 9
N Variablen eines Objektes (instanz) in einen Array lesen Allgemeine Java-Themen 7
S In Subklasse auf private Variablen zugreifen Allgemeine Java-Themen 4
S Variablen und ihre Tücken. Allgemeine Java-Themen 7
C Binärbereich einer Variablen abfragen Allgemeine Java-Themen 8
J Zugriff auf den Namen einer Variablen Allgemeine Java-Themen 7
J Überschreiben von Variablen Allgemeine Java-Themen 3
C dynamische variablen Namen! Allgemeine Java-Themen 4
M Int und String Variablen verändern Allgemeine Java-Themen 10
H zwei Date Variablen überschreiben sich Allgemeine Java-Themen 2
G Taushen der Input variablen einer method Allgemeine Java-Themen 14
P Objekt- Variablen Allgemeine Java-Themen 16
K Environment Variablen per java -D weitergeben Allgemeine Java-Themen 9
D in class-Dateien nach variablen suchen! Allgemeine Java-Themen 5
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
T Größe eine Variablen in Bytes? Allgemeine Java-Themen 22
B Reguläre ausdrücke mit variablen? Allgemeine Java-Themen 12
MQue JButton an verschiedenen Variablen Allgemeine Java-Themen 2
T Unabhängigkeit von Variablen/ Objekten. Allgemeine Java-Themen 6
G Frage zu statischen Variablen bei Vererbung Allgemeine Java-Themen 15
L Sichtbarkeit von Variablen / getMethode Allgemeine Java-Themen 4
H Variablen (A1, A2, A3 mit A_irgendetwas aufrufen) ohne Array Allgemeine Java-Themen 5
M Variablen in einer .doc Vorlage ersetzen Allgemeine Java-Themen 4
A Reflection - Variablen innerhalb einer Methode ermitteln Allgemeine Java-Themen 9
E Zugriff auf Variablen äusserer Klassen Allgemeine Java-Themen 2
M Variablen in Klasse verpacken? Allgemeine Java-Themen 10
F Allegemeiner Datentyp für Objekte und Primitive Variablen Allgemeine Java-Themen 6
W Array mit Variablen aus Vararg füllen Allgemeine Java-Themen 4
S Problem mit Boolean Variablen Allgemeine Java-Themen 8
A [SOLVED] Classpath und statische Variablen Allgemeine Java-Themen 6
J variablen wert ändernung mit einer art actionlistener? Allgemeine Java-Themen 4
C klassenübergreifende variablen Allgemeine Java-Themen 3
J 28 Variablen vergleichen und die höchsten addieren Allgemeine Java-Themen 15
T ungewollter Zugriff auf private Variablen? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben