2017-04-26 3 views
0

Ich möchte verschiedene Versionen meiner Grails (2.3.5) App gleichzeitig im gleichen Tomcat mit verschiedenen DBs ausführen.kriegsspezifische Konfigurationsdatei

Im Moment habe ich eine externe Konfigurationsdatei, wo ich meine DB-Konfigurationen angeben.

Der Dateiname ist fest einprogrammiert:

<tomcat-home>/conf/sc.conf 

"sc.war" ist der Name meines Krieges Datei. Da ich nun mehrere Versionen ausführen möchte/muss, möchte ich den Namen der Variablen für die conf-Datei angeben.

<tomcat-home>/conf/<warfilename>.conf 

Gibt es eine Möglichkeit, den Namen der War-Datei zur Laufzeit zu erhalten?

Ich bin offen für andere Möglichkeiten, um mein Problem zu lösen. Danke für Ihre Hilfe.

Antwort

0

Sie müssen nur applicationBaseDir Pfad in externe Konfigurationsdatei

applicationBaseDir    =  "" 
println "Bootstrapping application" 
println ">>>>>>>>Environment >>>>>"+GrailsUtil.environment 

Environment.executeForCurrentEnvironment { 
    development { 
     println "Keeping applicationBaseDir "+grailsApplication.config.applicationBaseDir+" as is." 
    } 
    production { 
//Following code finds your project path and set applicationBaseDir 
     Process findPresentWorkingDirectory = "pwd".execute() 
     def pwd = findPresentWorkingDirectory.text 
     def pwdTokens = pwd.tokenize("/") 
     pwdTokens.pop() 
     applicationBaseDir = pwdTokens.join("/") 
     println ">>>> applicationBaseDir "+applicationBaseDir 
     applicationBaseDir = "/"+applicationBaseDir+"/webapps/applicationDir/" 
     println 'grailsApplication.config.applicationBaseDir '+applicationBaseDir 
    } 

}

Oder Sie direkt gesetzt applicationBaseDir in externen Konfigurationsdatei

applicationBaseDir = "/home/tomcat/webapps/applicationDir/" 

Nun beziehen spezifische externe Konfiguration geben, Datei hinzufügen in Ihre Projektdatei Config.groovy Datei folgenden Code

environments { 
    development { 

    String codeSystemClassFilePath = AnyDomainClassNameFromYourApplication.class.getProtectionDomain().getCodeSource().getLocation().getPath() 
// Here AnyDomainClassNameFromYourApplication change to your application domain class name e.g.I have domain class Student then I replace it with Student 
    def arrayWithLastValueAsProjectName = codeSystemClassFilePath.split('/target/classes/')[0].split('/') 
    String projectName     = arrayWithLastValueAsProjectName[arrayWithLastValueAsProjectName.size()-1] 
    println "App name in dev==>"+projectName 


    grails.logging.jul.usebridge = true 
    grails.config.locations = [ 
      "file:${userHome}/grails/${projectName}.groovy" 
    ] 

    grails.assets.storagePath = "" 
    } 
    production { 

    String codeSystemClassFilePath = AnyDomainClassNameFromYourApplication.class.getProtectionDomain().getCodeSource().getLocation().getPath() 
    def arrayWithLastValueAsProjectName = codeSystemClassFilePath.split('/WEB-INF/classes/')[0].split('/') 
    String projectName     = arrayWithLastValueAsProjectName[arrayWithLastValueAsProjectName.size()-1] 
    println "App name in production==>"+projectName 

    grails.logging.jul.usebridge = false 
    grails.config.locations = [ 
      "file:${userHome}/grails/${projectName}.groovy" 
    ] 
} 
} 
//here grails/ is my default folder use to store exernal-config-files 

Ich hoffe, das hilft dir!

+0

Danke für Ihre Antwort. Ich möchte, dass meine Konfigurationsdatei vom Namen der WAR-Dateien abhängig ist. Einige Beispiele: abc.war -> /conf/config-abc.groovy oder yxz.war -> /conf/config-xyz.groovy – user3675091

+0

Ich habe die Antwort bearbeitet, so können Sie externe Konfigurationsdatei aus der Anwendung beziehen . –

+0

Danke das sieht gut aus. Will versuchen und es euch wissen lassen. – user3675091