【问题标题】:Read common external property file in Java Webapp and java normal app读取 Java Webapp 和 Java 普通应用程序中的通用外部属性文件
【发布时间】:2016-07-26 14:39:05
【问题描述】:

我知道这个问题已经回答了很多次,最有用的答案如下,

Where to place and how to read configuration resource files in servlet based application?

但是,我们有一些特殊要求如下,

  1. Webapp 将部署到 tomcat。
  2. .jar 形式的普通 java 应用程序将放在文件夹 /myapp 下
  3. myappConfig.property 文件将放在 /myapp 下

客户端计算机上的目录结构

/myapp
   /myapp.jar
   /assests/myappConfig.property
   /tomcat/webapps/myapp.war

基本上 myapp.jarmyapp.war 将访问用于 MySql 数据库连接和数据库操作的 sql 数据库连接值。

从 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"));

任何人都可以帮助/建议如何实施,

从 mywebapp 访问 myappConfig.property 文件,

如果 myappConfig.property 文件中的运行时更改不需要重新部署 myapp.war

提前感谢您的帮助。

编辑

以下是我们要将项目交付给客户的步骤。

  1. 下面是我的应用目录

    /myapp
      /myapp.jar
      /assests/myappConfig.property
      /tomcat/webapps/myapp.war
    
  2. 使用一些打包工具将所有内容打包在一个包中。

  3. 在客户端机器的任意位置运行这个包,它的目录结构和上面一样

  4. 在这里,我不想在 webapp 或 tomcat 中为“/assets/myappConfig.property”硬编码任何位置

  5. 普通 Java 应用程序我可以读取属性文件,但对于 wepapp,我不清楚如何做到这一点?

【问题讨论】:

  • 如果您想在运行时更改而不重新部署,最好使用属性文件的值持久保存到数据库中。
  • @vishalgajera 正如我提到的,属性文件包含数据库连接 vlaues,所以除非我读取属性值 webapp 无法访问数据库。
  • 您的要求。看起来不清楚,您提到要更改道具的一种方式。在运行时文件而无需重新部署以及您所说的数据库凭据的一种方式。怎么可能。
  • @vishalgajera 好的,只是一个小查询,我们不能在 webapp 运行时更改数据库字符串吗?
  • 你可以改变它,但是你已经改变了属性文件!!意味着现在获取该道具的更新。文件,您必须重新部署它以获取对 web 应用程序的更改。这就是为什么我建议您如果不这样做,然后将其存储到数据库中。

标签: java tomcat web-applications properties-file


【解决方案1】:

您可以将<context> 添加到 tomcat/conf/server.xml(在本例中为 linux 路径):

<Context docBase="/home/yourusername/tomcat/assests" path="/assets" />

如果您使用的是 Windows:

<Context docBase="C:\path\to\myapp\assets" path="/assets" />

然后您就可以像访问 webapp 中的任何其他资源一样访问它(例如:/assets/myappConfig.property)。

例如,如果您使用 JDBC,您可以将连接属性存储在 Singleton 中并从那里请求它,并且该类可以负责对该文件的更改检查。

【讨论】:

  • 你能分享一下单身人士的小例子吗?
  • 我只建议不要混淆新旧配置。只需每隔 X 分钟使用此类读取配置文件,如果更改,请设置正确的连接详细信息。
  • 方法你能详细说明一下吗,我认为在这种情况下,属性文件的路径需要硬编码,对吗?
  • @SchoolBoy 是的,从技术上讲,您为“硬编码”属性文件路径提供了别名。 (实际上,在属性中设置路径并不是硬编码。)
猜你喜欢
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 2012-01-07
  • 1970-01-01
相关资源
最近更新 更多