【发布时间】:2015-07-01 16:55:10
【问题描述】:
我有以下问题:我正在将 Spring-Boot 用于一个基于 Web 的小型私有项目,并且我希望 Spring 在启动时调用 Web 服务。开始我的意思是“当我的应用程序准备好处理请求时”。
我已经尝试过实现ApplicationListenerContextRefreshedEvent>,但它不起作用,因为事件发生在早期(即在嵌入式服务器准备好处理请求之前)。 this question 中提到的选项也没有解决这个问题。
我现在的问题是:在服务器完成启动并准备好处理请求后,是否有可能告诉 Spring 执行某些操作?
编辑(回应丹尼尔的回答):
问题是我需要一些注入的属性来进行 web 服务调用,并且由于注入静态值在 spring 中不起作用,这种方法是没有选择的。
我的听众,这是我想要的,只是有点太早了,看起来像这样:
@Component
public class StartupListener implements ApplicationListener{
@Autowired
private URLProvider urlProvider;
@Value("${server.port}")
private int port;
@Value("${project.name}")
private String projectName;
@Override
public final void onApplicationEvent(ContextRefreshedEvent event) {
RestTemplate template = new RestTemplate();
String url = uriProvider.getWebserviceUrl(this.projectName);
template.put(url, null);
}
}
第二次编辑:
虽然this 问题解决了一个非常相似的问题,但我似乎无法注入对象,因为它需要有一个形式为 (org.springframework.boot.SpringApplication, [Ljava.lang.字符串;)。
此外,还希望无需创建 spring.factories 文件而是使用注释来解决它。
【问题讨论】:
-
嗯,您的应用程序是使用 Spring MVC 作为其 Web 部件还是其他框架或根本没有框架?
-
我正在使用 WebMVC 和 Vaadin 作为 UI 框架。
标签: java spring spring-boot