二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。
一. SpringBoot 为什么出现?
一.一 传统 Spring的开发的缺点
Spring 是一栈式开发框架,简化了JavaEE的开发。 但是随着业务更加复杂,导致配置文件越来越多,越来越复杂,脱离了Spring最开始出现的初心。
主要有两个缺点:
- 大量的配置文件,难以维护。
- 与第三方框架整合时较复杂。
所以,SpringBoot 就在 Spring的基础上应用而生了。
一.二 SpringBoot的出现
SpringBoot是在Spring的基础上进行扩充的,采用 Java Bean的方式进行配置文件,与第三方框架整合时,也非常容易。
一.二.一 使编码变得简单
采用注解方式,进行配置,简化了很多编码。
一.二.二 使配置变得简单
自动配置,快速集成第三方框架
一.二.三 使部署变得简单
内置Tomcat服务器,可添加Jetty 等容器。
一.二.四 使监控变得简单
自带项目监控。
二. SpringBoot框架的入门
老蝴蝶采用的是 JDK 1.8, Maven 3.6, Idea 工具。
创建项目时,可以通过 网址方式创建,也可以通过 maven 方式创建。
二.一 Idea 通过官方网址创建SpringBoot 项目
二.一.一 创建 HelloWorld 项目
打开 Idea, File --->new --->Project
选中 Spring Initializr 选项, SDK 选择1.8 方式。
Type 选择 Maven 类型, Java version 选择 8 版本。
依赖目前只选择一个 Spring Web 依赖。 SpringBoot 版本号选择 2.4.4 版本。(老蝴蝶为了记念前公司大方,均采用前公司版本号,2.2.2. 后不做声明)
填入项目名称和存储的位置,点击 Finish 即可。
点击完成之后,会通过Maven 进行下载相应的依赖 jar包。
二.一.二 创建Hello World 项目结构
二.一.二.一 目录结构
- LearnApplication 是 SpringBoot 的启动类.
- resources 下面的 static 会放置静态的资源。
- resoruces 下面的 templates 会放置模板.
- application.properties 会放置配置文件。
- test下面的 LearnApplicationTests 是测试启动类。
- pom.xml 会放置一些依赖。
二.一.二.二 自动生成文件
- 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<!--//1-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.yueshushu</groupId>
<artifactId>learn</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>learn</name>
<description>两个蝴蝶飞学习SpringBoot入门程序</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--//2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--//3 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!--//4 -->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 引入了一个父工程,是 spring-boot-starter-parent , 这个名称一定要记住。
- 引入了一个 spring-boot-starter-web 的依赖。
- 引入了一个 spring-boot-starter-test 的测试。
- 添加了打包插件
2 . LearnApplication
注意图标
package org.yueshushu.learn;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//1.
@SpringBootApplication
public class LearnApplication {
public static void main(String[] args) {
//2
SpringApplication.run(LearnApplication.class, args);
}
}
- 添加 SpringBootApplication注解,表示这是一个SpringBoot 项目
- SpringApplication 通过main() 方法启动项目。
3 . test包下的 LearnApplicationTests
package org.yueshushu.learn;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
//1
@SpringBootTest
class LearnApplicationTests {
@Test
void contextLoads() {
}
}
- 添加 SpringBootTest 测试注解,表示这是一个SpringBoot的测试类。
4 static,templates,application.properties 文件下,均没有内容。
注意 application.properties 文件前面的图标。
二.一.二.三 添加 的jar包依赖
只添加了一个 spring-boot-starter-web 的依赖,就相互引入了
这么多依赖, 有日志的,有json的,有spring的,有测试的。 注意,没有数据库相关的噢。
二.一.二.四 启动项目
找到 LearnApplication.java 文件,运行main() 方法即可。
运行测试方法的话, 找到LearnApplicationTests.java, 运行 contextLoads() 方法。
package org.yueshushu.learn;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class LearnApplicationTests {
@Test
void contextLoads() {
//添加一句输出
System.out.println("谢谢你,我是两个蝴蝶飞");
}
}
二.二 通过 Maven 形式创建SpringBoot 项目
二.二.一 创建 MavenHelloWorld 项目
File---->new---->Project
选择 Maven 选项, ProjectSDK 选择 1.8 样式。
填写项目名和 项目坐标信息。
二.二.二 创建 MavenHelloWorld项目结构
什么都没有,没有依赖,没有启动类,只是一个简单的Maven 项目。
二.二.三 将普通Maven 项目变成一个 SpringBoot 项目
二.二.三.一 在 pom.xml 配置文件中添加 依赖
这儿直接将 HelloWorld 里面的 pom.xml 放置到 MavenHelloWorld 里面。父工程的版本号,变成 2.2.2.RELEASE
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<!--以后均改成 2.2.2.RELEASE 版本-->
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.yueshushu</groupId>
<artifactId>learn</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>learn</name>
<description>两个蝴蝶飞学习SpringBoot入门程序</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>
添加完成之后,会发现 MavenHelloWorld 项目引入了大量的依赖。
二.二.三.二 在resources 里面添加配置
与 HelloWorld 项目一样,添加 static,templates,application.properties 配置。
二.二.三.三 添加启动类 HelloApplication
package org.yueshushu.learn;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @ClassName:HelloApplication
* @Description 启动类
* @Author 两个蝴蝶飞
* @Date 2021/4/9 20:39
* @Version 1.0
**/
//1. 添加SpringBootApplication注解
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
//2. SpringApplication 类运行
SpringApplication.run(HelloApplication.class,args);
System.out.println("欢迎我,我是两个蝴蝶飞,我启动了!!!!");
}
}
运行 HelloApplication 方法.
可以发现,运行成功了。
二.二.三.四 添加 测试类 HelloApplicationTests
放置在 test 目录 下
package org.yueshushu.learn;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class HelloApplicationTests {
@Test
void contextLoads() {
System.out.println("谢谢你,我是MavenHelloWorld 部分的两个蝴蝶飞");
}
}
点击 contextLoads() 方法进行测试
Idea 可以通过这两种方式,创建 SpringBoot项目。 推荐使用 Maven的方式。
三. SpringBoot版的 HelloWorld
开发中,都是使用的Web 方式开发。既然我们依赖,选择了 spring-boot-starter-web, 那么就开发一个简单的 Web 项目看看。
三.一 搭建一个简单的 SpringBoot 环境
具体方式可以看 第二章节部分。
采用的是 Idea 通过 Maven 方式 创建的那个 MavenHelloWorld 项目进行演示。
三.二 添加 Controller 层 url处理类
注意, controller层与 HelloApplication 同级。
@SpringBootApplication 注解,会扫描所在的包和子包。
如果将 HelloController 放置在 org.yueshushu.learn 包下,会扫描到。
如果 放置在 org.yueshushu 包下,不会扫描到。 org包下,也扫描不到。
package org.yueshushu.learn.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName:HelloController
* @Description TODO
* @Author 岳建立
* @Date 2021/4/9 20:55
* @Version 1.0
**/
//1. 添加了一个RestController的注解
@RestController
public class HelloController {
//2.请求地址是 /
@GetMapping("/")
public String toHello(){
return "谢谢你来访问我,我是两个蝴蝶飞";
}
//3. 请示地址是 /info
@GetMapping("/info")
public String info(){
return "我是两个蝴蝶飞,目前在杭州,我是一个快乐的程序员";
}
}
三.三 启动 HelloApplication 类
启动 HelloApplication 类,运行main() 方法
"D:\Program Files\Java\jdk1.8.0_91\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain
......
1.7.29.jar;G:\Jar_repository\org\springframework\spring-core\5.2.2.RELEASE\spring-core-5.2.2.RELEASE.jar;G:\Jar_repository\org\springframework\spring-jcl\5.2.2.RELEASE\spring-jcl-5.2.2.RELEASE.jar" org.yueshushu.learn.HelloApplication
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.2.RELEASE)
2021-04-09 21:02:08.678 INFO 15952 --- [ main] org.yueshushu.learn.HelloApplication : Starting HelloApplication on yuezl with PID 15952 (D:\githubBoot\springboot\MavenHelloWorld\target\classes started by 12905 in D:\githubBoot\springboot\MavenHelloWorld)
2021-04-09 21:02:08.680 INFO 15952 --- [ main] org.yueshushu.learn.HelloApplication : No active profile set, falling back to default profiles: default
2021-04-09 21:02:09.191 INFO 15952 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2021-04-09 21:02:09.197 INFO 15952 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-04-09 21:02:09.197 INFO 15952 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.29]
2021-04-09 21:02:09.246 INFO 15952 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2021-04-09 21:02:09.246 INFO 15952 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 539 ms
2021-04-09 21:02:09.333 INFO 15952 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2021-04-09 21:02:09.429 INFO 15952 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2021-04-09 21:02:09.433 INFO 15952 --- [ main] org.yueshushu.learn.HelloApplication : Started HelloApplication in 0.966 seconds (JVM running for 1.578)
欢迎我,我是两个蝴蝶飞,我启动了!!!!
控制台可以正常的打印输出
输入网址: http://localhost:8080/
http://localhost:8080/info
可以通过网址,正常的访问。
三.四 启动控制台打印的输出语句
//1. 启动的虚拟机位置,启动的参数,启动时依赖的jar包 和启动类
"D:\Program Files\Java\jdk1.8.0_91\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain
......
1.7.29.jar;G:\Jar_repository\org\springframework\spring-core\5.2.2.RELEASE\spring-core-5.2.2.RELEASE.jar;G:\Jar_repository\org\springframework\spring-jcl\5.2.2.RELEASE\spring-jcl-5.2.2.RELEASE.jar" org.yueshushu.learn.HelloApplication
//2. 启动成功的图案。 显示 版本号。可以修改
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.2.RELEASE)
//3. 启动app
2021-04-09 21:02:08.678 INFO 15952 --- [ main] org.yueshushu.learn.HelloApplication : Starting HelloApplication on yuezl with PID 15952 (D:\githubBoot\springboot\MavenHelloWorld\target\classes started by 12905 in D:\githubBoot\springboot\MavenHelloWorld)
//4. 找配置环境文件,可以选择的。没有的话,走默认
2021-04-09 21:02:08.680 INFO 15952 --- [ main] org.yueshushu.learn.HelloApplication : No active profile set, falling back to default profiles: default
//5. 启动的服务器 tomcat初始化 和端口号 8080
2021-04-09 21:02:09.191 INFO 15952 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
//6. 开启 tomcat 服务
2021-04-09 21:02:09.197 INFO 15952 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
//7. 启动 Servlet 引擎
2021-04-09 21:02:09.197 INFO 15952 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.29]
//8. 初始化 Spring 上下文
2021-04-09 21:02:09.246 INFO 15952 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
//9.初始化完成时间
2021-04-09 21:02:09.246 INFO 15952 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 539 ms
//10. 初始化服务任务
2021-04-09 21:02:09.333 INFO 15952 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
//11. tomcat 启动时的端口号和路径 path(目前为 空)
2021-04-09 21:02:09.429 INFO 15952 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
//12. 服务启动成功,启动的总时间
2021-04-09 21:02:09.433 INFO 15952 --- [ main] org.yueshushu.learn.HelloApplication : Started HelloApplication in 0.966 seconds (JVM running for 1.578)
欢迎我,我是两个蝴蝶飞,我启动了!!!!
三.五 打包并控制台方式运行
Terminal 控制台 进行安装
静静等待,直到运行成功。
查看磁盘目录,发现确实有这么一个jar包,时间上也是符合的.
通过 cmd 的 java -jar Xxx.jar 的方式进行运行程序。
D:\githubBoot\springboot\MavenHelloWorld\target>java -jar learn-0.0.1-SNAPSHOT.jar
浏览器访问时,可以正常的响应
关闭 cmd 窗口后,再次请求,就请求不到了。
本章节的代码放置在 github 上:
https://github.com/yuejianli/springboot/tree/main/MavenHelloWorld
谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!