學習主題: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。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SN5YmM1UTMmFTZ5QWYlJTZ2YTY4cDZkFGNwYWN3QGNi9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
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通信風格?