我使用自定义(xml
,xslt
,properties
)文件向我的应用添加配置逻辑。它们在启动时读取,可以动态重新加载,调用应用程序的特定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:我必须在生产系统上明确执行结账
我可以做得更好吗?如果没有,你会选择哪种方法?
答案 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
网络服务器。