Я пытаюсь создать консольное приложение с Spring framework.Spring and @Value аннотация
У меня есть класс аннотированный @SpringBootApplication
:
@SpringBootApplication
public class LoaderApplication {
public static void main(String[] args) {
SpringApplication.run(LoaderApplication.class, args);
}
}
И класс аннотированный @Component
@Component
public class ElasticLoader implements CommandLineRunner {
// Elastic properties
@Value("${elasticTransportAddress:#{null}}")
private String elasticTransportAddress;
private static final Logger log = LoggerFactory.getLogger(ElasticLoader.class);
@Override
public void run(String... arg) throws Exception {
if (!(elasticTransportAddress != null && elasticTransportAddress.isEmpty())) {
log.error("[elasticTransportAddress] is not defined in property file");
return;
}
log.info("-> ElasticLoader.run");
}
}
Как вы можете видеть, в этом классе я пытаюсь придать свойству elasticTransportAddress
значение по @Value
аннотацию , но после запуска моего приложения я вижу, что свойство elasticTransportAddress
остается неназначенным.
Что я пропустил?
Позвольте мне добавить несколько заметок:
Я хочу использовать приложение с различными файлами свойств. В этом случае я создал xml-context-config.xml
с таким содержанием:
<beans profile="companies">
<!-- allows for ${} replacement in the spring xml configuration from the
application-default.properties, application-dev files on the classpath -->
<context:property-placeholder
location="classpath:companies.properties"
ignore-unresolvable="true" />
<!-- scans for annotated classes in the com.env.dev package -->
<context:component-scan base-package="ru.alexeyzhulin" />
</beans>
и использовать конфигурационный файл companies.properties
, который я поместил в
Моя конфигурация запуска с описанным профиля:
И этот профиль включен, так как I c ульд видеть в журналах приложения:
2017-01-15 00:10:39.697 INFO 10120 --- [ main] ru.alexeyzhulin.LoaderApplication : The following profiles are active: companies
Но когда я определяю свойство в application.properties
и использовать профиль по умолчанию, свойство elasticTransportAddress
становится назначено.
Ваш класс ElasticLoader определяется как весенний боб? –
Нет, это не так. Не могли бы вы привести пример, как это сделать? –
@SasiKathimanda, если это аннотируется как '@ Component', то это должен быть весенний боб ... –