如何在控制器内调用调度程序

时间:2017-04-11 09:56:42

标签: java spring rest spring-boot controller

我有一个休息控制器,在REST控制器内部,我想调用一个方法,每隔5秒更新一个数组列表ob对象。我每五秒更新一次列表,这样我就要检查一个请求参数数组列表数据。 下面是我的控制器类

@RestController
public class HomeController {

List<Model1> list1= new ArrayList<Model1>();
List<Model2> list2= new ArrayList<Model2>();

@Autowired
@Qualifier("restTemplateapi")
private RestTemplate restTemplateapi;

@Bean
public RestTemplate restTemplateapi() {


    RestTemplateBuilder builderapi = new RestTemplateBuilder();
    RestTemplate buildapi = builderapi.build();

    return buildapi;
}



@Scheduled(fixedRate=5000)
public void get_list2(){
    list2 = Arrays.asList(restTemplatestreetapi.getForObject("http:dataurl for list2", Model2[].class));
    System.out.println(list2.get(0).getStatus()+ " is the staus of the first element:" );





}






@RequestMapping(value="/api",produces={MediaType.APPLICATION_JSON_VALUE},method=RequestMethod.GET)
public ResponseEntity<Map<String, Object>> getlist1(@RequestParam("lat")double lat,@RequestParam("lon") double lon,@RequestParam("id") int id){






    list1=get_api(lat,lon,id);


    status status_object=new status();
    Map <String,List<Model1>> map1= new HashMap<String,List<Model1>>();
    List<status> statuslist=new ArrayList<status>();
    status_object.setCode("hi");
    status_object.setMessage("good api call");
    statuslist.add(status_object);





    streetapilist.put("data",map1);
    Map<String,List<status>> map2=new HashMap<String,List<status>>();
    statusmap.put("status", map2);



    Map<String, Object> combinedMap = new HashMap<String, Object>();

    combinedMap.putAll(map1);
    combinedMap.putAll(map2);






    return new ResponseEntity<Map<String, Object>>(combinedMap,HttpStatus.OK);
}
@ResponseBody   

public List<Model1>  get_api(double lat,double lon,int id,String email){
    List<Model1> list1 = Arrays.asList(restTemplatestreetapi.getForObject("http:dataurl for list1, Model1[].class));

    return list1;



}

}

因此,在我的控制器中,我每隔5秒就要更新一次list2,因为无论何时对控制器进行调用,都要检查list2,然后继续返回list1。

但是现在我的sheduled方法get_list2甚至没有被触发,并且没有任何东西在控制台中打印。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

@EnableScheduling确保创建后台任务执行程序。没有它,没有任何安排。

示例:

@SpringBootApplication
@EnableScheduling
public class Application {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class);
    }
}