2016-04-18 11 views
1

Ich habe ein Problem mit Spring, ich muss eine Systemeigenschaft mit einer Anmerkung laden.Wie lädt man eine System-Eigenschaft im Frühling mit Anmerkungen?

Ich versuche, diesen Ansatz:

@Value("${mySystemProperty}") 
private String mySystemPropertyValue; 

Aber wenn ich dies machen:

System.out.println("mySystemPropertyValue="+mySystemPropertyValue); 
System.out.println("system.mySystemProperty="+System.getProperty("mySystemProperty")); 

Es gibt:

mySystemPropertyValue=null 
system.mySystemProperty=myValue 

Was ist los?

Dank

EDIT

ich alles versuchen, aber ich habe immer in einen Nullwert für jede Systemeigenschaft erhalten zurückzukehren.

ich auch versucht:

@Autowired 
private Environment environment; 

Aber die "Umwelt" Variable ist null ...

+2

Try this: http://stackoverflow.com/questions/6285978/is-there-any-syntax-like- systempropertiesenvironment-variable-name-to-g – rapasoft

+0

Wo wird das 'System.out' platziert? Auch ist der '@ Value' auf einer Spring Managed Bean oder nur eine normale Sache. –

+0

Ich habe versucht sowohl @Value ("# {systemProperties ['mySystemProperty']}") und @Value ("# {systemProperties.mySystemProperty}"), aber ich bekomme immer Null zurück. –

Antwort

2

Versuchen Sie so etwas wie:

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, proxyTargetClass = true) 
public class SecurityContextConfig extends WebSecurityConfigurerAdapter 
{ 
    @Value("#{systemProperties['your.system.property']}") 
    private String property; 
    ... 
} 
+0

Habe es versucht, aber es funktioniert nicht. –

1

Es scheint Ihre Konfigurationsklasse einige BeanFactoryPostProcessor enthält. Ich glaube, es ist PropertySourcesPlaceholderConfigurer, da Sie diese Bean benötigen, um Eigenschaften aufgelöst zu haben.

Eine Erklärung von Spring javadoc:

Special consideration must be taken for @Bean methods that return Spring BeanFactoryPostProcessor (BFPP) types. Because BFPP objects must be instantiated very early in the container lifecycle, they can interfere with processing of annotations such as @Autowired, @Value, and @PostConstruct within @Configuration classes. To avoid these lifecycle issues, mark BFPP-returning @Bean methods as static.

Deshalb @Autowired und @Value("#{systemProperties['your.system.property']}") nicht in der Config-Klasse arbeiten.


So Ihr Problem zu lösen, nur Methode machen, die PropertySourcesPlaceholderConfigurer statische oder fügen Sie eine solche Methode zurückgibt, wenn Sie es nicht

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

haben und sicherstellen, dass es nicht mehr nicht-statische BFpp-Rückkehr ist @Bean Methoden. Sie können BFPP-Beans auch in separate -Klasse verschieben.


UPDATE
einfache Anwendung demonstriert Verwendung von @Value innerhalb @Configuration

@Configuration 
public class SimpleJavaConfig { 

    @Value("${java.version}") 
    private String property; 

    public static void main(String[] args) throws IOException { 
     ApplicationContext app = new AnnotationConfigApplicationContext(SimpleJavaConfig.class); 
     System.out.println("|" + app.getBean("propertyBean") + "|"); 
    } 

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

    @Bean 
    public String propertyBean() { 
     return property; 
    } 
} 
+0

Danke für Ihre Antwort, aber ich verstehe nicht, wie ich die Eigenschaft mit der Bean PropertySourcesPlaceholderConfigurer lesen kann. Kannst du mir bitte eine Idee zeigen?Danke –

+0

@AlessandroC Sie müssen nicht mit 'PropertySourcesPlaceholderConfigurer' etwas besonderes machen. Fügen Sie es einfach dem Kontext hinzu und es werden Eigenschaftswerte aufgelöst. Diese Bean muss '@Value (" $ {mySystemProperty} ") ausführen. – Evgeny

+0

Ich habe die Bean wie Ihre Angabe hinzugefügt, aber wenn ich versuche, eine Variable mit @Value ("$ {my-property}") zu erstellen, gibt es immer noch null zurück ... Ich verstehe nicht warum! –

Verwandte Themen