根据this question及其回复,我决定使用Environment.executeForCurrentEnvironment
根据环境注入bean。这是我的代码:
Environment.executeForCurrentEnvironment {
development {
// In development we use DevelopmentEmailer as implementation of emailer.
springConfig.addAlias 'emailer', 'developmentEmailer'
}
devReport {
// In custom Env we use DevelopmentEmailer as implementation of emailer.
springConfig.addAlias 'emailer', 'developmentEmailer'
}
production {
springConfig.addAlias 'emailer', 'emailer'
}
}
devReport是我的自定义环境。
但是当我使用env = PROD进行调试时,我感到很惊讶,我发现了这个:
使用哪个-Dgrails.env设置环境来运行应用并不重要。它总是首先为我的自定义env设置别名(稍后,在下一步中为prod设置并纠正错误的别名)。但问题仍然存在。
解决方案
解决方案很简单,只需使用:
switch(Environment.current.name) {
case 'development':
springConfig.addAlias 'emailer', 'developmentEmailer'
break
case 'devReport':
springConfig.addAlias 'emailer', 'developmentEmailer'
break
case 'production':
springConfig.addAlias 'emailer', 'emailer'
break
}
但我仍然想知道为什么,任何想法?