开发调度休息客户端

问题描述 投票:0回答:1

我正在尝试开发调度休息客户端。 任务是:

  1. 有Rest API
  2. 我想按计划发送 GET 请求

我创建了 Spring boot 应用程序:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class IntegrationApplication {
    public static void main(String[] args) throws IOException {
        SpringApplication.run(IntegrationApplication.class, args);
    }

}

我创建了调度程序配置:

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;

@Configuration
@EnableScheduling
@EnableAsync
@ConditionalOnProperty(name = "scheduler.enabled", matchIfMissing = true)
public class SchedulerConfig { }

我创建了向 REST API 发送请求的 Java 类:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Service
public class GetAllData {

    @Value("${server.url}")
    private String serverUrl;

    @Value("${security.oauth2.client.clientSecret}")
    private String clientSecret;

    private static RestClientGetExecute restClientGetExecute;

    public void get() {
        // Do send request 
    }
}

最后,我创建了 java 类来启动请求发送,正如我所期望的:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.ZonedDateTime;

@Component
public class TestEngine {
    private static GetAllData getAllData;
    @Scheduled(fixedDelay = 2000)
    public void getLocalDateTimeFixedDelay() throws InterruptedException {
        getAllData.get();
    }
}

但这不起作用。错误是:

java.lang.NullPointerException: Cannot invoke GetAllData.get()" because "TestEngine.getAllData" is null

您能帮我了解如何运行计划向 REST API 发送请求吗?

java spring rest schedule
1个回答
0
投票

问题是你的

TestEngine
Spring 没有任何东西可以确定它需要自动装配什么。字段或具有依赖关系的单个构造函数上没有
@Autowired
。除此之外,即使有
@Autowired
它也不起作用,因为无法注入
static
字段。

将您的

TestEngine
更改为类似这样的内容。将字段更改为
final
而不是
static
,并添加一个采用依赖项的构造函数。

Component
public class TestEngine {
    private final GetAllData getAllData;

    public TestEngine(GetAllData getAllData) {
      this.getAllData=getAllData;
    }

    @Scheduled(fixedDelay = 2000)
    public void getLocalDateTimeFixedDelay() throws InterruptedException {
        getAllData.get();
    }
}

这显然适用于

static
中的
GetAllData
字段以及也有
static
字段。

@Service
public class GetAllData {

    @Value("${server.url}")
    private String serverUrl;

    @Value("${security.oauth2.client.clientSecret}")
    private String clientSecret;

    private final RestClientGetExecute restClientGetExecute;

    public GetAllData(RestClientGetExecute restClientGetExecute) {
      this.restClientGetExecute=restClientGetExecute;
    }

    public void get() {
        // Do send request 
    }
}

如果在其他地方使用

static
作为应注入的依赖项,请将它们切换为构造函数参数。

© www.soinside.com 2019 - 2024. All rights reserved.