Весенний загрузочный файл свойств чтения возвращает нуль - PullRequest
0 голосов
/ 07 мая 2018

Здравствуйте, у меня есть следующая структура проекта.

enter image description here

Я хочу сохранить свой файл свойств вне моего фляги, так что, если я изменю какое-либо свойство, оно будет отражено автоматически. Мой файл свойств содержит ip других серверов, которые могут измениться, поэтому я хочу, чтобы мой файл свойств оставался вне моего фляги.

Моя папка resources содержит все мои файлы свойств, включая application.propeties.

Я использую следующий фрагмент для чтения из моего файла свойств.

server_1 = new Properties ();

server_1.load(PropertyReader.class.getClassLoader().getResourceAsStream("resources/server_1.properties"));

server_2 = new Properties();

server_2.load(PropertyReader.class.getClassLoader().getResourceAsStream("resources/server_2.properties"));

я тоже пробовал

server_2.load(PropertyReader.class.getClassLoader().getResourceAsStream("server_2.properties"));


server_2.load(PropertyReader.class.getClassLoader().getResourceAsStream("/server_2.properties"));

Но это дает мне следующую ошибку:

Caused by: java.lang.NullPointerException: null

Я прошел по ссылке this , поэтому я создал папку resources на уровне src, но я не могу понять это поведение.

Спасибо

1 Ответ

0 голосов
/ 07 мая 2018

Чтобы продолжить с моего комментария, если это jar, где вы разделяете ресурсы вне jar / bundle, вам нужна папка resources в пути к классу jar.

Для исполняемого jar-файла в моем проекте я добавил запись пути к классу (относительно местоположения jar-файла) в запись манифеста моего jar-файла с помощью плагина maven-jar:

<plugin> 
   <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
       <archive> 
         <manifest> 
           <addClasspath>true</addClasspath> 
           <mainClass>....</mainClass> 
         </manifest> 
         <manifestEntries> 
           <Class-Path>../resources/</Class-Path> 
         </manifestEntries> 
       </archive> 
    </configuration> 
</plugin> 

Проверьте файл MANIFEST.MF для добавленной записи. Затем вы можете использовать в своем коде напрямую (без папки ресурсов):

PropertyReader.class.getClassLoader().getResourceAsStream("server_1.properties");

Для ваших юнит-тестов вы можете напрямую указать в src / resources.

UPDATE:

Только что заметил, что вы упомянули, что это приложение с весенней загрузкой. Обратитесь к этому. Используйте профили, чтобы указать местоположение папки ресурсов. Так будет аккуратнее.

Файлы свойств чтения Spring Boot, основанные на classpath arg

...