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
}
}
这是肮脏的,但它的作品。