如何从主应用程序外部化语言属性和模板?

时间:2017-06-28 10:11:51

标签: java git

我使用自定义(xmlxsltproperties)文件向我的应用添加配置逻辑。它们在启动时读取,可以动态重新加载,调用应用程序的特定webservice端点。

这些文件的目的对我的问题无关紧要。我们假设它们只代表语言环境/语言属性。

目前,任何文件都放在war的{​​{1}}内,并且在构建期间自动生成,默认情况下会/src/main/resources复制到/WEB-INF/classes

问题:我希望其他用户修改这些文件,而不必触及主项目(例如,语言文件非常简单,非开发人员应该能够有目的地修改它们。)

问题是:我怎样才能最好地将这些文件与我的主项目分开? 将它们放在数据库中是不可取的!

我可以想到以下方法,但它们似乎都不令人满意:

  • 创建仅包含xml模板的 git存储库。然后在我的maven文件夹中包含指向该存储库的链接,并查看 resursively

    PRO:然后在建筑物上自动拾取模板。

    CON:我必须在git中显式调用递归检出。即使只更改了模板,我也必须重建应用程序。

  • 创建一个包含xml模板的(这也可能只是一个包含xml文件的存储库,以及用于构建该库的java / maven文件)。然后我可以构建该库,只需替换应用程序服务器中的库。

    PRO:我只需要重建模板jar。

    CON:我可能不得不重新启动应用程序以考虑更新的库。

  • 在应用程序服务器上创建一个简单文件夹,在应用程序本身之外。使用git存储库,该存储库仅包含xml模板。并将它们检出到生产服务器文件夹。

    PRO:我可以从我的应用程序监视该文件夹并动态重新加载模板。

    CON:我必须在生产系统上明确执行结账

我可以做得更好吗?如果没有,你会选择哪种方法?

2 个答案:

答案 0 :(得分:0)

我正在使用config.xml文件(可以更改内容)从jar文件旁边的xml文件向项目发送一些更改数据

Java代码:

void m2(int i) {
    long x = i;
    Long l = x;
}

xml文件(用于将文本“AwesomeBuild”发送到jar)

public class DomParser {

private static File configFile;
private static DocumentBuilderFactory dbFactory;
private static DocumentBuilder dBuilder;
private static Document document;
private static NodeList nList;
private static Element eElement;

public static String build() {
    return getElement("Application", "Build");
}



private static String getElement(String tagname, String name) {
    try {
        configFile = new File("Config.xml");
        dbFactory = DocumentBuilderFactory.newInstance();
        dBuilder = dbFactory.newDocumentBuilder();
        document = dBuilder.parse(configFile);
        document.getDocumentElement().normalize();
        nList = document.getElementsByTagName(tagname);
        Node nNode = nList.item(0);
        eElement = (Element) nNode;
    } catch (Exception e) {
        e.printStackTrace();
    }

    return eElement.getElementsByTagName(name).item(0).getTextContent();
}

希望你正在寻找并帮助

答案 1 :(得分:0)

最后,我创建了一个包含.war中配置文件的简单src/main/WEB-INF/项目。可以将项目部署到tomcat,然后可以从其他应用程序相对于CATALINA_BASE/webapps/访问文件。甚至直接通过localhost:8080网络服务器。