战争特定的配置文件

时间:2017-04-26 09:15:24

标签: grails grails-2.0

我想在同一个tomcat中使用不同的DB同时运行不同版本的Grails(2.3.5)应用程序。

目前我有一个外部配置文件,我指定了我的数据库配置。

文件名是硬编码的:

D:\maqtary\logicaldoc-6.7.1-src\build\poms>mvn -version
Apache Maven 3.0.3 (r1075438; 2011-02-28 09:31:09-0800)
Maven home: C:\Users\PC\Downloads\apache-maven-3.0.3
Java version: 1.7.0_80, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_80\jre
Default locale: en_US, platform encoding: Cp1256
OS name: "windows 7", version: "6.1", arch: "x86", family: "windows"


D:\maqtary\logicaldoc-6.7.1-src\build\poms>mvn install
[INFO] Scanning for projects...
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR]   The project com.logicaldoc:logicaldoc-parent-pom:62 
(D:\maqtary\logicaldoc-6.7.1-src\build\poms\pom.xml) has 1 error
[ERROR]     Unresolveable build extension: Error resolving version for plugin 
'org.apache.maven.wagon:wagon-ssh' from the repositories [local 
(C:\Users\PC\.m2\repository), central (http://repo1.maven.
org/maven2)]: Plugin not found in any plugin repository -> [Help 2]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e 
switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please 
read the following articles:
[ERROR] [Help 1] 
http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] 

“sc.war”是我的war文件的名称。由于我现在想要/需要运行多个版本,我想创建conf文件变量的名称。

  <tomcat-home>/conf/sc.conf

有没有办法在运行时获取war-file-name?

我愿意以其他方式解决我的问题。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您只需将applicationBaseDir路径提供给外部配置文件

即可
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/"

现在,将特定的外部配置文件添加到代码

的项目文件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

我希望这可以帮到你!