一、任務調度
-
定時任務的配置
–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()); } }
-
其他配置
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()); } }
-
配置異步定時任務
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、常用處理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============
-
整合自定義logback
springboot整合logback參考文檔:
https://docs.spring.io/spring-boot/docs/2.2.5.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-loggingLogBack官網: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>