تكوين شروط تشغيل وتعطيل جدولة المهام في Spring Boot
بالتأكيد، يمكنك جعل @EnableScheduling
مشروطًا بناءً على خاصية في التطبيق، وكذلك يمكن تعطيل التحكم بالمتحكمات بناءً على الخصائص. هذا سيتطلب بعض الضبط في تكوين التطبيق.
لبداية، سنقوم بتكوين التطبيق لجعل @EnableScheduling
مشروطًا بناءً على خاصية في ملف التهيئة (application.properties
أو application.yml
). يمكنك تعريف خاصية جديدة، مثل scheduling.enabled
, ثم استخدامها لتحديد ما إذا كان يجب تمكين جدولة المهام أم لا. ستبدو ملفات التهيئة الخاصة بك مثل هذا:
-
تنفيذ جمل if-else-if في PHP14/04/2024
-
Angular 2: Optional Input Parameters02/04/2024
في ملف application.properties
:
propertiesscheduling.enabled=true
أو في ملف application.yml
:
yamlscheduling:
enabled: true
ثم، في تكوين التطبيق، يجب عليك التحقق من قيمة هذه الخاصية وتفعيل @EnableScheduling
بناءً على ذلك. هذا يمكن تحقيقه عبر استخدام تكوين شرطي بواسطة مكونات التكوين في Spring Boot. يمكنك تحديد الشرط عبر تنفيذ Condition
المخصص.
فيما يلي كيف يمكن تحقيق ذلك:
javaimport org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class SchedulingCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// قم بقراءة قيمة الخاصية من بيئة التطبيق
String schedulingEnabled = context.getEnvironment().getProperty("scheduling.enabled");
// إذا كانت القيمة موجودة وتساوي "true"، فقم بتمكين جدولة المهام
return schedulingEnabled != null && schedulingEnabled.equalsIgnoreCase("true");
}
}
ثم قم بتكوين التطبيق لاستخدام هذا الشرط:
javaimport org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
@Configuration
@EnableScheduling
@Conditional(SchedulingCondition.class)
public class SchedulingConfig {
// يمكنك هنا تكوين أي شيء آخر إذا كنت بحاجة إلى ذلك
}
بهذا التكوين، ستتم تمكين جدولة المهام فقط إذا كانت الخاصية scheduling.enabled
مضبوطة على “true” في ملفات التهيئة.
أما بالنسبة لتعطيل المتحكمات بناءً على الخصائص، فيمكنك اتباع نفس النهج. يمكنك تعريف خاصية جديدة مثل controllers.enabled
واستخدامها في شرط لتمكين أو تعطيل تكوين المتحكمات بناءً عليها.
بتطبيق هذه الإجراءات، ستكون قادرًا على تكوين التطبيق بحيث يمكنه تشغيل المهام المجدولة فقط في بيئات محددة بناءً على الخصائص التي تقوم بتعيينها.
المزيد من المعلومات
بالطبع، يمكنني تقديم المزيد من المعلومات حول كيفية تخصيص تشغيل وتعطيل جدولة المهام والمتحكمات في تطبيق Spring Boot بناءً على الخصائص.
أولاً، دعني أوضح كيفية تعطيل المتحكمات بناءً على الخصائص. يمكنك القيام بذلك باستخدام نفس النهج الذي استخدمناه لتعطيل جدولة المهام. يجب عليك تعريف شرط جديد يحدد ما إذا كان يجب تمكين أو تعطيل المتحكمات، ثم استخدام هذا الشرط في تكوين التطبيق. هنا مثال على كيفية القيام بذلك:
أولاً، قم بتعريف شرط جديد يحدد ما إذا كان يجب تمكين المتحكمات أم لا:
javaimport org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class ControllersCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// قراءة قيمة الخاصية من بيئة التطبيق
String controllersEnabled = context.getEnvironment().getProperty("controllers.enabled");
// إذا كانت القيمة موجودة وتساوي "false"، فقم بتعطيل المتحكمات
return controllersEnabled == null || !controllersEnabled.equalsIgnoreCase("false");
}
}
ثم، استخدم هذا الشرط في تكوين التطبيق لتمكين أو تعطيل المتحكمات بناءً على قيمة الخاصية:
javaimport org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@EnableWebMvc
@Conditional(ControllersCondition.class)
public class WebConfig {
// تكوينات إضافية إذا لزم الأمر
}
بهذا التكوين، ستتم إما تمكين المتحكمات إذا كانت قيمة الخاصية controllers.enabled
غير موجودة أو تساوي “true”، أو تعطيلها إذا كانت تساوي “false”.
أما بالنسبة للمزيد من المعلومات حول جدولة المهام في Spring Boot، يُمكنك أيضًا استخدام الإعلان عن المهام المجدولة بناءً على شروط معينة. على سبيل المثال، يمكنك استخدام تعبيرات SpEL (Spring Expression Language) في التعليمات البرمجية لتحديد ما إذا كان يجب تشغيل المهمة أم لا. لهذا الغرض، يُمكنك استخدام الشرط @Conditional
مع تعبير SpEL. سأوضح ذلك في الأمثلة التالية:
javaimport org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
@Configuration
@EnableScheduling
public class SchedulingConfig {
@Bean
@Conditional(SchedulingCondition.class) // استخدام الشرط لتحديد متى يجب تنفيذ المهمة
public MyTask myTask() {
return new MyTask();
}
}
@Component
public class MyTask {
@Scheduled(fixedRateString = "${task.interval}") // استخدام SpEL لتحديد تردد التكرار
public void doSomeBackendJob() {
/* تنفيذ المهمة هنا */
}
}
في هذا المثال، يتم استخدام تعبير SpEL ${task.interval}
لتحديد تردد تكرار المهمة، ويُمكن تعيين قيمة هذا التعبير في ملف التهيئة مثل application.properties
أو application.yml
. يُمكنك تخصيص هذا التكوين حسب احتياجاتك لتحقيق التشغيل وفقًا للشروط التي تحددها.