上篇 Spring Boot 2.x 快速入门(上)HelloWorld示例 进行了Sprint Boot的快速入门,以实际的示例代码来练手,总比光看书要强很多嘛,最好的就是边看、边写、边记、边展示。就是把看到的使用IDE工具进行实际的代码演练,在把演练过程写出来,最后发表在blog或其他自媒体平台。
本篇主要以上篇的代码为准,说明HelloWorld示例代码中的注意事项。相对于微软的Net Core,Spring Boot 功能点更加清晰、易于记忆与应用。本篇主要涉及到
1.什么什么样的开发工具
2.pom.xml配置说明
3.示例中的代码注解含义
4.如何打包和其他的打包方式
5.热部署
除了全宇宙无敌的Visual Studio外,推荐Intellij IDEA,Intellij IDEA可能是Java中最好的开发者工具。可选Intellij IDEA是收费的,而且还小贵。大家学习用,可以用试用版本。也可以选择Eclipse和Visual Studio Code来替代。本示例HelloWorld使用的IDEA来开发。
IDEA如何运行Java项目,如何创建和编译运行Spring Boot项目在上一篇( Spring Boot 2.x 快速入门(上)HelloWorld示例)已经演示过。
开源,但是要自己设置的比较多,我之前是编写NET代码,有的时候也用,当初Android Studio也是选择的Eclipse,但是后来转战Intellij IDEA了,说明啥,对用户友好的还是Intellij IDEA
近年来,vs code逐渐流行,并且有迅速扩大的态势。高效、简单、使用,是他的基本特点。我比较看好VS Code,简单精致,有无限可能。
在https://start.spring.io/ 的网站上可以看到,除了使用Maven外,我们还可以使用 Gradle Project 来管理 SpringBoot 项目。我目前使用Maven来管理Spring Boot,Android Studio则默认使用 Gradle Project 来管理项目。
第一次使用Maven,感觉跟Net的Nuget包管理器是一样的。是对第三方组件(类似Dll)Java中是Jar包的管理,可以自动管理他们的加载与卸载。
在没有Maven的时候,我们可以通过 添加第三方包来向项目增加Jar包,这种方式jar很少的时候,非常方便,但多了之后非常的麻烦,特别是团队作业的时候。
所以我的理解是,Maven感觉就是一个智能机器人,我们把对Jar包的管理托管给他,由他来管理包的加载、匹配、卸载等工作。
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 操作。
在Spring Boot中正是靠注解来大大简化编程代码,在Spring Boot代码中随处可见注解,包括 @SpringBootApplication、@Autowired、@Bean、@Component等等,下面列出HelloWorld中的常见注解
申明让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 {}; }
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 ""; }
提供路由信息,负责URL到Controller中的具体函数的映射。类似C#中的[Route("hello/[controller]/[action]")]
@RequestMapping是@Mapping的扩展
有了这些注解,HelloWorld示例程序就可以运行了。不仅仅在简单的RestApi中可以使用注解,在SpringBoot所有的特征功能中,都使用了注解。
总的来说,注解是一种AOP形态,类似于C#中的特性。类似一种标记,大大简化了代码的编写量。在后面会有单独一章讲解注解。
在HelloWorld示例中,我们使用了内置的Tomcat来打包Spring Boot程序。这也是官方默认的打包方式,用起来也是非常方便。
无须其他的配置,直接编译,项目中的mvnw, mvnw.cmd文件是对mvn命令的封装。通常使用以下命令来编译
mvn clean mvn install
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下
热部署,就是当我们修改源代码或资源文件的时候,委托系统自动重启tomcat应用,这样,我们开发人员就不需要频发的手动操作。
下面以IDEA环境为例子说明
点击 Preferences>Build,Execution,Deployment>Compiler ,勾选 Build project automatically
并按住 ctrl+shift+alt+/ 组合键打开面板 Maintenance,点击Registry...
勾选 Compiler autoMake allow when app running
引入插件
<!--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>
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示例详解
原文:https://www.cnblogs.com/fishpro/p/10675293.html