天天看點

springboot 定時器_Spring Boot整合Spring Data Redis、整合定時任務Quartz

學習主題:SpringBoot

Spring Boot整合Spring Data Redis-整合步驟

闡述Spring Boot整合Spring Data Redis整合步驟。

a. 在pom檔案中添加Spring Boot啟動器以及SpringDataRedis啟動及坐标
b. 建立RedisConfig類,用于完成Redis整合的配置
c. 在配置類中建立RedisConfig對象,在該對象中完成一些連接配接配置
d. 建立JedisConnectionFactory對象,配置redis連接配接資訊
e. 建立RedisTemplate,用于執行redis操作的方法
           

@Configuration注解的作用是什麼?

@Configuration注解的作用是表示該類是配置類,讓Spring Boot啟動的時候初始化該配置類
           

@Bean注解的作用是什麼?

@Bean注解的作用是在Spring Boot啟動的時候将@Bean修飾的方法中傳回的對象放到IOC容器中
           

Spring Boot整合Spring Data Redis-提取Redis的連結參數

@ConfigurationProperties注解的作用是什麼?

@ConfigurationProperties注解的作用是将字首相同的内容建立一個實體
           

@ConfigurationProperties注解中的prefix屬性的作用是什麼?

@ConfigurationProperties注解中的prefix屬性的作用是根據字首建立實體
           

Spring Boot整合Spring Data Redis-存取Java對象

建立Users實體對象,包含id、name、age、address屬性。

public class Users implements Serializable {
private Integer id;
private String name;
private Integer age;
}
           

建立測試代碼,在測試方法中重新設定序列化器,更換為jdk序列化器,并将Users對象緩存到Redis中。

@Test 
public void testSetUser(){
Users users = new Users();
users.setId(1);
users.setName("zhangsan");
users.setAge(20);

this.redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
this.redisTemplate.opsForValue().set("users",users);
}
           

建立測試代碼,擷取緩存的Users對象。

@Test
public void testGetUser(){
this.redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
Users users = (Users) this.redisTemplate.opsForValue().get("users");
System.out.println(users);
}
           

Spring Boot定時任務[email protected]的使用

Scheduled是什麼?

是spring3.0以後自帶的一個定時任務器

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

@Scheduled注解的作用是什麼?

在該方法上設定定時任務
例如:
@Component
public class ScheduledDemo {
    @Scheduled(cron = "0/2 * * * * ?")
 public void scheduledMethod(){
        System.out.println("定時器被觸發了"+new Date());
    }
}
           

@Scheduled的cron屬性的作用是什麼?

Cron表達式。定時任務觸發的是時間的一個字元串表達式

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

什麼是cron表達式?

cron表達式是指定時任務觸發時間的字元串表達式
	Cron 表達式是一個字元串,分為 6 或 7 個域,每一個域代表一個含義
文法:	
Seconds Minutes Hours Day Month Week
           

@EnableScheduling注解的作用是什麼?

啟動類中開啟定時任務
           

Spring Boot定時任務-cron表達式

Cron表達式的文法格式有幾種?

Cron 有如下兩種文法格式:
6個域
Seconds Minutes Hours Day Month Week Year
7個域
Seconds Minutes Hours Day Month Week
           

Cron表達式的結構是什麼樣的?

corn從左到右(用空格隔開):
秒 分 小時 月份中的日期 月份 星期中的日期 年份
           

Cron表達式各字段的含義是什麼?

位置 時間域名 允許值 允許的特殊字元
1    秒        0-59 , - * /
2    分鐘      0-59 , - * /
3    小時      0-23 , - * /
4    日        1-31 , - * / L W C
5    月        1-12 , - * /
6    星期      1-7 , - * ? / L C #
7   年(可選)   1970-2099 , - * /
           

在Cron表達式中(*)、(?)、(-)、(,)、(/)、(#)分别表示什麼含義?

Cron 表達式的時間字段除允許設定數值外,還可使用一些特殊的字元,提供清單、範圍、通配符等功 能,細說如下:
●星号(*):可用在所有字段中,表示對應時間域的每一個時刻,例如,*在分鐘字段時,表示“每分鐘”; 
●問号(?):該字元隻在日期和星期字段中使用,它通常指定為“無意義的值”,相當于占位符; 
●減号(-):表達一個範圍,如在小時字段中使用“10-12”,則表示從 10 到 12 點,即 10,11,12; 
●逗号(,):表達一個清單值,如在星期字段中使用“MON,WED,FRI”,則表示星期一,星期三和星期五;
●斜杠(/):x/y 表達一個等步長序列,x 為起始值,y 為增量步長值。如在分鐘字段中使用 0/15,則 表示為 0,15,30和 45 秒,而 5/15 在分鐘字段中表示 5,20,35,50,你也可以使用*/y,它等同于 0/y;
●井号(#):該字元隻能在星期字段中使用,表示當月某個工作日。如 6#3 表示當月的第三個星期五(6 表示星期五,#3 表示目前的第三個),而 4#5 表示當月的第五個星期三,假設當月沒有第五個星期三, 忽略不觸發;
           

在Cron表達式中L、W、LW、C分别表示什麼含義?

●L:該字元隻在日期和星期字段中使用,代表“Last”的意思,但它在兩個字段中意思不同。L 在日期 字段中,表示這個月份的最後一天,如一月的 31 号,非閏年二月的 28 号;如果 L 用在星期中,則表示星 期六,等同于 7。但是,如果 L 出現在星期字段裡,而且在前面有一個數值 X,則表示“這個月的最後 X 天”, 例如,6L 表示該月的最後星期五; 
●W:該字元隻能出現在日期字段裡,是對前導日期的修飾,表示離該日期最近的工作日。例如 15W 表示離該月 15 号最近的工作日,如果該月 15 号是星期六,則比對 14 号星期五;如果 15 日是星期日, 則比對 16 号星期一;如果 15 号是星期二,那結果就是 15 号星期二。但必須注意關聯的比對日期不能夠 跨月,如你指定 1W,如果 1 号是星期六,結果比對的是 3 号星期一,而非上個月最後的那天。W 字元串 隻能指定單一日期,而不能指定日期範圍; 
●LW組合:在日期字段可以組合使用 LW,它的意思是當月的最後一個工作日;
●井号(#):該字元隻能在星期字段中使用,表示當月某個工作日。如 6#3 表示當月的第三個星期五(6 表示星期五,#3 表示目前的第三個),而 4#5 表示當月的第五個星期三,假設當月沒有第五個星期三, 忽略不觸發; 
● C:該字元隻在日期和星期字段中使用,代表“Calendar”的意思。它的意思是計劃所關聯的日期, 如果日期沒有被關聯,則相當于月曆中所有日期。例如 5C 在日期字段中就相當于月曆 5 日以後的第一天。 1C 在星期字段中相當于星期日後的第一天。
           

Cron 表達式對特殊字元的大小寫不敏感,對代表星期的縮寫英文大小寫也不敏感。

例子:

@Scheduled(cron = "0 0 1 1 1 ?")//每年一月的一号的 1:00:00 執行一次
@Scheduled(cron = "0 0 1 1 1,6 ?") //一月和六月的一号的 1:00:00 執行一次
@Scheduled(cron = "0 0 1 1 1,4,7,10 ?") //每個季度的第一個月的一号的 1:00:00 執行一次
@Scheduled(cron = "0 0 1 1 * ?")//每月一号 1:00:00 執行一次
@Scheduled(cron="0 0 1 * * *") //每天淩晨 1 點執行一次
           

Spring Boot定時任務-Quartz介紹

什麼是Quartz?

Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源項目,它可以與J2EE與J2SE應用程式相結合也可以單獨使用。Quartz可以用來建立簡單或為運作十個,百個,甚至是好幾萬個Jobs這樣複雜的程式。Jobs可以做成标準的Java元件或 EJBs。

springboot 定時器_Spring Boot整合Spring Data Redis、整合定時任務Quartz

Quartz的使用思路是什麼?

1)job- 任務 - 你要做什麼事? 
2)Trigger- 觸發器 - 你什麼時候去做? 
3)Scheduler- 任務排程 - 你什麼時候需要去做什麼事?
           

Spring Boot定時任務-SpringBoot整合Quartz

闡述Spring Boot整合Quartz整合步驟。

1. 修改pom檔案添加Quartz坐标
2. 編寫Quartz啟動類
3. 修改Spring Boot啟動類
           

@EnableScheduling注解的作用是什麼?

@EnableScheduling注解的作用是Spring Boot啟動時開啟Scheduled觸發器
           

Spring Boot定時任務-Job類對象注入

闡述Job類注入時生異常的原因。

Quartz執行個體化對象底層預設使用的是通過反射完成,沒有使用Spring完成執行個體化,無法完成IOC注入,是以會報錯
           
如何解決該異常?
1. 編寫一個 MyAdaptableJobFactory類繼承AdaptableJobFactory類,
重寫createJobInstance方法将執行個體化的任務對象手動的添加到 springIOC 容器中并且完成對象的注入
2. 修改QuartConfig類,将自定義MyAdaptableJobFactory類注入
加到建立Scheduler對象方法中調用SchedulerFactoryBean的setJobFactory方法重新設定JobFactory工廠。
           

AutowireCapableBeanFactory對象的作用是什麼?

AutowireCapableBeanFactory對象的作用是将一個對象添加到SpringIOC容器中,并完成該對象的注入。
           

單體架構

什麼是單體架構?

單體架構有哪些特點?

單體架構的優缺點是什麼?

微服務架構

什麼是微服務?

常見的架構風格有哪些?

微服務架構有哪些特點?

微服務架構的優缺點是什麼?

常見軟體架構方式的差別

什麼是MVC架構?

什麼是RPC架構?

什麼是SOA架構?

AKF拆分原則

設計微服務的原則是什麼?

什麼是AKF拆分原則?

AKF拆分原則中的Y軸表示什麼?

AKF拆分原則中的X軸表示什麼?

AKF拆分原則中的Z軸表示什麼?

前後端分離原則

什麼是前後端分離原則?

無狀态服務

什麼是無狀态服務?

RestFul通信風格

什麼是RestFul通信風格?