在 Java Webapp 和 java 普通应用程序中读取常见的外部 属性 文件
Read common external property file in Java Webapp and java normal app
我知道这个问题已经回答了很多次,最有用的答案如下,
Where to place and how to read configuration resource files in servlet based application?
但是,我们有一些特殊要求如下,
- Webapp 将部署到 tomcat。
- .jar 形式的普通 java 应用程序将放置在文件夹 /myapp
下
- myappConfig.property 文件将放在 /myapp
下
客户端计算机上的目录结构
/myapp
/myapp.jar
/assests/myappConfig.property
/tomcat/webapps/myapp.war
基本上 myapp.jar 和 myapp.war 将访问 sql 数据库连接值 MySql 数据库连接和数据库操作。
从 myapp.jar 访问 myappConfig.property --> 工作正常
File jarPath = new File(Myapp.class.getProtectionDomain().getCodeSource().getLocation().getPath());
String propertiesPath = jarPath.getParent();
System.out.println(" propertiesPath-" + propertiesPath);
mainProperties.load(new FileInputStream(propertiesPath + "\assets\myapp.property"));
谁能help/suggest如何实现,
正在从 mywebapp 访问 myappConfig.property 文件,
提供运行 myappConfig.property 文件中的时间更改不需要 myapp.war 重新部署
提前感谢您的帮助。
编辑
以下是我们要将项目交付给客户的步骤。
下面是我的应用目录
/myapp
/myapp.jar
/assests/myappConfig.property
/tomcat/webapps/myapp.war
用一些打包工具将所有东西打包成一个包。
运行 这个包在客户端机器的任何位置,它的目录结构与上面相同
在这里,我不想在 webapp 或 tomcat 中为“/assests/myappConfig.属性”硬编码任何位置
普通 Java 应用程序我可以读取 属性 文件但是对于 wepapp 我不清楚如何做到这一点?
您可以将 <context>
添加到 tomcat/conf/server。xml(在此示例中,linux 路径):
<Context docBase="/home/yourusername/tomcat/assests" path="/assets" />
如果您正在使用 Windows:
<Context docBase="C:\path\to\myapp\assets" path="/assets" />
然后您可以像访问您的网络应用程序中的任何其他资源一样访问它(例如:/assets/myappConfig。属性)。
例如,如果您使用 JDBC,您可以将连接属性存储在单例中并从那里请求它,并且 class 可以负责对该文件的更改检查。
我知道这个问题已经回答了很多次,最有用的答案如下,
Where to place and how to read configuration resource files in servlet based application?
但是,我们有一些特殊要求如下,
- Webapp 将部署到 tomcat。
- .jar 形式的普通 java 应用程序将放置在文件夹 /myapp 下
- myappConfig.property 文件将放在 /myapp 下
客户端计算机上的目录结构
/myapp
/myapp.jar
/assests/myappConfig.property
/tomcat/webapps/myapp.war
基本上 myapp.jar 和 myapp.war 将访问 sql 数据库连接值 MySql 数据库连接和数据库操作。
从 myapp.jar 访问 myappConfig.property --> 工作正常
File jarPath = new File(Myapp.class.getProtectionDomain().getCodeSource().getLocation().getPath());
String propertiesPath = jarPath.getParent();
System.out.println(" propertiesPath-" + propertiesPath);
mainProperties.load(new FileInputStream(propertiesPath + "\assets\myapp.property"));
谁能help/suggest如何实现,
正在从 mywebapp 访问 myappConfig.property 文件,
提供运行 myappConfig.property 文件中的时间更改不需要 myapp.war 重新部署
提前感谢您的帮助。
编辑
以下是我们要将项目交付给客户的步骤。
下面是我的应用目录
/myapp /myapp.jar /assests/myappConfig.property /tomcat/webapps/myapp.war
用一些打包工具将所有东西打包成一个包。
运行 这个包在客户端机器的任何位置,它的目录结构与上面相同
在这里,我不想在 webapp 或 tomcat 中为“/assests/myappConfig.属性”硬编码任何位置
普通 Java 应用程序我可以读取 属性 文件但是对于 wepapp 我不清楚如何做到这一点?
您可以将 <context>
添加到 tomcat/conf/server。xml(在此示例中,linux 路径):
<Context docBase="/home/yourusername/tomcat/assests" path="/assets" />
如果您正在使用 Windows:
<Context docBase="C:\path\to\myapp\assets" path="/assets" />
然后您可以像访问您的网络应用程序中的任何其他资源一样访问它(例如:/assets/myappConfig。属性)。
例如,如果您使用 JDBC,您可以将连接属性存储在单例中并从那里请求它,并且 class 可以负责对该文件的更改检查。