java quartz timer_Java定时任务调度工具Timer Quartz

-----------------------------------Timer

8691158318bc88b52c2786c3e4201d62.png

75e5a8ef1b0c008fe3736fedb415be8d.png

PS:Timer是 jdk中的;Quartz是第三方的

6d38ecd43ef32bd86abc385fbda36633.png

ab0a870bcfad8415a19fd1ba3719a16e.png

00c43170704686aea62d1b4188f51045.png

ee2538e2e5746f09a4d6455bf0fb2db1.png

4bef814163403d0e23e2cddb1bba085b.png

PS:也即是返回执行任务时候的时间

4ff302fd8adb8a844d389f4eb5ef858f.png

6962ccabed154c651c2217464d138d12.png

273815a5c2ffd3318711f3232938f215.png

881b9e9799fdacaf63904103825bd31b.png

943ffcaefa008391e1c80de936de74f6.png

0b9ec7baaf090da96d322ebf5ab616dd.png

b8fc06216cb10495c788bc74e8ad06e6.png

c18bca15baeb8f8e4d33b8147fbb9cbc.png

538b862bf2c2f46607185c3cfcf2b58d.png

---------------------------------------------------一个综合的例子

5e4601ea5c315a4a9244fbf7cb8c6b22.png

03a0a16e2eb09088ef694028bab60151.png

importjava.text.SimpleDateFormat;importjava.util.TimerTask;public class DancingRobot extendsTimerTask{

@Overridepublic voidrun() {//获取最近一次任务执行的时间,将其格式化

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("最近执行任务的时间:"+sdf.format(scheduledExecutionTime()));//获取最近一次任务执行的时间,将其格式化

System.out.println("开心的跳舞");

}

}

importjava.util.Timer;importjava.util.TimerTask;public class WaterRobot extendsTimerTask{privateTimer timer;publicWaterRobot(Timer timer) {this.timer =timer;

}//最大容量为5L

private Integer bucketCapacity = 0;

@Overridepublic voidrun() {//灌水直到桶水满为止

if(bucketCapacity<5){

System.out.println("机器人加1L水");

bucketCapacity++;

}else{

System.out.println("返回取消的任务数 before:"+timer.purge());

cancel();//停止当前的机器人的执行

System.out.println("机器人停止加水");

System.out.println("返回取消的任务数 after:"+timer.purge());

System.out.println("当前水容量:"+bucketCapacity+"L");try{

Thread.sleep(2000);

}catch(Exception e) {

e.printStackTrace();

}

timer.cancel();//停止所有的机器人操作

}

}

}

importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Timer;public classMain {public static voidmain(String[] args) {

Timer timer= newTimer();//获取当前时间

Calendar calendar =Calendar.getInstance();

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前时间:"+sdf.format(calendar.getTime()));

DancingRobot dr= newDancingRobot();

WaterRobot wr= newWaterRobot(timer);

timer.schedule(dr, calendar.getTime(),2000);

timer.scheduleAtFixedRate(wr, calendar.getTime(),1000);

}/*当前时间:2018-06-08 18:11:24

最近执行任务的时间:2018-06-08 18:11:25

开心的跳舞

机器人加1L水

机器人加1L水

机器人加1L水

最近执行任务的时间:2018-06-08 18:11:27

开心的跳舞

机器人加1L水

机器人加1L水

最近执行任务的时间:2018-06-08 18:11:29

开心的跳舞

返回取消的任务数 before:0

机器人停止加水

返回取消的任务数 after:1

当前水容量:5L*/}

c239dbf83f4e0137e88079f5bcce52f5.png

e2d696bede00270bcdfb692618a4644f.png

23a14437cbd713f658d038b2d38ebc2e.png

------------------------------------Quartz

b2d470252118a9ca134983fa5b3c7b8c.png

4ce66a8a2eaf87e8dd45662592c0c704.png

8508dbaacc1f839b0f7634b030fc34f9.png

e1500d2fd1fe5cdd0d63c40c1998a8ec.png

cfb52b8ca9ba0b403d9447a7199dc61b.png

c3b5f0964c343939564f8e03a3535ed5.png

827a53f3013e6879c229ab889756db5e.png

ddd3903818219fd438716c589f52c6e8.png

d739fb67429d0f03ab25da99fb561e36.png

1776e776d589071a90d89520718a6b3c.png

-------------------------------------Hello world-----------------------

packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.Job;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;public class HelloJob implementsJob{public void execute(JobExecutionContext arg0) throwsJobExecutionException {//打印当前的执行时间

Date date = newDate();

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前execution时间为:"+sdf.format(date));//编写具体的业务逻辑

System.out.println("hello world");

}

}

packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.JobBuilder;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.SimpleScheduleBuilder;importorg.quartz.SimpleTrigger;importorg.quartz.TriggerBuilder;importorg.quartz.impl.StdSchedulerFactory;public classHelloScheduler {public static void main(String[] args) throwsSchedulerException {//创建一个jobdetail实例,将该实例与hellojob class绑定

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远

SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建schedule实例

StdSchedulerFactory sfact = newStdSchedulerFactory();

Scheduler scheduler=sfact.getScheduler();

scheduler.start();//打印当前的执行时间

Date date = newDate();

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前时间为:"+sdf.format(date));

scheduler.scheduleJob(jobDetail, trigger);

}

}

当前时间为:2018-06-14 09:57:36

当前execution时间为:2018-06-14 09:57:36

hello world

当前execution时间为:2018-06-14 09:57:38

hello world

当前execution时间为:2018-06-14 09:57:40

hello world

当前execution时间为:2018-06-14 09:57:42

hello world

当前execution时间为:2018-06-14 09:57:44

673dfb783ab53194ec80bd3f39adeb6e.png

47763aaa49ea72605eee4a66fd33a7b9.png

15cd5ca4ea90a61bc1a0d46f844e980e.png

918f6197fbc7b935c27f1cf8569cbaa7.png

533db3cd0d75ff444218af723aed5059.png

public classHelloScheduler {public static void main(String[] args) throwsSchedulerException {//创建一个jobdetail实例,将该实例与hellojob class绑定

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();

System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());

System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());

System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远

SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建schedule实例

StdSchedulerFactory sfact = newStdSchedulerFactory();

Scheduler scheduler=sfact.getScheduler();

scheduler.start();//打印当前的执行时间

Date date = newDate();

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前时间为:"+sdf.format(date));

scheduler.scheduleJob(jobDetail, trigger);/*jobDetail的名字:myJob

jobDetail的group:group1

jobDetail的jobclass:com.beet.test.HelloQuartz.HelloJob

当前时间为:2018-06-14 10:10:25

当前execution时间为:2018-06-14 10:10:26

hello world*/}

}

6d0369a23cf9d697108ecc6660995838.png

ee70bf30f9e092fd7e017919c517d953.png

dbdbee187b2b860ed419d8616637b866.png

fd3c7300a9dc4d5c3bea76adce6ebdc3.png

---------------------------------------------------------使用JobDataMap传参数

packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.Job;importorg.quartz.JobDataMap;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;importorg.quartz.JobKey;importorg.quartz.TriggerKey;public class HelloJob implementsJob{public void execute(JobExecutionContext context) throwsJobExecutionException {//打印当前的执行时间

Date date = newDate();

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//编写具体的业务逻辑//System.out.println("hello world");

JobKey key =context.getJobDetail().getKey();

TriggerKey trKey=context.getTrigger().getKey();

JobDataMap dataMap=context.getJobDetail().getJobDataMap();

JobDataMap tDataMap=context.getTrigger().getJobDataMap(); //从中获取Map//String JobMsg = dataMap.getString("message");//Float jobFloatValue = dataMap.getFloat("FloatJobValue");

String triggerMsg = tDataMap.getString("message");

Float triggerDoubleValue= tDataMap.getFloat("DoubleTriggerValue");

System.out.println("当前execution时间为:"+sdf.format(date));

System.out.println("我的job name和group是:"+key.getName()+":"+key.getGroup());

System.out.println("我的trigger name和group是:"+trKey.getName()+":"+trKey.getGroup());//System.out.println("job message是:"+JobMsg);//System.out.println("FloatJobVAlue是:"+jobFloatValue);

System.out.println("trigger message:"+triggerMsg);

System.out.println("FloatJobVAlue是:"+triggerDoubleValue);

}

}

packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.JobBuilder;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.SimpleScheduleBuilder;importorg.quartz.SimpleTrigger;importorg.quartz.TriggerBuilder;importorg.quartz.impl.StdSchedulerFactory;public classHelloScheduler {public static void main(String[] args) throwsSchedulerException {//创建一个jobdetail实例,将该实例与hellojob class绑定

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").usingJobData("message", "hello myJob1").usingJobData("FloatJobValue", 3.14f).build();

System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());

System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());

System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远

SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").usingJobData("message", "hello myTrigger").usingJobData("DoubleTriggerValue", 2.0D).startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建schedule实例

StdSchedulerFactory sfact = newStdSchedulerFactory();

Scheduler scheduler=sfact.getScheduler();

scheduler.start();//打印当前的执行时间

Date date = newDate();

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前时间为:"+sdf.format(date));

scheduler.scheduleJob(jobDetail, trigger);/*jobDetail的名字:myJob

jobDetail的group:group1

jobDetail的jobclass:com.beet.test.HelloQuartz.HelloJob

当前时间为:2018-06-14 10:10:25

当前execution时间为:2018-06-14 10:10:26

hello world*/}

}

5e7df6d0f5c5651a11bfcc5391e0c531.png

f68af4f7fc554b2850a6e806ad5dfb1b.png

d93c14bcba17e4aa8cc58b3ce17607a6.png

716b839ea154a58c3906c5d7e470836c.png

207735b582ee1de13b7cc37a0a488a6b.png

packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.JobBuilder;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.SimpleScheduleBuilder;importorg.quartz.SimpleTrigger;importorg.quartz.TriggerBuilder;importorg.quartz.impl.StdSchedulerFactory;public classHelloScheduler {public static void main(String[] args) throwsSchedulerException {//创建一个jobdetail实例,将该实例与hellojob class绑定

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();/*System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());

System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());

System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());*/

//打印当前的执行时间

Date date = newDate();

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前时间为:"+sdf.format(date));

date.setTime(date.getTime()+3000);//开始3s后执行

Date endDate= newDate();

endDate.setTime(endDate.getTime()+6000);//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远

SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startAt(date).endAt(endDate).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建schedule实例

StdSchedulerFactory sfact = newStdSchedulerFactory();

Scheduler scheduler=sfact.getScheduler();

scheduler.start();

scheduler.scheduleJob(jobDetail, trigger);/*jobDetail的名字:myJob

jobDetail的group:group1

jobDetail的jobclass:com.beet.test.HelloQuartz.HelloJob

当前时间为:2018-06-14 10:10:25

当前execution时间为:2018-06-14 10:10:26

hello world*/}

}

packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.Job;importorg.quartz.JobDataMap;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;importorg.quartz.JobKey;importorg.quartz.Trigger;importorg.quartz.TriggerKey;public class HelloJob implementsJob{public void execute(JobExecutionContext context) throwsJobExecutionException {//打印当前的执行时间

Date date = newDate();

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前execution时间为:"+sdf.format(date));//编写具体的业务逻辑//System.out.println("hello world");

Trigger trigger=context.getTrigger();

System.out.println("start time is "+trigger.getStartTime());

System.out.println("end time is "+trigger.getEndTime());

}

}

当前时间为:2018-06-14 14:14:32

当前execution时间为:2018-06-14 14:14:35

start time is Thu Jun 14 14:14:35 CST 2018

end time is Thu Jun 14 14:14:38 CST 2018

当前execution时间为:2018-06-14 14:14:37

start time is Thu Jun 14 14:14:35 CST 2018

end time is Thu Jun 14 14:14:38 CST 2018

261656fc9eeb036a790b4b168f32ffbe.png

3969bfe8d46530765a6d93bfde7b51fc.png

packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.JobBuilder;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.SimpleScheduleBuilder;importorg.quartz.SimpleTrigger;importorg.quartz.TriggerBuilder;importorg.quartz.impl.StdSchedulerFactory;public classHelloScheduler {public static void main(String[] args) throwsSchedulerException {//创建一个jobdetail实例,将该实例与hellojob class绑定

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();/*System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());

System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());

System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());*/

//打印当前的执行时间

Date date = newDate();

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前时间为:"+sdf.format(date));

date.setTime(date.getTime()+3000);//开始3s后执行

Date endDate= newDate();

endDate.setTime(endDate.getTime()+6000);//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远 被endDate 覆盖掉了执行计划

SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startAt(date).endAt(endDate).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建schedule实例 定时 定频率

StdSchedulerFactory sfact = newStdSchedulerFactory();

Scheduler scheduler=sfact.getScheduler();

scheduler.start();

scheduler.scheduleJob(jobDetail, trigger);/*jobDetail的名字:myJob

jobDetail的group:group1

jobDetail的jobclass:com.beet.test.HelloQuartz.HelloJob

当前时间为:2018-06-14 10:10:25

当前execution时间为:2018-06-14 10:10:26

hello world*/}

}

7afdf600237a7360cf858ac43d67983f.png

b34e426c3947696d5d966a64aee43c10.png

bdd33e810912f4d65dc1814631a49db8.png

PS:

,表示或的关系

-,至 5-7 五到七

*,每秒钟

/, 每分钟没小时 0/5 没隔5分钟(..)出发一次

?,不关心

#,代表第.. 6#3 每月第三周的周五(6代表周五)

L,代表最后

97dc1c0d7ee7146b0c57c42fc3db4b5c.png

19519f1ac1ed979802bd00a9597e6a23.png

7ffc63f03fefee167204226f2cdd0839.png

packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.CronScheduleBuilder;importorg.quartz.CronTrigger;importorg.quartz.JobBuilder;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.SimpleScheduleBuilder;importorg.quartz.TriggerBuilder;importorg.quartz.impl.StdSchedulerFactory;public classHelloScheduler {public static void main(String[] args) throwsSchedulerException {//创建一个jobdetail实例,将该实例与hellojob class绑定

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();/*System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());

System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());

System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());*/

//打印当前的执行时间

Date date = newDate();

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前时间为:"+sdf.format(date));

date.setTime(date.getTime()+3000);//开始3s后执行

Date endDate= newDate();

endDate.setTime(endDate.getTime()+6000);//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远

CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *")).build();//创建schedule实例

StdSchedulerFactory sfact = newStdSchedulerFactory();

Scheduler scheduler=sfact.getScheduler();

scheduler.start();

scheduler.scheduleJob(jobDetail, trigger);

}

}

packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.Job;importorg.quartz.JobDataMap;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;importorg.quartz.JobKey;importorg.quartz.Trigger;importorg.quartz.TriggerKey;public class HelloJob implementsJob{public void execute(JobExecutionContext context) throwsJobExecutionException {//打印当前的执行时间

Date date = newDate();

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前execution时间为:"+sdf.format(date));//编写具体的业务逻辑

System.out.println("hello world");/*Trigger trigger = context.getTrigger();

System.out.println("start time is "+trigger.getStartTime());

System.out.println("end time is "+trigger.getEndTime());*/}

}

d4acc885a232b95ff19ecb4c85382fb2.png

b014a05022b976d4d829577f6d34a87f.png

93f4ebd89731e6b904dbb5bf1b38f2fb.png

PS: 这两种方式推荐使用std的方式。

db2e5ee82abad6ff9c8d88200aaf53cd.png

56ace738b2f785e19a2abcc142d2997a.png

77be103497a54a11bf78dff92fb554b2.png

packagecom.beet.test.HelloQuartz;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.quartz.CronScheduleBuilder;importorg.quartz.CronTrigger;importorg.quartz.JobBuilder;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.SimpleScheduleBuilder;importorg.quartz.TriggerBuilder;importorg.quartz.impl.StdSchedulerFactory;public classHelloScheduler {public static void main(String[] args) throwsSchedulerException, InterruptedException {//创建一个jobdetail实例,将该实例与hellojob class绑定

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();/*System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());

System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());

System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());*/

//打印当前的执行时间

Date date = newDate();

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println("当前时间为:"+sdf.format(date));

date.setTime(date.getTime()+3000);//开始3s后执行

Date endDate= newDate();

endDate.setTime(endDate.getTime()+6000);//创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远

CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *")).build();//创建schedule实例

StdSchedulerFactory sfact = newStdSchedulerFactory();

Scheduler scheduler=sfact.getScheduler();

scheduler.start();

Date scheduleDate=scheduler.scheduleJob(jobDetail, trigger);

System.out.println("开始执行时间为:"+sdf.format(scheduleDate));//scheudle执行2s挂起

Thread.sleep(2000);

scheduler.standby();//挂起//挂起3s重新启动

Thread.sleep(3000);

scheduler.start();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值