Я пытаюсь создать класс конфигурации, который загрузит свойства приложения из файла с помощью аннотации @PropertySource, но PropertySourcesPlaceholderConfigurer, похоже, не устанавливает местоположение, полученное из аннотации.Resolving placeholder в @PropertySource
@Configuration
@ComponentScan("com.just.a.test")
@PropertySources({
@PropertySource(value="file:C:\\tmp\\1.cfg"
, ignoreResourceNotFound=true)
})
public class TestConfig {
@Value("${just.a.string}")
String justAString;
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
return propertySourcesPlaceholderConfigurer;
}
}
файл свойства приложения является:
just.a.string=DOH
и им получает следующее исключение:
.... причиненного: java.lang.IllegalArgumentException: Не удалось разрешить placeholder 'just.a.string' в строковом значении "$ {just.a.string}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue (PropertyPlaceh olderHelper.java:174)
на org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders (PropertyPlaceholderHelper.java:126)
на org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders (AbstractPropertyResolver.java:204)
в орг .springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders (AbstractPropertyResolver.java:178)
в org.springframework.context.support.PropertySourcesPlaceholderConfigurer $ 2.resolveStringValue (PropertySourcesPlaceholderConfigurer.java:175)
в org.springframework.beans.factory. support.AbstractBeanFactory.resolveEmbeddedValue (AbstractBeanFactory.java:801)
at org.springframework.bea ns.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:955)
в org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:942)
на org.springframework.beans.factory. annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:533)
... 15 более
, как всегда, если я устанавливаю местоположение с помощью боб PropertySourcesPlaceholderConfigurer, все работает отлично.
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
propertySourcesPlaceholderConfigurer.setLocation(new FileSystemResource("c:\\tmp\\1.cfg"));
return propertySourcesPlaceholderConfigurer;
}
Я использую Spring 4.1.6-RELEASE и jdk 8.05.
благодарит заранее.
ОБНОВЛЕНИЕ 1
как упомянуто sivaprasadreddy.k.приведенный выше код работает отлично, я забыл, что в моем исходном коде я извлечение файла из виртуальной машины Java паров с использованием -
@PropertySource(value="file:#{systemProperties['config.path']}"
и пропусканием Jvm из параметров:
-Dconfig.path=C:\\tmp\\1.cfg
@Sotirios - им просто используя AnnotationConfigApplicationContext (Class), как так -
public static void main(String[] args) {
new AnnotationConfigApplicationContext(TestConfig.class);
}
UPDATE 2
в основном то, что им пытаются достичь это:
1) загрузить файл свойств с помощью Jvm параметров, которые его имя определяется как константный
а) если файл найден, то продолжить
b) иначе, если существует путь к файлу по умолчанию, который определен как константа, существует следующее:
c) else продолжить.
2) попытаться решить @value, используя свойство, которое его имя определяется как константный
а) если найден перейти
б) еще загрузить значения по умолчанию, используя константный.
Извините за пробелы. с редактором что-то не так.
Можете ли вы показать, как вы загружаете свой «TestConfig»? –
Можете ли вы удалить «ignoreResourceNotFound = true» и посмотреть, пытается ли загрузить ресурс? – minion
Я взял ваши фрагменты кода и протестировал с помощью Spring-4.1.6 и JDK 8 и отлично работает. Он разрешает и печатает «DOH», если я вывожу значение justAString. –