首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Schedule不定时触发服务

@Schedule不定时触发服务
EN

Stack Overflow用户
提问于 2018-11-20 08:12:06
回答 1查看 62关注 0票数 0

我试图以固定速率和初始延迟来调度来自spring-boot的服务,

在部署之后,我预计read方法应该在5秒后每隔10秒执行一次,但控制台中没有显示任何内容。下面是我的主要应用程序类

代码语言:javascript
复制
@SpringBootApplication
@EnableScheduling
public class ArgusAPIApplication {

    @Value("${proxy.host}")
    private String proxyHost;
    @Value(("${proxy.port}"))
    private int proxyPort;
    @Value(("${readTimeout}"))
    private int readTimeout;
    @Value(("${connectTimeout}"))
    private int connectTimeout;


    public static void main(String[] args) {
        SpringApplication.run(ArgusAPIApplication.class, args);
    }

    @Bean
    public RestTemplate restTemplate() {
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        Proxy proxy= new Proxy(Type.HTTP, new InetSocketAddress(proxyHost,proxyPort));
        requestFactory.setProxy(proxy);
        requestFactory.setReadTimeout(readTimeout);
        requestFactory.setConnectTimeout(connectTimeout);
        return new RestTemplate(requestFactory);
    }


}

我希望服务以固定的时间间隔进行调度,下面给出了带有@Scheduled注释的方法的服务类

代码语言:javascript
复制
@Service
    public class targusTractoscalingScheduler {

        private static final Logger logger = LogManager.getLogger(targusTractoscalingScheduler.class);

        @Autowired
        targusController targusController;

        @Autowired RestTemplate restTemplate;

        private boolean firstTime = true;

        @Value("aaaaaaaaaaaaaaaa")
        private String apiKey;

        @Value("xxxxxxxxxxxxxxxxxxxxxxx")
        private String applicationKey;

        @Value("${ddUrl}")
        private String ddUrl;

        @Value("/filter/instance")
        private String ddInstanceApiPath;

        @Value("/stop/job/{Tractoscalinggroup}")
        private String ddStopJobPath;

        /**
         * Scheduler method that will run at every predefined interval.
         */

        @Scheduled(initialDelayString = "5000", fixedRateString = "10000")
        public void targusAsgAndCmdbASgCompare() {
            List<targusData> targusDatas = targusController.gettargusData();
            if (CollectionUtils.isEmpty(targusDatas)) {
                logger.debug("Empty list obtained from targus, so simply exiting from method");
                return;
            }
            processtargusData(targusDatas);
            firstTime = false;
        }

但是服务没有触发,springboot文档也给出了类似的实现。

EN

回答 1

Stack Overflow用户

发布于 2018-11-20 08:45:33

下面是一个示例:

代码语言:javascript
复制
@EnableScheduling
@SpringBootApplication
public class MyExampleCronApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyExampleCronApplication.class, args);
    }

    @Scheduled(initialDelay=5000,fixedRate=10000)
    public void test() {
        System.out.println(Date.from(Instant.now()).getSeconds());
    }
}

输出:

注:我通过将调度的方法放入服务中来分离代码,然后它就可以找到工作了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53384434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档