SpringBoot 任务调度(定时任务) 异步任务调度 与日志管理

1.任务调度

1.1在启动类中添加@EnableScheduling注解,开启定时任务
在这里插入图片描述
1.2定时任务业务类 加注解 @Component被容器扫描
启动后每2秒执行此任务一次
在这里插入图片描述
1.3测试
在这里插入图片描述

2.异步任务调度

2.1在启动类中添加@EnableAsync 注解,开启异步任务调度
2.2编写异步任务类

   @Component
public class AsyncTaskTest {

    @Async//标明此方法是异步任务调度方法
    /**
     * 开启一个异步任务调度
     */
    public Future<String> async1() throws InterruptedException {
        long start = System.currentTimeMillis();
        Thread.sleep(2000);
        System.out.println("异步任务1执行了。。。");
        long end = System.currentTimeMillis();
        long time = end-start;
        System.out.println("异步任务1执行的时间:"+time);
        return new AsyncResult<String>("任务1");
    }
     @Async
    /**
     * 开启一个异步任务调度
     */
    public Future<String> async2() throws InterruptedException {
        long start = System.currentTimeMillis();
        Thread.sleep(2000);
        System.out.println("异步任务2执行了。。。");
        long end = System.currentTimeMillis();
        long time = end-start;
        System.out.println("异步任务2执行的时间:"+time);
        return new AsyncResult<String>("任务2");
    }

    @Async
    /**
     * 开启一个异步任务调度
     */
    public Future<String> async3() throws InterruptedException {
        long start = System.currentTimeMillis();
        Thread.sleep(2000);
        System.out.println("异步任务3执行了。。。");
        long end = System.currentTimeMillis();
        long time = end-start;
        System.out.println("异步任务3执行的时间:"+time);
        return new AsyncResult<String>("任务3");
    }
}

2.3编写controller测试类

@RestController
public class AscynController {

    private Logger logger = LoggerFactory.getLogger(Logger.class);

    @Autowired
    private AsyncTaskTest taskTest;

    @GetMapping("/api/async")
    public JsonData testAsync() throws InterruptedException {

        long start = System.currentTimeMillis();
        //异步任务调度同时执行三个任务而普通任务调度需要一个一个的执行
        Future<String> task1 = taskTest.async1();
        Future<String> task2 = taskTest.async2();
        Future<String> task3 = taskTest.async3();

        Thread.sleep(2000); //模拟网络请求 ,休眠2秒钟

        while(true){
            if(task1.isDone()&&task2.isDone()&&task3.isDone()){
                break;  //异步任务内部所有接口都执行完毕,终止循环
            }
        }
        long end = System.currentTimeMillis();
        long time = end - start;
        System.out.println("总的执行时间:"+time);

        logger.info("异步任务调度");

        return JsonData.buildSuccess(time);
    }
}

2.4测试结果
在这里插入图片描述

3.日志管理

将日志打印到文件
1.1添加日志配置文件,文件路径与application.properties同级

<?xml version="1.0" encoding="UTF-8" ?>


<!--日志配置文件-->
<configuration>

    <appender name="consoleApp" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
            </pattern>
        </layout>
    </appender>

    <appender name="fileInfoApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder>
            <pattern>
                %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
            </pattern>
        </encoder>
        <!-- 滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 路径 -->
            <fileNamePattern>app_log/log/app.info.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <appender name="fileErrorApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>
                %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
            </pattern>
        </encoder>

        <!-- 设置滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 路径 -->
            <fileNamePattern>app_log/log/app.err.%d.log</fileNamePattern>

            <!-- 控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,
            且<maxHistory>1,则只保存最近1个月的文件,删除之前的旧文件 -->
            <MaxHistory>1</MaxHistory>

        </rollingPolicy>
    </appender>
    <root level="INFO">
        <appender-ref ref="consoleApp"/>
        <appender-ref ref="fileInfoApp"/>
        <appender-ref ref="fileErrorApp"/>
    </root>
</configuration>

3.2日志调用

@RestController
public class LogController {

    private Logger logger = LoggerFactory.getLogger(Logger.class);

    @GetMapping("/api/log")
    public Object testLog(){
        logger.error("这是一个error级别日志");
        logger.info("这是一个info级别日志");
        logger.debug("这是一个debug级别日志");
        logger.warn("这是一个warn级别日志");

        return JsonData.buildSuccess();
    }
}

3.3测试结果
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot整合Quartz任务定时调度可以使用Quartz框架来实现。Quartz是一个由Java编写的开源任务调度框架,可以通过设置触发器来定义作业的运行规则和运行时间。在SpringBoot中,我们可以通过配置依赖和编写相应的代码来实现定时任务的调度。 具体的步骤如下: 1. 引入Quartz的相关依赖。可以参考中的博客链接,其中有详细的依赖配置和示例代码。 2. 创建一个JobDetail对象,用于描述要执行的任务的核心逻辑。可以使用Quartz提供的Job接口来实现自己的任务逻辑。 3. 创建一个Trigger对象,用于设置触发任务执行的规则。可以设置任务的触发时间、周期等。 4. 创建一个Scheduler对象,用于管理任务的调度。可以注册多个JobDetail和Trigger到Scheduler中。 5. 启动Scheduler,开始执行任务。 在SpringBoot中,可以通过使用@Configuration和@EnableScheduling注解来开启定时任务的自动配置。然后可以使用@Scheduled注解来标记定时执行的方法。 例如: ``` @Configuration @EnableScheduling public class SchedulerConfig { @Bean public SchedulerFactoryBean schedulerFactoryBean() { return new SchedulerFactoryBean(); } @Bean public JobDetail jobDetail() { return JobBuilder.newJob(MyJob.class).withIdentity("myJob").storeDurably().build(); } @Bean public Trigger trigger() { SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever(); return TriggerBuilder.newTrigger().forJob(jobDetail()) .withIdentity("myTrigger") .withSchedule(scheduleBuilder) .build(); } } ``` ``` @Component public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 任务执行的逻辑 } @Scheduled(cron = "0 0 12 * * ?") // 每天中午12点执行一次 public void scheduledMethod() { // 定时任务的逻辑 } } ``` 以上是一种在SpringBoot中使用Quartz实现定时任务的方式,你可以根据自己的需求来选择合适的方式来实现定时任务的调度。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值