У меня есть класс, помеченный @Component
, который используется для инициализации свойств конфигурации application.yml. Служба classe использует свойство конфигурации. Но иногда мой экземпляр класса Service создается до класса Configuration, и я получаю нулевое значение свойства в классе обслуживания, его случайный не конкретный шаблон.
Класс инициализации конфигурации ..
@Component
public class ConfigInitializer implements InitializingBean {
private static final Logger log = LoggerFactory.getLogger(ConfigInitializer.class);
@Autowired
ProxyConfig proxyConfig;
/*@PostConstruct
public void postConstruct(){
setProperties();
}
*/
@Override
public void afterPropertiesSet() {
setProperties();
}
private void setSystemProperties(){
log.debug("Setting properties...");
Properties props = new Properties();
props.put("PROXY_URL", proxyConfig.getProxyUrl());
props.put("PROXY_PORT", proxyConfig.getProxyPort());
System.getProperties().putAll(props);
}
}
@Component
@ConfigurationProperties(prefix = "proxy-config")
public static class ProxyConfig {
private String proxyUrl;
private String proxyPort;
public String getProxyUrl() {
return proxyUrl;
}
public void setProxyUrl(String proxyUrl) {
this.proxyUrl = proxyUrl;
}
public String getProxyPort() {
return proxyPort;
}
public void setProxyPort(String proxyPort) {
this.proxyPort = proxyPort;
}
}
Класс обслуживания ..
@Service("receiverService")
public class ReceiverService {
private static final Logger logger = LoggerFactory.getLogger(ReceiverService.class);
private ExecutorService executorService = Executors.newSingleThreadExecutor();
@Autowired
public ReceiverService() {
initClient();
}
private void initClient() {
Future future = executorService.submit(new Callable(){
public Object call() throws Exception {
String value = System.getProperty("PROXY_URL"); **//Here I am getting null**
logger.info("Values : " + value);
}
});
System.out.println("future.get() = " + future.get());
}
}
Выше Класс обслуживания получает null
значения String value = System.getProperty("PROXY_URL")
Когда я использую @DependsOn
аннотация на Сервисный класс, работает отлично. Насколько я знаю, я знаю, что у Spring нет определенного порядка создания бина.
Я хочу знать, если я использую @Configuration
вместо @Component
в классе ConfigInitializer
, как показано ниже, Spring инициализирует ConfigInitializerкласс перед другими бобами?.
@Configuration
public class ConfigInitializer implements InitializingBean {
//code here
}