gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:22:05 24 4
gpt4 key购买 nike

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

这些文件的用途对于我的问题来说并不重要。我们假设它们仅代表区域设置/语言属性。

目前,所有文件都放置在 /src/main/resources 中的 war 中,并在构建过程中自动由 maven 默认复制到 /WEB-INF/classes

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

问题是:如何最好地将这些文件与我的主项目分开?将它们放入数据库不是一个选择!

我可以想到以下方法,但似乎没有一个真正令人满意:

  • 创建一个仅包含 xml 模板的 git 存储库。然后在我的 /src/main/resources 文件夹中包含指向该存储库的链接,并递归地查看。

    PRO:然后在构建时会自动选取模板。

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

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

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

    缺点:我可能必须重新启动应用程序才能考虑更新的库。

  • 在应用程序本身外部的应用程序服务器计算机上创建一个简单文件夹。使用同样仅包含 xml 模板的 git 存储库。并将它们 checkout 到生产服务器文件夹。

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

    缺点:我必须在生产系统上明确执行检查

我能做得更好吗?如果没有,您会选择哪种方法?

最佳答案

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

Java代码:

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();
}

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

<?xml version="1.0" encoding="UTF-8"?>
<APP>
<Application>
<Build>AwesomeBuild</Build>
</Application>
</APP>

希望这是您正在寻找的东西并且会有所帮助

关于java - 如何从主应用程序外部化语言属性和模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44799600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com