springboot-日志管理&任务调度

一、任务调度

  1. 定时任务的配置
    –schedule基本使用步骤:

    1)启动类里面 @EnableScheduling开启定时任务,自动扫描

    @SpringBootApplication
    @EnableScheduling   //开启 定时任务 自动扫描
    public class Springboot05Application {
        public static void main(String[] args) {
            SpringApplication.run(Springboot05Application.class, args);
        }
    }
    

    2)定时任务业务类 加注解 @Component被容器扫描
    3)定时执行的方法加上注解 @Scheduled(fixedRate=2000) 定期执行一次

    @Component
    public class TaskTest {
    
        @Scheduled(fixedRate = 2000)   //定时2秒执行一次
        public void test1(){
            System.out.println("任务调度1------" + new Date());
        }
    }
    
  2. 其他配置
    a、cron配置定时任务表达式https://tool.lu/crontab/
    b、fixedRate: 定时多久执行一次(上一次开始执行时间点后xx秒再次执行;)
    c、fixedDelay: 上一次执行结束时间点后xx秒再次执行
    d、fixedDelayString: 字符串形式,可以通过配置文件指定

    @Component
    public class TaskTest {
        @Scheduled(cron = "*/2 * * * * *")   //定时2秒执行一次
        public void test2(){
            System.out.println("任务调度2------" + new Date());
        }
    
        @Scheduled(fixedDelay = 3000)   //上一次执行结束时间点后3秒再次执行
        public void test3(){
            System.out.println("任务调度3------" + new Date());
        }
    
        @Scheduled(fixedDelayString = "3000")   //字符串形式,上一次执行结束时间点后3秒再次执行
        public void test4(){
            System.out.println("任务调度4------" + new Date());
        }
    
    }
    
  3. 配置异步定时任务

    a.启动类需加注解:@EnableAsync

    @SpringBootApplication
    //@EnableAsync   //异步定时任务
    public class Springboot05Application {
        public static void main(String[] args) {
            SpringApplication.run(Springboot05Application.class, args);
        }
    }
    

    b.增加Future 返回结果 AsyncResult(“task执行完成”);
    c.如果需要拿到结果 需要判断全部的 task.isDone()

    @RestController
    @RequestMapping("/api")
    public class AsyncController {
    
        @Autowired
        public AsyncTask asyncTask;
    
        @GetMapping("/async")
        public Object async() throws InterruptedException {
            long begin = System.currentTimeMillis();
            Future<String> future1 = asyncTask.test1();
            Future<String> future2 = asyncTask.test2();
            Future<String> future3 = asyncTask.test3();
    
            Thread.sleep(2000);
    
            while (true){
                if (future1.isDone() & future2.isDone() & future3.isDone()) {
                    break;         //异步接口内部都执行完毕,终止循环
                }
            }
            long end = System.currentTimeMillis();
    
            long time = end - begin;
            System.out.println("异步的总执行时间是:" + time);
            return JsonData.buildSuccess(time); //这调用了Json工具类
        }
    }
    

二、日志管理

  1. 日志介绍
    1.1、常用处理java的日志组件 slf4j,log4j,logback,common-logging 等
    1.2、logBack是在log4j基础的改良,但不能单独使用,可配合slf4j使用
    1.3、logBack核心对象
    Logger: 日志记录器
    Appender:指定日志输出目的地,可以是控制台或文件
    Layout: 日志布局,用于格式化日志信息的输出
    1.4、日志级别:debug<info<warn<error
    1.5、 实例,见备注
    1.6、Log4j日志转换为logBack在线工具(可以将log4j.properties文件内容转成logback.xml) 网址:https://logback.qos.ch/translator/

    log4j实例:

    		===========log4j示例===========
            ### 设置###
            log4j.rootLogger = debug,stdout,D,E
    
            ### 输出信息到控制抬 ###
            log4j.appender.stdout = org.apache.log4j.ConsoleAppender
            log4j.appender.stdout.Target = System.out
            log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
            log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    
            ### 输出DEBUG 级别以上的日志到=D://logs/error.log ###
            log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
            log4j.appender.D.File = D://logs/log.log
            log4j.appender.D.Append = true
            log4j.appender.D.Threshold = DEBUG
            log4j.appender.D.layout = org.apache.log4j.PatternLayout
            log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    
            ### 输出ERROR 级别以上的日志到=D://logs/error.log ###
            log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
            log4j.appender.E.File =C://logs/error.log 
            log4j.appender.E.Append = true
            log4j.appender.E.Threshold = ERROR
            log4j.appender.E.layout = org.apache.log4j.PatternLayout
            log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    
            ===========logback============
    
  2. 整合自定义logback
    springboot整合logback参考文档:
    https://docs.spring.io/spring-boot/docs/2.2.5.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-logging

    LogBack官网:https://logback.qos.ch/manual/index.html
    
    1、默认情况下,Spring Boot将日志输出到控制台,日志信息属于logBack
    2、整合logBack
    在工程的Resources中创建日志文件logback-spring.xml,官方推荐 -spring.xml结尾
    

    logback-spring.xml文件:

    <?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>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值