Я пытаюсь получить некоторые свойства из файла application.properties, и мой код выглядит следующим образом:
Основной класс приложения:
package it.mysite;
@SpringBootApplication
@EnableTransactionManagement
public class MailSenderApplication {
public static void main(String[] args){
ConfigurableApplicationContext context = SpringApplication.run(MailSenderApplication.class, args);
System.out.println("*****");
for (String name : context.getBeanDefinitionNames()) {
System.out.println(name);
}
System.out.println("*****");
new MySendService().sendReport();
}
}
Мой класс обслуживания:
package it.mysite.service;
@Service
public class MySendService {
@Value("${mail.fc.to}")
private String[] to;
@Value("${mail.fc.subject}")
private String subject;
@Autowired ReportService reportEmailService;
@Autowired MailProperties mailProperties;
public void sendReport(){
if (mailProperties.getTo().length > 0) {
}
}
Класс, в котором я получаю свойства:
package it.mysite.properties;
@Component
@ConfigurationProperties("mail.fc")
public class MailProperties {
private String[] to;
public String[] getTo(){
return to;
}
}
Файл конфигурации:
# Email config
[email protected]
mail.fc.subject=My subject
Все свойства @Autowired - это null, а также свойства @Value (я тоже пытался получить их таким образом). Когда я распечатываю свой контекст, я вижу эти классы в списке bean-компонентов, и, насколько я знаю, моя иерархия пакетов верна, так в чем может быть проблема?
РЕДАКТИРОВАТЬ Хорошо, я получил предложение из повторяющегося вопроса, и я изменил свой основной код класса следующим образом: Основной класс приложения:
package it.mysite;
@SpringBootApplication
@EnableTransactionManagement
public class MailSenderApplication {
@Autowired MySendService mySendService;
public static void main(String[] args){
ConfigurableApplicationContext context = SpringApplication.run(MailSenderApplication.class, args);
System.out.println("*****");
for (String name : context.getBeanDefinitionNames()) {
System.out.println(name);
}
System.out.println("*****");
new MailSenderApplication().boot();
}
private void boot(){
mySendService.sendReport();
}
}
Но у меня такая же ошибка. Разве это не было предложением?
OMG, спасибо. Это указывало мне в правильном направлении. Если вы напишете свой комментарий в качестве ответа, я выберу его как правильный.
@esseara Вы не можете написать это как ответ, потому что вопрос был закрыт как дубликат. По сути, это та же проблема (то есть вы не можете использовать таким образом ключевое слово new). Вы можете перейти к другому вопросу и проголосовать за наиболее полезный ответ.
Вы все еще делаете ту же ошибку: используете new для создания Spring beans. Не надо. Получите компонент Spring из Spring
context. Или лучше используйте бегунок: docs.spring.io/spring-boot/docs/current/reference/htmlsingle /…