Прочитать общий внешний файл свойств в Java Webapp и обычном приложении Java

Я знаю, что этот вопрос ответил много раз с самым полезным ответом, как показано ниже,

Где разместить и как читать файлы ресурсов конфигурации в сервлет-приложении?

Однако у нас есть специальное требование, как показано ниже,

  • Webapp будет развернут в tomcat.
  • Обычное java-приложение в форме .jar будет помещено в папку /myapp
  • Файл myappConfig.property будет помещен в /myapp

Структура каталога на клиентской машине

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

В основном myapp.jar и myapp.war будут обращаться к значениям соединения sql db для подключения базы данных MySql и операций db.

Доступ к myappConfig.property из myapp.jar → Работает отлично

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

Может ли кто-нибудь помочь/предложить, как реализовать,

Доступ к файлу myappConfig.property из mywebapp,

при изменении времени выполнения в файле myappConfig.property не требуется перенаправление myapp.war

Спасибо за вашу помощь заранее.

изменить

Ниже приведены шаги, по которым мы хотим доставить проект клиенту.

  • Ниже приведен каталог приложений

    /myapp
      /myapp.jar
      /assests/myappConfig.property
      /tomcat/webapps/myapp.war
    
  • упакуйте все в одном пакете с помощью некоторого инструмента для упаковки.

  • Запустите этот пакет на клиентской машине в любом месте и будет иметь такую ​​же структуру каталогов, что и выше

  • Здесь я не хочу жестко кодировать любое местоположение в webapp или tomcat для "/assests/myappConfig.property"

  • Обычное приложение Java Я могу прочитать файл свойств, но для wepapp я не понимаю, как это сделать?

Ответ 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" />

И затем вы можете получить к нему доступ, как и любой другой ресурс в вашем веб-приложении (например:/assets/myappConfig.property).

Если вы используете JDBC, например, вы можете сохранить свойства соединения в Singleton и запросить его оттуда, и этот класс может позаботиться об изменениях в этом файле.