我正在尝试加载特定于JBoss服务器上的部署的配置文件。我的想法是,我可以在同一台服务器上进行同一应用程序的多次部署(示例,培训,测试和开发)。每个部署都有不同的配置。
现在我正在采取的方向是通过JNDI从jboss获取部署名称。这是我的grails-app / conf / Config.groovy
的一部分appCtx = new InitialContext().lookup("java:app")
if(appCtx) {
deploymentName = appCtx.lookup("AppName")
grails.config.locations << "classpath:${deploymentName}-config.properties"
grails.config.locations << "classpath:${deploymentName}-config.groovy"
}
然后,如果我将war文件命名为training.war
,请将其粘贴在deployments
文件夹中,然后它应该从
configurations/training-config.properties
我遇到的问题是打包时出错...
Need to specify class name in environment or system property,
or as an applet parameter, or in an application resource file:
java.naming.factory.initial
任何人都有关于如何解决这个问题的想法?或者,如果有更简单的方法吗?
我正在使用JBoss 7.1.1
答案 0 :(得分:0)
我想通了......就像把代码放在try / catch块中一样简单......
import javax.naming.Context
import javax.naming.InitialContext
try {
Context appCtx = (Context)(new InitialContext().lookup("java:app"))
// JBoss's deployment name
// you can see this at Profile >> Container >> Naming >> applications
deploymentName = appCtx.lookup("AppName")
grails.config.locations << "classpath:${deploymentName}-config.properties"
grails.config.locations << "classpath:${deploymentName}-config.groovy"
if(System.properties["${deploymentName}.config.location"]) {
grails.config.locations << "file:" +
System.properties["${deploymentName}.config.location"]
} else if(System.getenv("${deploymentName}.config.location")) {
grails.config.locations << "file:" +
System.getenv("${deploymentName}.config.location")
}
}catch(Exception ex) {
// Initial Context does not exist
// aka, not deployed
}
修改后的代码还允许指定部署名称的系统属性或环境变量。这可以通过JBoss 7.1.1进行配置。对于已部署的training.war
应用程序......
个人资料&gt;&gt;一般配置&gt;&gt;系统属性&gt;&gt;添加
像这样输入密钥......
training.config.location
值/路径。如果在Windows上,双重逃避路径
E:\\Servers\\jboss\\jboss7.1.1\\standalone\\configurations\\training-config.properties
然后将war文件部署到jboss。应该选择配置。 :d
道具在this blog转到Mike,以了解系统属性/ env变量想法