هل هناك تنفيذ مثل كرون من ScheduledExecutorService في جافا؟
سؤال
ووScheduledExecutorService في جاوة هو سهل جدا لتكرار المهام مع أي فترات زمنية محددة أو تأخير الثابتة. كنت أتساءل إذا كان هناك شيء من هذا القبيل ScheduledExecutorService القائمة التي تمكنك من تحديد وقت من اليوم لجدولة المهمة في، بدلا من فاصل أي "أريد هذه المهمة لاطلاق النار في 10:00 كل يوم".
وأنا أعلم أنك يمكن تحقيق ذلك مع الكوارتز، لكنني أفضل عدم استخدام هذه المكتبة إذا أمكن (انها مكتبة كبيرة ولكن أنا أفضل أن يكن لديك التبعية لعدة أسباب).
نصائح أخرى
وقليلا تحولت مزيد من البحث حتى <لأ href = "http://ha-jdbc.github.io/apidocs/net/sf/hajdbc/util/concurrent/cron/CronExecutorService.html" يختلط = "noreferrer نوفولو "> CronExecutorService في HA-JDBC. ومن المثير للاهتمام، أن لديها الاعتماد على الكوارتز لفي CronExpression أ > الصف، ولكن هذا كل شيء. وهذا ليس سيئا للغاية.
تحديث: لقد إصلاح كسر الروابط إلى نقطة في الإصدارات الجديدة، ولكن أنا لا أعرف إذا كان هذا هو الاعتماد فقط أي أكثر من ذلك
وThreadPoolTaskScheduler، ويمكن استخدامها كلما إدارة موضوع خارجية ليست شرطا. داخليا، فإنه المندوبين إلى <ط> ScheduledExecutorService المثال. <ط> ThreadPoolTaskScheduler تنفذ الربيع <ط> TaskExecutor واجهة جدا، بحيث يمكن استخدام نسخة واحدة للتنفيذ غير متزامن وكذلك كما كان مقررا، ويحتمل أن تكون متكررة، وعمليات الإعدام.
وحيث كما CronTrigger () يأخذ في cronExpression <لأ href = "http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html" يختلط = "نوفولو noreferrer"> http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html
لمزيد من المعلومات حول هذا الحل تشير مستندات الربيع: <لأ href = "https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html" يختلط = "نوفولو noreferrer "> https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import java.util.Date;
public class CronTriggerSpringTest{
public static void main(String args[]){
String cronExpression = "0/5 * * * * *";
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.initialize();
scheduler.schedule(new Runnable() {
@Override
public void run() {
System.out.println("Hello Date:"+new Date());
}
}, new CronTrigger(cronExpression));
}
}
عند استخدام scheduleAtFixedRate التي تقدمها تأخير. لذا فإن تأخير يمكن أن يكون الفرق إلى 10 صباحا والفترة هو 24 ساعة. وهذا يمكن أن ينجرف قليلا، حتى مع جهاز توقيت لذلك ما يمكنك القيام به هو جدولة مهمة التي تضيف نفسها إلى ScheduledExecutorService مع تأخير المناسب في كل مرة.