环境约束
- jdk1.8.0_291
- maven3.6.3
- idea2019.2.3
- Spring Boot 2.1.9.RELEASE
maven 的安装和配置请看这里
需求
浏览器发送 hello 请求,服务器接受请求并响应 Hello World 字符串
实现
1. 创建一个 maven 工程(jar)
这里强调一点,不管是搭建web工程还是其它工程,都只需要像上面这样创建一个基本的maven工程就行,而不需要去选择那些maven的骨架
初始项目结构如下
2. 导入 Spring Boot 相关的依赖
在父工程的 pom.xml 文件
中添加如下内容
<!-- Springboot要求,所有的Springboot项目都要继承Springboot的起步依赖spring-boot-starter-parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.2</version>
</parent>
在需要引入 web 依赖的子模块的 pom.xml 文件
中添加如下内容
<!--
Springboot要集成Springmvc进行controller的开发,所以项目要导入web的启动依赖
由于在parent中已经指定了版本,所以在dependencies中关于spring-boot的依赖就不需要版本了,如果要引入其他的,仍然需要指定版本
-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
idea 会自动下载相关的 jar 包
3. 编写一个主程序启动 Spring Boot 应用
注意两个类所在的包处于不同的级别
,之所以这样是和@SpringBootApplication
注解里面的@ComponentScan
注解有关,这个注解会默认扫描其同级的文件和子包下的文件,先给出最终的项目结构图
package com.lwx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @SpringBootApplication 用于标注一个主程序类,说明这是一个 Spring Boot 引导类
*/
@SpringBootApplication
public class HelloWorldApplication {
public static void main(String[] args) {
// run方法表示运行Springboot的引导类,参数就是该引导类的字节码对象
SpringApplication.run(HelloWorldApplication.class, args);
}
}
4. 编写相关的 Controller
这里不需要写 Service
package com.lwx.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello() {
return "Hello World";
}
}
5. 运行前面写好的 HelloWorldApplication 类
从控制台可以看到如下结果
如果直接访问 http://localhost:8080/ 会看到如下页面
我们需要访问 http://localhost:8080/hello,这时会出现如下页面
可以发现,在以上过程中,我们并没有像使用 SSM 框架时那样配置包扫描路径、视图解析器、前端控制器等,这是在开发时给我们带来的方便之处,也没有要求我们必须安装 Tomcat 的环境,因为 Spring Boot 已经整合/内嵌了 Tomcat/jettyUndertow
除此之外,在部署方面,Spring Boot 也很方便
Spring Boot 应用的部署
在以前,我们如果想要部署一个 web 应用,首先要将应用打成 war 包,然后将其放在安装了 Tomcat 服务器的环境中,但使用了 Spring Boot 之后,我们可以将一个应用直接打成可执行的 jar 包,从而可以在没有部署 Tomcat 的环境中运行,但 jdk 还是需要装的
1. 在 pom.xml 文件中添加如下内容
哪个模块需要 build,就把该插件加在该模块的 pom 文件中。
需要 build 的模块一般都是 main 函数所在的模块,如果 main 函数所在的模块引用了其它模块,则在打 jar 包时,则被引用的模块也会被打成 jar 包包含进去
<!-- 作用:将应用打成一个可执行的 jar 包 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2. 双击应用的 package
或者直接打开 idea 的终端,在项目根目录下输入mvn clean package -Dmaven.test.skip=true
也可以
生成的新 jar 包会覆盖以前的同名 jar 包
3. 运行 jar 包
首先关闭 idea 中的服务器(避免端口冲突),然后在「终端」中进入 jar 包所在的路径
,使用 java -jar spring-boot-helloworld-1.0-SNAPSHOT.jar
命令运行 jar 包,运行成功后的界面如下
从上图可以看到应用已经成功启动,端口为 8080,这时我们在浏览器中访问 http://localhost:8080/hello 即可看到结果如下
使用解压缩软件打开 .jar 文件,可以看到里面有 .class 文件以及一些 jar 包
由上面的介绍可知,SpringBoot程序默认使用的端口就是Tomcat的默认端口8080
。
如果我们不想使用8080端口启动应用,只需在启动命令中加上端口号即可:java -jar -Dserver.port=8081 spring-boot-helloworld-1.0-SNAPSHOT.jar
,不需要改变程序的任何值
需要说明的是,实测使用java -Dserver.port=8081 -jar spring-boot-helloworld-1.0-SNAPSHOT.jar
也是可以正常启动的
再就要如果应用中的resources
目录下有application.yml
文件,并且其中设置的端口号和启动命令中设置的端口号不一致,此时仍会以启动命令中设置的端口号来启动应用
server:
port: 8082
同一个服务用两个不同的端口号启动
- 如果是用命令行启动,开两个窗口之后,在启动命令中设置不同的端口号即可
- 如果是在idea中启动,添加两个SpringBoot,然后设置不同的端口号即可
关于-D
可以参考这篇文章
启动命令中还可以设置jvm参数,如java -Xms10m -Xmx80m -jar xxx.jar