SpringBoot--實用開發
SpringBoot實用開發
熱部署
熱部署是指在你修改項目BUG的時候對JSP或JAVA類進行了修改在不重啟WEB服務器前提下能讓修改生效。但是對配置文件的修改除外!
導入springboot開發者工具坐標:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
激活熱部署:ctrl+F9


上面就是一次restart的過程
-
自動啟動熱部署:
![]()
? 之后:ctrl+alt+shift+/ 之后選擇registry
? 
這樣之后idea失去焦點5秒后自動構建
設置不參與熱部署文件

如何禁用熱部署

配置高級
@ConfigurationProperties
ConfigurationProperties可以配置第三方bean屬性



如果不第三方屬性注入

注入后運行:
//Book就是被注入的類
ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class,args);
Book book = ctx.getBean(Book.class);
System.out.println(book);
寬松綁定
當我們用@ConfigurationProperties來綁定屬性時支持屬性名寬松綁定,@value就不行

不論大小寫,有無下劃線,下面面這幾種格式都能和上面的屬性相匹配

常用計量單位應用
//在利用上面方法注入屬性時,1就代表1小時,其他分鐘,秒等類似
@DurationUnit(ChronoUnit.HOURS)
private Duration serverTimeOut;
//大小,1代表1字節,其他和上面類似
@DataSizeUnit(DataUnit.BYTES)
private DataSize dataSize;
數據校驗
- 開啟數據校驗有助于系統安全性
-
導入校驗需要的坐標
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> </dependency> -
編寫
@Component @Data//lombok提供的其中包括get set toString方法等,lombok還提供其他方法具體自行查看 @ConfigurationProperties(prefix = "servers")//注入配置文件中的屬性值 @Validated //開啟對當前bean的屬性注入校驗 public class Book { // 定制校驗規則,除了下面兩個其他如果需要的自行搜索 @Max(value = 8888,message = "最大值不能超過8888") @Min(value = 202,message = "最小值不能小于202") private int id; private String type; private String name; private String description; } -
使用hibernate框架提供的校驗器
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </dependency> -
測試
ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class,args); Book book = ctx.getBean(Book.class); System.out.println(book); -
結果:
另外如果Book類出現
Spring Boot Configuration Annotation Processor not configured 。。但是不影響運行導入這個去掉爆紅
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
測試
加載測試專用屬性和配置
加載測試專用屬性
//properties可以為測試添加臨時的屬性
//@SpringBootTest(properties ={"test.prop=testValue1"})
//args可以為測試用例添加臨時的命令行參數和上面可以達成一樣的效果
@SpringBootTest(args = {"--test.prop=testvalye",""})
class DemoApplicationTests {
@Value("${test.prop}")
private String msg;
@Test
void testProperties(){
System.out.println(msg);
}
}
加載測試專用配置


測試類中啟動web環境
//參數:NONE-不啟動服務器 DEFINED_PORT以默認端口啟動服務器(和配置文件中配置的一樣)
//RANDOM_PORT以隨機端口啟動服務器
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class DemoApplicationTests {
@Test
void testProperties(){
}
}
發送虛擬請求
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
//開啟虛擬MVC調用
@AutoConfigureMockMvc
class DemoApplicationTests {
@Test
//注入虛擬mvc調用
void testProperties(@Autowired MockMvc mvc) throws Exception {
//http://localhost/books
// 創建模擬請求
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
// 執行對應的請求
mvc.perform(builder);
}
}
匹配響應執行狀態
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
//開啟虛擬MVC調用
@AutoConfigureMockMvc
class DemoApplicationTests {
@Test
//注入虛擬mvc調用
void testProperties(@Autowired MockMvc mvc) throws Exception {
//http://localhost/books
// 創建模擬請求
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books1");
// 執行對應的請求,返回結果為是否成功的真實值
ResultActions actions = mvc.perform(builder);
// 設置預期值 與真實值進行比較,成功測試通過,失敗測試失敗
StatusResultMatchers status = MockMvcResultMatchers.status();
// 預計本處調用成功的:狀態200
ResultMatcher ok = status.isOk();
// 為本次調用結果設置一個預期值進行匹配
actions.andExpect(ok);
}
}
本處book1導致404,輸出結果是:

匹配響應體
和匹配執行狀態同理,只不過本處匹配的是return回去的結果
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
//開啟虛擬MVC調用
@AutoConfigureMockMvc
class DemoApplicationTests {
@Test
//注入虛擬mvc調用
void testProperties(@Autowired MockMvc mvc) throws Exception {
//http://localhost/books
// 創建模擬請求
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
// 執行對應的請求,返回結果為是否成功的真實值
ResultActions actions = mvc.perform(builder);
ContentResultMatchers content = MockMvcResultMatchers.content();
//如果返回體直接返回的該對象,就是一個json格式,將本處的參數改為需要匹配的json格式就行
ResultMatcher result = content.string("springboot");
actions.andExpect(result);
}
}
匹配響應頭
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@AutoConfigureMockMvc
class DemoApplicationTests {
@Test
//注入虛擬mvc調用
void testProperties(@Autowired MockMvc mvc) throws Exception {
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
ResultActions actions = mvc.perform(builder);
HeaderResultMatchers header = MockMvcResultMatchers.header();
//匹配響應頭的這個鍵值對
ResultMatcher result = header.string("Content-Type","application/json");
actions.andExpect(result);
}
}
業務層測試事務回滾
回滾可以實現在測試時不在數據庫留下痕跡
@Transaction:表示事務
Rollback 參數true表示啟用回滾

測試用例設置隨機數據
配置文件中:
testcase:
book: ${random.int}
#限定范圍
id: ${random.int(5,10)}
name: ${random.value}
uuid: ${random.uuid}
publishTime: ${random.long}
數據層解決方案一 基于關系型數據庫(sql)
springboot默認的數據源

例如:Hikaricp不用導入可以直接在配置文件配置:

JDBCTemplate

標準格式:

配置:

jdbc內置數據庫

怎么用不多說
數據層解決方案二 基于非關系型數據庫(nosql)
市場常見的nosql解決方案
- Redis
- Mongo
- ES
Redis
基本使用

具體按照啟動自己看redis的筆記
一些基本操作:

springboot整合redis
首先在cmd啟動redis,然后

也可以不寫下面的配置,默認的就是localhost和6379

直接用:


其他方法類似不在多寫
上面與客服端操作不等效把RedisTemplate改為StringRedisTemplate就和客戶端等效

整合第三方技術
緩存
- 緩存是一種介于數據永久存儲介質和數據應用之間的數據臨時存儲介質
- 使用緩存可以有效的減少低速讀取過程的次數(例如磁盤io),提高系統性能
- 緩存不僅可以用于提高永久性介質的數據讀取效率,還可以通過臨時的數據存儲空間
springboot提供了緩存技術,方便緩存使用
-
導入相關坐標
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> -
在啟動類加上注解
//開啟緩存功能 @EnableCaching -
在需要用緩存的地方(查詢)加上
@Override //設置返回值緩存到value參數名空間中的名和函數參數id相同的位置,下一次在調用且id相同就自己到緩存中拿出 @Cacheable(value = "cacheSpace",key = "#id") public Book getById(Integer id) { return bookDao.selectById(id); }
- springboot除了上面的默認緩存方案外,還可以對其他緩存技術進行整合,統一接口,方便緩存技術的開發和管理,可以整合的技術包括:

任務
-
定時任務是企業級應用中的常見操作
- 年度報表。。
- 。。
-
流行的定時任務技術
- Quartz
- Spring Task
-
相關概念
![]()
springboot整合spring tesk
-
在啟動類添加注解
//開啟定時任務功能 @EnableScheduling -
在定時任務函數上加上注解
//本處含義為每一秒執行一次任意分鐘、小時、天、月,不限情形 @Scheduled(cron = "0/1 * * * * ?") public void print(){ System.out.println("task"); }
如果你想也可以更改關于它的相關配置

整合JavaMail
- SMTP:簡單郵件傳輸協議,用于發送電子郵件的傳輸協議
- POP3:用于接收電子郵件的標準協議
- IMAP:互聯網消息協議,是POP3的替代協議
步驟:
-
導入javamail坐標
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> -
配置相關信息
spring: mail: #郵件供應商smtp協議,qq郵箱來發 host: smtp.qq.com username: 124。。。@qq.com # 不是qq登錄密碼,是供應商提供的加密后密碼 password: 。。。。獲取郵箱加密密碼:請求郵箱--設置--賬號--點擊開啟服務會獲得授權碼就是密碼
![]()
-
發送郵件
@Service public class SentMailImpl implements SendMailService { //因為已被整合所以自動裝配就行 @Autowired private JavaMailSender javaMailSender; // 發送人 private String from = "@qq.com"; // 接收人 private String to ="@163.com"; // 標題 private String subject = "測試郵件"; // 正文 private String context = "正文內容"; @Override public void sendMail() { SimpleMailMessage message = new SimpleMailMessage(); //這樣收件人看到的的小蜜蜂發的郵件 // message.setFrom(from+("小蜜蜂")); message.setFrom(from); message.setTo(to); message.setSubject(subject); message.setText(context); // 定時發送 // message.setSentDate(); javaMailSender.send(message); } }
? 之后在測試類裝填調用方法
上面是發送簡單文件,發送復雜郵件的方法:

消息
-
企業級應用中廣泛使用的三種異步消息傳遞技術
- JMS
- AMQP
- MQTT
-
JMS
![]()
-
AMQP
![]()
-
MQTT
![]()
監控







浙公網安備 33010602011771號