Spring boot jar не читает / не разбирает корневую папку application.properties - PullRequest
0 голосов
/ 01 мая 2018

Положение

У меня толстый .jar загрузочного приложения Spring. Я перенес свою конфигурацию с помощью файла application.properties. Этот файл находится в той же папке, что и .jar, и я запускаю .jar из командной строки из той же папки (с помощью команды "java -jar $ jarFileName").

Затем выдается исключение:

nested exception is org.springframework.beans.TypeMismatchException: 
Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is 
java.lang.NumberFormatException: For input string: "${elasticsearch.port}"

Как видите, вместо чтения значения из файла свойств, он просто устанавливает строку как текст в аннотации @Value, которая выглядит следующим образом:

@Value("${elasticsearch.port}")
private int elkPort;

Класс, в котором это происходит, помечен @Component. Согласно документации Spring: внешняя конфигурация , пружина должна прочитать файл application.properties вне банки.

Когда тот же файл application.properties помещается в src/main/resources, он работает нормально, поэтому файл конфигурации кажется правильным.

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

РЕДАКТИРОВАТЬ 1 Я также попытался запустить его с --spring.config.location=file:application.properties и --spring.config.location=file:/full/path/to/application.properties, но с тем же результатом, что и выше.

РЕДАКТИРОВАТЬ 2: попытка пути к классу Также пробовал classpath вместо file, так же, как команды выше, но file заменено на classpath. Наконец попробовал без того, так что просто --spring.config.location=/path/to/file; опять как с относительным, так и с полным путем к application.properties. Все попытки дали один и тот же результат / исключение.

РЕДАКТИРОВАТЬ 3 Мое аннотированное приложение:

@SpringBootApplication
public class ApplicationName {

    public static void main(String[] args) {
        SpringApplication.run(ApplicationName.class, args);
    }
}

РЕДАКТИРОВАТЬ 4 Попытался добавить PropertySourcesPlaceholderConfigurer следующим образом:

@Configuration
public class PropertyConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}

А затем для каждого @Value я добавил значение по умолчанию; он по-прежнему разрешается только к значениям по умолчанию вместо application.properties значений.

Ответы [ 3 ]

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

Я только что вынул свое application.properties из проекта Eclipse Spring Boot, и оно не удалось. Затем я помещаю файл в папку cfg в корне проекта и добавляю аргумент программы:

--spring.config.location=cfg/application.properties

и снова заработало. Mayby, если вы попробуете относительный путь (без начального /) к файлу (без «file:»), он будет работать.

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

Хорошо, после некоторых трудностей, я нашел решение. Я был близок с PropertySourcesPlaceholderConfigurer, но еще не совсем там; теперь это полный класс:

@Configuration
public class PropertyConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        final PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer();

        ppc.setIgnoreResourceNotFound(true);

        final List<Resource> resources = new ArrayList<>();

        resources.add(new FileSystemResource("relative/path/to/application.properties"));

        ppc.setLocations(resources.toArray(new Resource[]{}));

        return ppc;
    }
}

EDIT

Чтобы продемонстрировать проблему, я создал хранилище, чтобы показать проблему, см. Здесь: https://github.com/Locitao/test-external-properties

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

Как сказано на упомянутой странице, вы должны указать внешний конфигурационный каталог

    $ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

Попробуйте без ключевого слова файла --spring.config.location = / полный / путь / application.properties

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