【问题标题】:Running an application automatically every day每天自动运行一个应用程序
【发布时间】:2014-08-08 14:21:35
【问题描述】:

我有一个测试 Web 服务的应用程序。我想每天下午 6 点运行这个应用程序

我想知道是否可以自动做到这一点?

*供参考:此应用程序是使用 Java、JUnit 参数化测试、maven... 开发的, 操作系统:Windows 7 *

【问题讨论】:

  • 操作系统?它是一个独立的应用程序吗?
  • 操作系统:Windows 7,是的,它是一个独立的应用程序,但它可以访问数据库和 Web 服务。

标签: java maven parameterized


【解决方案1】:

您可以在 windows 中创建 schedule task 并在 UNIX 中创建 cron job 来触发测试 Web 服务的应用程序。

【讨论】:

  • 所以我必须编写一个脚本来执行“maven install”?
  • @Mouna 在使用命令提示符启动应用程序时,您必须通过计划任务启动应用程序。
  • 在 Mac OS X 上,您可以在 cronlaunchd 之间进行选择。苹果更喜欢launchd,而一些用户更喜欢cron。请参阅 Apple 的 doc on scheduled jobsthis answer
  • 如果您希望程序短暂运行然后退出,这是最好的选择。如果您希望一个进程始终挂起并通过 Java 代码控制它何时运行,那么服务是您的最佳选择。
【解决方案2】:

你可以这样做

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int delay = hour < 18 ? 18-hour : 18- (hour-18);
System.out.println("Current Hour : "+hour+"\t"+"Delay For Next Mail: "+delay);
executor.scheduleAtFixedRate(new Runnable() {
     @Override
     public void run() {
          System.out.println("run invoked");
             //do something
            }
        }, delay , 24, TimeUnit.HOURS);

只要服务器启动并运行。

首先创建一个ScheduledExecutorService的实例,提供方法

public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
                                                  long initialDelay,
                                                  long period,
                                                  TimeUnit unit);

据此计算延迟、周期和TimeUnit以及要执行的任务

【讨论】:

  • 这会增加内存开销,应用程序会一直加载到内存中,如果你重启系统,你的应用程序将会丢失。
  • 但是我的程序没有在服务器上运行
  • @Vishrant if you restart your system, your application will be lost.这取决于你的实现和部署
  • @Mouna 如果你要实现一个独立的 jar,你必须实现 jar 每天在指定时间运行的逻辑,直到任务完成
  • @M.Sharma 如果你设置了定时任务,它会被不丢失的windows管理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 2012-10-30
  • 2019-02-17
  • 2019-06-02
相关资源
最近更新 更多