2016-09-27 3 views
1

ich den Befehl -Dspring.application.json='{"foo":{"bar":"spam"}}' von der Feder docs zu verwenden, versuchen aber, während es in IntelliJ des Fahrbefehl sieht es nicht immer mit Could not resolve placeholdermit spring.application.json für application.properties im Frühjahr Boot-Datei

Ich habe versucht, Verwenden Sie die Systemvariable und die Java Ops-Variable ohne Erfolg.

was ich habe Code weise: Application.properties:

testing=${foo.bar} 

Application.java

@SpringBootApplication 
@ComponentScan 
public class Application extends RepositoryRestMvcConfiguration { 

    @Value("${testing:}") 
    private String input; 

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

    @Bean 
    public BatchDetails set() { 
     System.out.println("input: " + input); 
     return new BatchDetails("Test", "Test2"); 
    } 
} 

IntelliJ VM Optionen: -Dspring.application.json='{"foo":{"bar":"spam"}}'

IntelliJ Umgebungsvariablen: SPRING_APPLICATION_JSON = '{"foo":{"bar":"spam"}}'

beim Start der Anwendung ich die folgenden Stack-Trace erhalten:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'foo.bar' in string value "${foo.bar}" 
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:204) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:178) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.core.env.AbstractPropertyResolver.resolveNestedPlaceholders(AbstractPropertyResolver.java:195) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:87) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:60) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:531) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$1.getProperty(PropertySourcesPlaceholderConfigurer.java:132) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$1.getProperty(PropertySourcesPlaceholderConfigurer.java:129) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:84) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.core.env.PropertySourcesPropertyResolver.getPropertyAsRawString(PropertySourcesPropertyResolver.java:70) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.core.env.AbstractPropertyResolver$1.resolvePlaceholder(AbstractPropertyResolver.java:207) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:153) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:204) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:178) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:808) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1027) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
... 80 common frames omitted 

ist ich nur die Konfiguration an der falschen Stelle für diese Umsetzung zu arbeiten?

Antwort

1

Sie können die application.properties von Spring so nicht "erweitern". Sowohl alle Werte von dort als auch die System-Ebene spring.application.json werden in Ihre Environment Variable geladen und Sie können von dort auf foo.bar zugreifen. im Grunde

So ..

Frühling testing von Ihren application.properties nimmt einen voll ausgebildet Wert erwartet, dann nimmt es die JSON von Ihrem Systemvariable, erwartete einen voll ausgebildet Wert und verschmilzt sie in Environment.

Jetzt können Sie tun

@Autowired 
private Environment env; 

env.getProperty("testing"); 
env.getProperty("foo.bar"); 

//OR 
@Value(${"foo.bar"}) 
private String valueFromFooBar 
+0

so habe ich versucht, die '@ Value' und es immer noch mag es nicht. Ich versuche wirklich, PCFs VCAP_SERVICES lokal zu simulieren, also möchte ich nicht Umgebung verwenden. Ich werde nur den Wert -DFull.name.of.service = lokal verwenden. – sherring

Verwandte Themen