只要可以在web.xml中静态提供配置文件名称,或者使用新的无XML配置类型(配置文件可以通过编程方式从属性文件中加载配置文件)。
当我们仍然使用XML版本时,我进一步进行了调查,发现了以下不错的解决方案,你在其中实现了自己的解决方案,你
ApplicationContextInitializer只需将带有属性文件的新
PropertySource添加到源列表中以搜索特定于环境的配置设置。在下面的示例中,可以
spring.profiles.active在
env.properties文件中设置属性。
public class P13nApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { private static Logger LOG = LoggerFactory.getLogger(P13nApplicationContextInitializer.class); @Override public void initialize(ConfigurableApplicationContext applicationContext) { ConfigurableEnvironment environment = applicationContext.getEnvironment(); try { environment.getPropertySources().addFirst(new ResourcePropertySource("classpath:env.properties")); LOG.info("env.properties loaded"); } catch (IOException e) { // it's ok if the file is not there. we will just log that info. LOG.info("didn't find env.properties in classpath so not loading it in the AppContextInitialized"); } }}
然后,你需要将该初始值设定项作为ContextLoaderListenerspring 的参数添加,如下所示web.xml:
<context-param> <param-name>contextInitializerClasses</param-name> <param-value>somepackage.P13nApplicationContextInitializer</param-value></context-param><listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
你也可以将其应用于DispatcherServlet:
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextInitializerClasses</param-name> <param-value>somepackage.P13nApplicationContextInitializer</param-value> </init-param></servlet>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)