2017-04-26 9 views
0

다른 DB를 사용하여 동일한 Tomcat에서 다른 버전의 Grails (2.3.5) 앱을 동시에 실행하고 싶습니다.특정 전쟁 설정 파일

현재 DB 구성을 지정하는 외부 구성 파일이 있습니다.

파일 이름은 하드 코드 :

<tomcat-home>/conf/sc.conf 

는 "sc.war는"내 전쟁 파일의 이름입니다. 이제 여러 버전을 실행하고 싶고 /해야하므로 conf 파일의 이름을 변수로 만들고 싶습니다.

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

런타임에 전쟁 파일 이름을 얻을 수있는 방법이 있나요?

다른 문제를 해결할 수 있도록 열려 있습니다. 당신의 도움을 주셔서 감사합니다.

답변

0

당신은 단지 외부 설정 파일

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 
    } 

}에 applicationBaseDir 경로를 줄 필요가

또는 직접 특정 외부 설정을 참조,

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

이제 외부 설정 파일에 applicationBaseDir 설정 프로젝트 파일에 파일 추가 Config.groovy 파일 다음 코드

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 

이 정보가 도움이 되었기를 바랍니다.

+0

답변 해 주셔서 감사합니다. 구성 파일을 war 파일 이름에 종속 시키길 원합니다. 몇 가지 예 : abc.war -> /conf/config-abc.groovy 또는 yxz.war -> /conf/config-xyz.groovy – user3675091

+0

답변을 편집 했으므로 응용 프로그램에서 외부 구성 파일을 참조 할 수 있습니다 . –

+0

고맙습니다. 좋아 보인다. 시도하고 알려 드리겠습니다. – user3675091