springboot整合schedule/qartz

1、整合schedule
(1)jar

<!-- 添加 Scheduled 坐标 -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context-support</artifactId>
</dependency>

(2)job

@Component
public class ScheduledDemo {

    @Scheduled(cron="0/5 * * * * ?")
    public void scheduleMethod(){
        System.out.println("定时出发schedule"+new Date());
    }
}

(3)启动类

@SpringBootApplication
@EnableScheduling
public class Springboot1Application {
	public static void main(String[] args) {
		SpringApplication.run(Springboot1Application.class, args);
	}
}

2、整合quartz
(1)jar

<!-- Quartz 坐标 -->
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.1</version>
			<exclusions>
				<exclusion>
					<artifactId>slf4j-api</artifactId>
					<groupId>org.slf4j</groupId>
				</exclusion>
			</exclusions>
		</dependency>

		<!-- Sprng tx 坐标 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
		</dependency>

(2)quartzConfig

@Configuration
public class QuartzConfig {
    /**
     * 1.创建 Job 对象
     */
    @Bean
    public JobDetailFactoryBean jobDetailFactoryBean(){
        JobDetailFactoryBean factory = new JobDetailFactoryBean();
        //关联我们自己的 Job 类
        factory.setJobClass(QuartzDemo.class);
        return factory;
    }
    /**
     * 2.创建 Trigger 对象
     * 简单的 Trigger
     */
    @Bean
    public SimpleTriggerFactoryBean
    simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
        SimpleTriggerFactoryBean factory = new
                SimpleTriggerFactoryBean();
        //关联 JobDetail 对象
        factory.setJobDetail(jobDetailFactoryBean.getObject());
        //该参数表示一个执行的毫秒数
        factory.setRepeatInterval(2000);
        //重复次数
        factory.setRepeatCount(5);
        return factory;
    }
    /**
     * 3.创建 Scheduler 对象
     */
    @Bean
    public SchedulerFactoryBean
    schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean){
        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        //关联 trigger
        factory.setTriggers(simpleTriggerFactoryBean.getObject());
        return factory;
    }
}

(3)job

public class QuartzDemo implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("quartz------------"+new Date());
    }
}

(4)启动类

@SpringBootApplication
@EnableScheduling
public class Springboot1Application {

	public static void main(String[] args) {
		SpringApplication.run(Springboot1Application.class, args);
	}
}
EDF(Earliest Deadline First)RMS(Rate-Monotonic Scheduling)是常用的实时系统进程调度算法,下面是它们的代码改进示例: EDF算法改进: 原始代码: ``` void edf_scheduler() { while (1) { int min_deadline = INT_MAX; int next_process = -1; for (int i = 0; i < num_processes; i++) { if (!processes[i].completed && processes[i].deadline < min_deadline) { min_deadline = processes[i].deadline; next_process = i; } } if (next_process == -1) { break; } execute_process(next_process); } } ``` 改进后的代码: ``` void edf_scheduler() { while (1) { int min_deadline = INT_MAX; int next_process = -1; for (int i = 0; i < num_processes; i++) { if (!processes[i].completed && processes[i].deadline < min_deadline) { if (processes[i].arrival_time <= current_time) { // 添加判断进程是否到达 min_deadline = processes[i].deadline; next_process = i; } } } if (next_process == -1) { break; } execute_process(next_process); } } ``` 改进后的代码增加了一个判断,判断进程是否到达,如果未到达就不会被调度执行。这样可以避免出现进程还未到达就被调度执行的情况。 RMS算法改进: 原始代码: ``` void rms_scheduler() { while (1) { int min_period = INT_MAX; int next_process = -1; for (int i = 0; i < num_processes; i++) { if (!processes[i].completed && processes[i].period < min_period) { min_period = processes[i].period; next_process = i; } } if (next_process == -1) { break; } execute_process(next_process); processes[next_process].executed++; if (processes[next_process].executed == processes[next_process].execution_time) { processes[next_process].completed = true; } } } ``` 改进后的代码: ``` void rms_scheduler() { while (1) { int min_period = INT_MAX; int next_process = -1; for (int i = 0; i < num_processes; i++) { if (!processes[i].completed && processes[i].period < min_period) { if (processes[i].arrival_time <= current_time) { // 添加判断进程是否到达 min_period = processes[i].period; next_process = i; } } } if (next_process == -1) { break; } execute_process(next_process); processes[next_process].executed++; if (processes[next_process].executed == processes[next_process].execution_time) { processes[next_process].completed = true; } } } ``` 改进后的代码同样增加了一个判断,判断进程是否到达。如果未到达就不会被调度执行。这样可以避免出现进程还未到达就被调度执行的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值