上篇 Spring Boot 快速入门(上)HelloWorld示例 进行了Sprint Boot的快速入门,以实际的示例代码来练手,总比光看书要强很多嘛,最好的就是边看、边写、边记、边展示。就是把看到的使用IDE工具进行实际的代码演练,在把演练过程写出来,最后发表在blog或其他自媒体平台。

本篇主要以上篇的代码为准,说明HelloWorld示例代码中的注意事项。相对于微软的Net Core,Spring Boot 功能点更加清晰、易于记忆与应用。本篇主要涉及到

1.什么什么样的开发工具

2.pom.xml配置说明

3.示例中的代码注解含义

4.如何打包和其他的打包方式

5.热部署

1.开发工具的选择

除了全宇宙无敌的Visual Studio外,推荐Intellij IDEA,Intellij IDEA可能是Java中最好的开发者工具。可选Intellij IDEA是收费的,而且还小贵。大家学习用,可以用试用版本。也可以选择Eclipse和Visual Studio Code来替代。本示例HelloWorld使用的IDEA来开发。

1.1 IDEA

IDEA如何运行Java项目,如何创建和编译运行Spring Boot项目在上一篇( Spring Boot 2.x 快速入门(上)HelloWorld示例)已经演示过。

1.2 Eclipse

开源,但是要自己设置的比较多,我之前是编写NET代码,有的时候也用,当初Android Studio也是选择的Eclipse,但是后来转战Intellij IDEA了,说明啥,对用户友好的还是Intellij IDEA

1.3 Visual Studio Code

近年来,vs code逐渐流行,并且有迅速扩大的态势。高效、简单、使用,是他的基本特点。我比较看好VS Code,简单精致,有无限可能。

2.Maven以及他的Pom.xml配置

https://start.spring.io/ 的网站上可以看到,除了使用Maven外,我们还可以使用 Gradle Project 来管理 SpringBoot 项目。我目前使用Maven来管理Spring Boot,Android Studio则默认使用 Gradle Project 来管理项目。

2.1 Maven 简介

第一次使用Maven,感觉跟Net的Nuget包管理器是一样的。是对第三方组件(类似Dll)Java中是Jar包的管理,可以自动管理他们的加载与卸载。

在没有Maven的时候,我们可以通过 添加第三方包来向项目增加Jar包,这种方式jar很少的时候,非常方便,但多了之后非常的麻烦,特别是团队作业的时候。

所以我的理解是,Maven感觉就是一个智能机器人,我们把对Jar包的管理托管给他,由他来管理包的加载、匹配、卸载等工作。

2.2 Pom.xml配置文件

Pom.xml是Maven的配置文件,这个类似NodeJs使用json文件来管理、ASP.NET 来使用web.config来管理一样,Pom.xml是Maven管理第三方Jar包的可描述的文件。

实际操作过程中,我们只要对Pom.xml进行变更,系统就会自动去管理jar包。

上一张的Pom.xml 如下描述:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.fishpro</groupId>
<artifactId>springstudy</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springstudy</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

  

上面几个核心的节点说明
1、modelVersion
  指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0

2、groupId
  组织名称,通常使用com.companyname.xx.xx (或使用net 、org开头)中间使用.(点)号隔开。

3、artifactId
  项目名称项目唯一的ID,一个groupId下可能有多个项目,靠artifactId区分,比如springstudy项目

4、version
  版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本。在Maven中很重要的一点是,groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标。

5、dependencies

  依赖项管理节点,所有的依赖都是使用这个节点管理的, 每个依赖节点由包括了groupId(必选)、artifactId(必选)、version(可选),注意这里的groupId-artifactiD-version组成了唯一的识别号,也就是前面的节点的意义所在

6、build

  表示与构建相关,如在本章的 5热部署中需要配置build下的plugins配置,以达到支持热部署的效果。

Maven的Pom.xml配置项目很多,但实际上操作过程用的最多的就是依赖 的增加减少 dependencies 操作。

3.注解-编码的核心

在Spring Boot中正是靠注解来大大简化编程代码,在Spring Boot代码中随处可见注解,包括 @SpringBootApplication、@Autowired、@Bean、@Component等等,下面列出HelloWorld中的常见注解

3.1 @SpringBootApplication

申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。

在启动类文件 com.fishpro.springstudy.SpringstudyApplication 中,@SpringBootApplication在文件开头上。

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

  

按住ctrl 点击 @SpringBootApplication可以放心它是有三个注解组成

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@AliasFor(
annotation = EnableAutoConfiguration.class
)
Class<?>[] exclude() default {}; @AliasFor(
annotation = EnableAutoConfiguration.class
)
String[] excludeName() default {}; @AliasFor(
annotation = ComponentScan.class,
attribute = "basePackages"
)
String[] scanBasePackages() default {}; @AliasFor(
annotation = ComponentScan.class,
attribute = "basePackageClasses"
)
Class<?>[] scanBasePackageClasses() default {};
}

  

3.2 @RestController

com.fishpro.springstudy.controller.HelloWorldController.java中用于标注控制层组件(在MVC中的Controller层),@ResponseBody和@Controller的合集。

按住Ctrl键 点击@RestController 可以看到他是@Controller和@ResponseBody集合

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}

  

3.3 @RequestMapping

提供路由信息,负责URL到Controller中的具体函数的映射。类似C#中的[Route("hello/[controller]/[action]")]

@RequestMapping是@Mapping的扩展

有了这些注解,HelloWorld示例程序就可以运行了。不仅仅在简单的RestApi中可以使用注解,在SpringBoot所有的特征功能中,都使用了注解。

总的来说,注解是一种AOP形态,类似于C#中的特性。类似一种标记,大大简化了代码的编写量。在后面会有单独一章讲解注解。

4.打包发布

4.1 使用内置的Tomcat来打包

在HelloWorld示例中,我们使用了内置的Tomcat来打包Spring Boot程序。这也是官方默认的打包方式,用起来也是非常方便。

无须其他的配置,直接编译,项目中的mvnw, mvnw.cmd文件是对mvn命令的封装。通常使用以下命令来编译

mvn clean
mvn install

4.2 打包成War

war可以在独立的Tomcat服务器中部署。

修改Pom.xml

<groupId>com.fishpro</groupId>
<artifactId>springstudy</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springstudy</name>
<packaging>war</packaging>

使用命令

mvn clean
mvn install

打包成war

 

把war放到tomcat服务器的webapps文件夹下,在tomcat运行时会自动将war解压的webapps下

  

5.热部署

热部署,就是当我们修改源代码或资源文件的时候,委托系统自动重启tomcat应用,这样,我们开发人员就不需要频发的手动操作。

下面以IDEA环境为例子说明

5.1 在IDEA设置中配置系统支持热部署

点击 Preferences>Build,Execution,Deployment>Compiler ,勾选 Build project automatically

并按住 ctrl+shift+alt+/ 组合键打开面板 Maintenance,点击Registry...

勾选 Compiler autoMake allow when app running

5.2 配置Pom.xml,引入热部署插件

引入插件

<!--Spring Boot 2.x 快速入门(下)HelloWorld示例详解中的热部署插件-->
<!--添加热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>

  

修改build>plugins节点

<build>
<plugins>
<plugin>
<!--热部署配置-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork:如果没有该项配置,整个devtools不会起作用-->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>

5.3 运行测试热部署效果

1)运行HelloWorld项目,浏览器输入 http://localhost:8999/hello/say 可以看到输出 HelloWorld

2)修改com.fishpro.springstudy.controller.HelloWorldController.java 如下,增加输出字符串

public class HelloWorldController {
@RequestMapping("/say")
public String say(){
return "HelloWorld"+" 热部署测试";
}
}

3)浏览器输入 http://localhost:8999/hello/say 可以看到输出 HelloWorld 热部署测试。同时我们可以看到IDEA的Console(IDEA下面的窗口)系统自动重启了项目。效果如下图:

  

问题

1.经常我们部署了热部署,在Pom中加入了依赖xml描述,但是没有什么效果,问题在于,我们未能配置IDEA的环境,注意是两个环境设置(见5.1)。

参考

http://www.runoob.com/maven/maven-pom.html (maven)

https://blog.csdn.net/weixin_40753536/article/details/81285046 (注解)

https://blog.csdn.net/qq_42685050/article/details/81588584 (热部署)

Spring Boot 2.x 快速入门(下)HelloWorld示例详解的更多相关文章

  1. Spring Boot 2.x 快速入门(上)HelloWorld示例

    本文重点 最近决定重新实践下Spring Boot的知识体系,因为在项目中遇到的总是根据业务需求走的知识点,并不能覆盖Spring Boot完整的知识体系,甚至没有一个完整的实践去实践某个知识点.最好 ...

  2. Spring Boot从入门到精通之:一、Spring Boot简介及快速入门

    Spring Boot Spring Boot 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来 ...

  3. 2、Spring Boot 2.x 快速入门

    1.2 Spring Boot 快速入门 1.2.1 开发环境和工具 JDK 1.8+:Spring Boot 2.x 要求 JDK 1.8 环境及以上版本.另外,Spring Boot 2.x 只兼 ...

  4. Spring Boot WebFlux-01——WebFlux 快速入门实践

    第01课:WebFlux 快速入门实践 Spring Boot 2.0 spring.io 官网有句醒目的话是: BUILD ANYTHING WITH SPRING BOOT Spring Boot ...

  5. 初识Spring Boot框架和快速入门

    前面的铺垫文章已经连着写了六篇了,主要是介绍了spring和SpringMVC框架,小伙伴们在学习的过程中大概也发现了这两个框架需要我们手动配置的地方非常多,不过做JavaEE开发的小伙伴们肯定也听说 ...

  6. Spring Boot教程(十六)属性配置文件详解(1)

    相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷.我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁 ...

  7. ElasticSearch实战系列八: Filebeat快速入门和使用---图文详解

    前言 本文主要介绍的是ELK日志系统中的Filebeat快速入门教程. ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是 ...

  8. Velocity快速入门教程-脚本语法详解(转)

    1.变量 (1)变量的定义: #set($name = "hello")      说明:velocity中变量是弱类型的. 当使用#set 指令时,括在双引号中的字面字符串将解析 ...

  9. spring boot / cloud (十七) 快速搭建注册中心和配置中心

    spring boot / cloud (十七) 快速搭建注册中心和配置中心 本文将使用spring cloud的eureka和config server来搭建. 然后搭建的模式,有很多种,本文主要聊 ...

随机推荐

  1. 【从零开始自制CPU之学习篇06】寄存器

    上一篇文章学习了总线的相关知识,途中ABC当时假设为一个个的8位寄存器.这一篇要学习怎么构建这个寄存器. 这分为两个三个部分,数据输入,寄存器,数据输出.首先不管输出,来看数据输入和寄存器这两个部分. ...

  2. asp.net core系列 40 Web 应用MVC 介绍与详细示例

    一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...

  3. C++版 - 剑指offer面试题28: 字符串的排列

    题目: 字符串的排列 热度指数:5777 时间限制:1秒 空间限制:32768K 本题知识点: 字符串 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出 ...

  4. SpringBoot入门教程(十)应用监控Actuator

    Actuator可能大家非常熟悉,它是springboot提供对应用自身监控,以及对应用系统配置查看等功能.spring-boot-starter-actuator模块的实现对于实施微服务的中小团队来 ...

  5. 如何用浏览器在线查看.ipynb文件

            当我们用jupyter notebook编辑好.ipynb文件后,肯定会想不用运行jupyter notebook也能方便得查看.ipynb的文件,如果直接打开.ipynb的文件,我们 ...

  6. HBase查询优化之Short-Circuit Local Reads

    1.概述 在<HBase查询优化>一文中,介绍了基于HBase层面的读取优化.由于HBase的实际数据是以HFile的形式,存储在HDFS上.那么,HDFS层面也有它自己的优化点,即:Sh ...

  7. 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

    命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我 ...

  8. 15分钟在笔记本上搭建 Kubernetes + Istio开发环境

    11月13~15日,KubeCon 上海大会召开,云原生是这个秋天最火热的技术.很多同学来问如何上手 Kubernetes和Istio 服务网格开发.本文将帮助你利用Docker CE桌面版,15分钟 ...

  9. SpringMVC学习笔记之一(SpringMVC架构及与Mybatis整合)

    一.SpringMVC入门 1.1Springmvc是什么 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来,如 ...

  10. Spring源码情操陶冶#task:executor解析器

    承接Spring源码情操陶冶-自定义节点的解析.线程池是jdk的一个很重要的概念,在很多的场景都会应用到,多用于处理多任务的并发处理,此处借由spring整合jdk的cocurrent包的方式来进行深 ...