Положение
У меня толстый .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
значений.