2016-01-14 29 views
1

我有一個SpringBootApplication,我想從屬性文件中讀取一個值。Spring將屬性文件中的值讀入@SpringBootApplication類

我@SpringBootApplication類是這樣的:

@SpringBootApplication 
@ComponentScan(basePackages = "it.test") 
@PropertySource("classpath:application.properties") 
public class Application { 
     private static Logger log = LogManager.getLogger(); 

     @Value("${server.modem.delay}") 
     private int modemSmsDelay; 

    @Order(Ordered.HIGHEST_PRECEDENCE) 
    @Bean(initMethod = "start", destroyMethod = "stop") 
    public Service smsService() {  
     settings(); 
     Service service = Service.getInstance();  
     return service; 
    } 
     private void settings() {  
      log.debug("Delay per invio sms " + modemSmsDelay +"ms");  
      Settings.gatewayDispatcherYield = modemSmsDelay; 
    } 
} 

不幸的是,在所謂的「設置」方法屬性modemSmsDelay的值爲0。另,如果在我的application.properties文件,它是1000

在其他我的應用程序的一部分,我可以讀取值沒有問題。

==== UPDATE =====

我解決了這個問題。事實上,我的代碼工作,不需要@PostConstruct,使@Value標籤工作,如果它是在幾個circustances可以理解。 我在Spring配置中遇到問題,無法執行所有註釋,例如@ PostConstruct,@ Autowire等。 我從Spring的日誌中注意到了這一點,其中彈出了一條警告消息。

+2

你並不需要添加ComponentScan或PropertySource註解,作爲SpringBootApplication註釋已經包含了他們。 – Andonaeus

+0

檢查'application.properties'的路徑是否正確,並且傳遞了正確的屬性名稱'server.modem.delay' – 11thdimension

+0

他從構造函數中調用它。 –

回答

1

嘗試在您的settings()方法上放置@PostConstruct註釋,而不是從構造函數調用它。這將導致該方法在構造函數退出後自動調用。

+0

另外,如果我使用@PostConstruct註釋標註settings()方法,則不會調用該方法。 – drenda

+0

只是爲了puntualize,我沒有從構造函數調用設置()。 – drenda

0

這個工作對我來說:

@Resource私人環境的環境;

import javax.annotation.Resource; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.springframework.boot.context.web.SpringBootServletInitializer; 
import org.springframework.context.annotation.Bean; 
import org.springframework.core.env.Environment; 

import my.beautiful.code.SomeClient; 

@SpringBootApplication 
public class Application extends SpringBootServletInitializer { 

    @Resource 
    private Environment environment; 

    @Override 
    protected SpringApplicationBuilder configure(final SpringApplicationBuilder application) { 
    return application.sources(Application.class); 
    } 

    @Bean(name = "someClient") 
    public SomeClient loadSomeClient() { 
     SomeClient bean = new SomeClient(); 
     ... 
     bean.setHeaderContentType(environment.getProperty("contentType")); 
     bean.setRestUrl(environment.getProperty("rest.url")); 
     ... 
     return bean; 
    } 

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

} 

在我application.properties

contentType=some_value 
rest.url=http://localhost/.... 

HTH

相關問題