• Visual Studio Code 调试 SpringBoot


    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 Boot 是所有基于 Spring 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。这些都不再多说,Java 的Spring Boot我个人来说还是比较看好的。

    Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。软件跨平台支持 Win、Mac 以及 Linux。他最强大的地方是微软的Language Server,这货可以通过插件的方法支持JavaC#PythonTypescriptPHP....

    说了这么多的废话,开始引出本文的重点: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下载数据包和初始化引擎所致。

    代码调试

    点击运行,妈耶!好神奇,环境好了!

    Hello world

    来点复杂的调试

    下面来点复杂的调试,首先我们创建一个模型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
        }
    }
    

    好了代码部分先写这么多,上文中绑定详细信息部分我不再写,因为几个步骤已经满足调试需求。

    断点调试

    1. 按照vs习惯,下设断点。

    同样的,在代码左侧双击下设断点,在断点监视器也可以随时修改断点。

    断点设置

    1. 点击调试

    我的习惯是查看这几部分:
    1). 变量属性
    2). 堆栈调用情况
    3). 变量变化情况

    分别从下面几块儿查看数据。

    变量域

    1. 查看调试信息

    调试信息

    调试信息

    总结

    程序结果

    本文主要使用Spring Boot Console程序演示Spring Boot的调试过程,但是Spring Boot如果是面向于Web端或许更加合适,但是Web代码编写相对复杂,所以选用了Console来演示调试过程。

    【源代码】:YunFile

  • 相关阅读:
    一个故事告诉你,数据分析如何给企业带来价值
    【CS231n】斯坦福大学李飞飞视觉识别课程笔记(九):最优化笔记(上)
    区块链P2P网络详细讲解
    互联网协议入门
    BitTorrent DHT 协议中文
    基于侧链的P2P网络设计
    【转】P2P-BT对端管理协议
    P2P网络与BitTorrent技术简介
    【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pk创建自定义类
    爱创课堂每日一题第五十四天- 列举IE 与其他浏览器不一样的特性?
  • 原文地址:https://www.cnblogs.com/muxuan/p/11891728.html
Copyright © 2020-2023  润新知