Java 当服务器准备就绪时,如何在Spring中执行方法?

Java 当服务器准备就绪时,如何在Spring中执行方法?,java,spring,spring-boot,Java,Spring,Spring Boot,我有以下问题:我正在为一个基于web的小型私有项目使用SpringBoot,我希望Spring在启动web服务时调用它。“开始”是指“当我的应用程序准备好处理请求时” 我已经尝试实现了,但没有成功,因为事件发生得很早(即,在嵌入式服务器准备好处理请求之前)。此外,中提到的选项也没有解决此问题 我现在的问题是:在服务器完成启动并准备好处理请求后,是否有可能让Spring执行某些操作 编辑(回应Daniel的回答): 问题是我需要一些注入的属性来进行webservice调用,而且由于注入静态值在sp

我有以下问题:我正在为一个基于web的小型私有项目使用SpringBoot,我希望Spring在启动web服务时调用它。“开始”是指“当我的应用程序准备好处理请求时”

我已经尝试实现了,但没有成功,因为事件发生得很早(即,在嵌入式服务器准备好处理请求之前)。此外,中提到的选项也没有解决此问题

我现在的问题是:在服务器完成启动并准备好处理请求后,是否有可能让Spring执行某些操作

编辑(回应Daniel的回答):

问题是我需要一些注入的属性来进行webservice调用,而且由于注入静态值在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);
    }

}
第二次编辑:

尽管这个问题解决了一个非常类似的问题,但我似乎无法将其注入到对象中,因为它需要具有以下形式的构造函数(org.springframework.boot.SpringApplication,[Ljava.lang.String;)


另外,不必创建spring.factories文件,只需使用注释即可解决此问题。

如果我了解您的问题所在,您可以在应用程序启动后立即调用主应用程序上的Web服务

public static void main(String[] args) {

        new SpringApplication(Application.class).run(args);
        //call the webservice for you to handle...
    }

我不确定这是否是您想要的…

在您的组件中,您可以使用
@PostConstruct
注释

@Component
public class StartupListener {


    @Autowired
    private URLProvider urlProvider;
    @Value("${server.port}")
    private int port;
    @Value("${project.name}")
    private String projectName;

    @PostConstruct
    public final void init() {
        RestTemplate template = new RestTemplate();
        String url = uriProvider.getWebserviceUrl(this.projectName);
        template.put(url, null);
    }

}
一旦bean被初始化并发生自动连接,就会触发此操作。

@Component
  @Component
  public class StartUp implements ApplicationListener<WebServerInitializedEvent> {

  private WebClient webClient;

  @Override
  public void onApplicationEvent(WebServerInitializedEvent event) {

    String baseUrl = "http://url.com"
    webClient = WebClient.create(baseUrl);
    executeRestCall(baseUrl+"/info");
  }

  void executeRestCall(String uri) {
    try {
      webClient.get()
          .uri(uri)
          .exchange()
          .block();
    } catch (Exception e) {
      log.error("Request failed for url - {}",uri, e);
    }
  }}
公共类启动实现ApplicationListener{ 私人网络客户端网络客户端; @凌驾 ApplicationEvent上的公共无效(WebServerInitializedEvent事件){ 字符串baseUrl=”http://url.com" webClient=webClient.create(baseUrl); ExecuterTestCall(baseUrl+“/info”); } void executestcall(字符串uri){ 试一试{ webClient.get() .uri(uri) .exchange() .block(); }捕获(例外e){ 错误(“请求url-{}”,uri,e失败); } }}
Hmm,您的应用程序是否使用Spring MVC作为其web部件或其他框架,或者根本不使用框架?我使用WebMVC和Vaadin作为UI框架。问题的可能重复之处在于,我需要一些注入属性来进行webservice调用,而静态注入就我所知并不真正起作用。您能否提供一个示例?从spring文档中,您可以执行如下请求:publicstaticvoidmain(字符串args[]){RestTemplate RestTemplate=new RestTemplate();Page Page=RestTemplate.getForObject(“”,Page.class”);System.out.println(“名称:”+Page.getName());System.out.println(“关于:”+page.getAbout();System.out.println(“电话:+page.getPhone());System.out.println(“网站:+page.getWebsite());}请查看我的编辑(不幸的是,无法硬连接所有变量)不幸的是,这不起作用,因为调用此方法时应用程序未完全启动。您能解释一下“未完全启动”是什么意思吗?完全启动意味着(如问题中所述)服务器已准备好处理请求。因为应用程序将从Web服务回调。