Проблема с загрузкой стороннего фляги внутри приложения весенней загрузки - PullRequest
0 голосов
/ 08 апреля 2020

Я создаю приложение Spring Boot, по деловой причине мне нужно импортировать сторонний jar, который также считывает некоторый параметр конфигурации из файла с именем application.properties .

I определили все конфиги, необходимые для моего приложения и стороннего фляги в файле весенней загрузки application.properties .

Когда я запускаю это приложение из Eclipse, все хорошо, но когда я запускаю он извне с помощью команды, код внутри jar не может найти файл application.properties и выдает исключение;

java -jar myapp.jar

, когда я изменяю его на следующую команду и поместив файл application.properties вне фляги, он работает;

java -Xbootclasspath/a: -jar myapp.jar

Как заставить его работать без размещения приложения . свойства файл вне банки?

некоторая дополнительная информация; Jar третьей стороны - это библиотека lib, включенная в мою зависимость от maven. Внутри стороннего кода есть место, где он загружает application.properties файл, но выдает исключение.

    Properties cfg = new Properties();
    FileInputStream is = null;

    URL url = DemoApplication.class.getResource("/");
    if (null != url) {

        String configPath = url.getFile()+ "application.properties";
        try {
            is = new FileInputStream(configPath);
            cfg.load(is); // It fails here
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

Исключение:

file:/D:/Temp/target/myapp.jar!/BOOT-INF/classes!/application.properties FAILED load config.java.io.FileNotFoundException: file:\D:\Temp\target\myapp.jar!\BOOT-INF\classes!\application.properties (The filename, directory name, or volume label syntax is incorrect) 

Ответы [ 3 ]

0 голосов
/ 08 апреля 2020

Если ваше стороннее приложение зависит от myApp от maven, вы можете загрузить его из classpath:

Properties cfg = new Properties();
cfg.load(DemoApplication.class.getClassLoader().getResourceAsStream("application.properties"));
0 голосов
/ 08 апреля 2020

Этот сторонний jar использует FileInputStream с URL-адресом, который начинается с чего-то, производного от Class.getResource (...).

Это никогда не сработает с файлами jar.

Что может работать, чтобы пропустить FileInputStream, но используйте Class.getResourceAsStream (...):

InputStream is = DemoApplication.class.getResourceAsStream("/application.properties")
0 голосов
/ 08 апреля 2020

Если это проект maven, попробуйте использовать команду (mvn package), а затем запустите jar, созданный в целевой папке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...