Struts - 基于环境的配置

问题描述:

我想解决一个相当老的系统,有几个使用Struts的webapps。以前的构建系统只是一套相当不好的Ant脚本,这些脚本已经建立了多年,我试图用Maven和一个合适的CI(Jenkins)取代。Struts - 基于环境的配置

我现在的问题是有一个名为'build-live'的Ant任务,它用'80'和'443'(实时值)替换字符串'8080'和'4343'(开发值) )分别在几个webapps的struts-config.xml文件中。有一个任务是“建立本地”,而相反。

在配置文件中的XML如下:

<plug-in className="org.apache.struts.action.SecurePlugIn"> 
    <!-- Set to 80 by 'build-live' Ant task --> 
    <set-property property="httpPort" value="8080"/> 
    <!-- Set to 443 by 'build-live' Ant task --> 
    <set-property property="httpsPort" value="4343"/> 
</plug-in> 

我已经成功地使用Maven中的AntRun插件做同样的,所以它可以与Maven的工作,但因为这需要重建依赖于环境,它打破了我的主要目标'构建一次,部署到任何地方'。

因此,我希望有人能向我解释,如果有可能把它们变成可以注入的属性。

所以我结束了延长我自己的SecurePlugIn类,并重写init方法:

public class PropertisedSecurePlugin extends SecurePlugIn { 

    @Override 
    public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { 
     super.init(servlet, config); 
     String dev = System.getProperty("dev"); 
     if (Boolean.TRUE.toString().equals(dev)) { 
      setHttpPort("8080"); 
      setHttpsPort("4343"); 
     } // Else not required here as it falls back to defaults 
    } 
} 

这是肮脏的,但它的作品。