Build Anything with Spring Boot:Spring Boot is the starting point for building all Spring-based applications. Spring Boot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring.
大概意思翻譯一下:Spring Boot 是所有基於 Spring 開發的項目的起點。Spring Boot 的設計是為了讓你盡可能快的跑起來 Spring 應用程序並且盡可能減少你的配置文件。這些都不再多說,Java 的Spring Boot我個人來說還是比較看好的。
Visual Studio Code (簡稱 VS Code / VSC) 是一款免費開源的現代化輕量級代碼編輯器,支持幾乎所有主流的開發語言的語法高亮、智能代碼補全、自定義熱鍵、括號匹配、代碼片段、代碼對比 Diff、GIT 等特性,支持插件擴展,並針對網頁開發和雲端應用開發做了優化。軟件跨平台支持 Win、Mac 以及 Linux。他最強大的地方是微軟的Language Server
,這貨可以通過插件的方法支持Java
、C#
、Python
、Typescript
、PHP
....
說了這么多的廢話,開始引出本文的重點:Spring Boot調試
。
插件安裝
在使用之前確保你已經安裝了Java環境、安裝了Vscode,然后安裝下面的幾個插件,至少需要這么幾個插件:
Java 環境:
Java Extension Pack
Java Language Support
Debuger for Java
Spring boot 環境:
Spring Boot Extension Pack
Spring Boot Tools
Spring Initializr Java Support
Maven 環境:
Maven for Java
生成項目
開始生成項目:
Ctrl
+Shift
+P
,輸入Spring
,選擇Maven項目
(我個人比較喜歡Maven),然后選擇Java
,輸入項目名稱假設為com.mx
,然后輸入項目名稱假設為spider
,然后我一般選擇2.0.3
,由於是測試項目,我只選擇一個DevTools
,然后選擇目錄生成項目,然后打開項目Open it
。
需要注意一點,項目生成之后請先運行一下maven指令,下載必要的數據包。
然后下面就是激動人心的時刻了!
擼代碼
測試代碼是一個簡單爬蟲程序,爬取博客園博客數據。
首先在pom.xml
文件中添加我們用到的包jsoup
:
<dependency>
<!-- jsoup HTML parser library @ https://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
然后我們首先找到src/main/java/com/mx/spider/DemoApplication.java
文件,修改Spring Boot的啟動行。
SpringApplication.run(DemoApplication.class, args);//刪除啟動項
System.out.println("Hello world!");
然后點擊調試蜘蛛圖標
,直接點擊調試(注意直接點擊,先別配置,使用Vscode默認配置足以!),首次將會非常慢。結合我的原因,應該是maven
下載數據包和初始化引擎所致。
代碼調試
點擊運行,媽耶!好神奇,環境好了!
來點復雜的調試
下面來點復雜的調試,首先我們創建一個模型Blog,一個控制器BlogSpiderController,然后開始下面的工作:
package com.mx.models;
public class Blog {
private String _url;
private String _title;
private String _detail;
public String getUrl() {
return _url;
}
public String getTitle() {
return _title;
}
public String getDetail() {
return _detail;
}
public void setUrl(String url) {
if (url.length() > 0 && (url.startsWith("http://") || url.startsWith("https://")))
_url = url;
}
public void setTitle(String title) {
if (title.length() > 0)
_title = title;
}
public void setDetail(String detial) {
if (detial.length() > 0)
_detail = detial;
}
}
package com.mx.controllers;
import java.util.ArrayList;
import java.util.List;
import com.mx.models.Blog;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class BlogSpiderController {
public void Run() throws Exception {
Document doc = null;
for (int i = 1; i <= 10; i++) {
doc = getUrlDocument("https://www.cnblogs.com/#p" + i);
for (Blog blog : getBlogListByDocument(doc)) {
bindBlogDetail(blog);
System.out.println(blog);
}
}
System.out.println("Task Finished!");
}
public Document getUrlDocument(String url) throws Exception {
Document doc = Jsoup.connect(url).get();
return doc;
}
public List<Blog> getBlogListByDocument(Document doc) throws Exception{
List<Blog> list = new ArrayList<Blog>();
Element pageList = doc.getElementById("post_list");
Elements blogs = pageList.getElementsByClass("post_item");
Blog b;
for (Element blog : blogs) {
b = new Blog();
b.setTitle(blog.getElementsByTag("h3").text());
b.setUrl(blog.getElementsByClass("titlelnk").get(0).attr("href"));
b.setSumary(blog.getElementsByClass("post_item_summary").text());
list.add(b);
}
return list;
}
public void bindBlogDetail( Blog blog) throws Exception{
//Do data bind
}
}
好了代碼部分先寫這么多,上文中綁定詳細信息部分我不再寫,因為幾個步驟已經滿足調試需求。
斷點調試
- 按照vs習慣,下設斷點。
同樣的,在代碼左側雙擊下設斷點,在斷點監視器也可以隨時修改斷點。
- 點擊調試
我的習慣是查看這幾部分:
1). 變量屬性
2). 堆棧調用情況
3). 變量變化情況
分別從下面幾塊兒查看數據。
- 查看調試信息
總結
本文主要使用Spring Boot Console程序演示Spring Boot的調試過程,但是Spring Boot如果是面向於Web端或許更加合適,但是Web代碼編寫相對復雜,所以選用了Console來演示調試過程。
【源代碼】:YunFile