我是一个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;
}
}
不幸的是在名为" settings"如果在我的application.properties文件中,属性modemSmsDelay的值也为0。
在我的应用程序的其他部分,我可以毫无问题地阅读值。
====更新=====
我解决了这个问题。事实上我的代码是有效的,不需要@PostConstruct来使@Value标签工作,如果它在几个环境中是令人盼望的。 我在Spring配置中遇到了一个问题,它阻止了所有注释的执行,如@ PostConstruct,@ Autowire等。 我在日志中注意到了这一点,其中Spring打印了一条警告信息。
答案 0 :(得分:1)
尝试将@PostConstruct注释放在settings()方法上,而不是从构造函数中调用它。这将导致在构造函数退出后自动调用该方法。
答案 1 :(得分:0)
这对我有用:
@Resource private Environment environment;
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