SpringBoot入门
SpringBoot简介
SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。SSM框架简化web项目开发,SpringBoot简化spring开发。
接下来我们通过使用SpringBoot来开发SpringMVC。
SpringBoot快速入门
SpringBoot 开发SpringMVC大致步骤如下:
- 创建新模块,选择Spring初始化,并配置模块相关基础信息
- 选择当前模块需要使用的技术
- 创建控制器类
- 运行自动生成的Application引导类
- 选择 Spring Initializr ,用来创建 SpringBoot 工程
- 由于我们需要开发一个 web 程序,使用到了 SpringMVC 技术。所以选中 Web ,然后勾选 Spring Web
项目创建完成后,目录如下图:
- 在com.itheima.controller包下创建BookController,代码具体内容如下:
可以看到,在SpringBoot项目中BookController中的代码与整合SSM框架时格式一致。
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println("id ====>"+id);
return "{'springboot':info}";
}
}
- 启动服务器
运行 SpringBoot 工程不需要使用本地的 Tomcat 和 插件,只运行项目 com.itheima 包下的 Application 类。
接着我们在浏览器中输入http://localhost:8080/books/1
可以看到控制台输出信息如下:
至此我们便完成了使用SpringBoot开发SpringMVC,我们发现步骤非常简单。项目创建完成后,我们只写了BookController,接着直接运行Application的主方法就行了。
注意:
1.在创建好的工程中不需要创建配置类
5. 创建好的项目会自动生成其他的一些文件,而这些文件目前对我们来说没有任何作用,所以可以将这些文件删除。
可以删除的目录和文件如下:
- .mvn
- .gitignore
- HELP.md
- mvnw
- mvnw.cmd
要研究这个问题,我们需要看看 Application 类和 pom.xml 都书写了什么。先看看 Applicaion 类,该类内容如下:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这个类中的东西很简单,就在类上添加了一个 @SpringBootApplication 注解,而在主方法中就一行代码。我们在启动服务器时就是执行的该类中的主方法。
再看看 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>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_01_quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--JDK版本为8.0-->
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--该依赖就是我们在创建 SpringBoot 工程勾选的那个 Spring Web 产生的-->
<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>
我们代码之所以能简化,就是因为指定的父工程和 Spring Web 依赖实现的。
SpringBoot快速启动
后端人员可以将SpringBoot工程打成jar包,该jar包运行不依赖Tomcat和Idea这些工具也可以正常运行,只是这个jar包在运行过程中连接和我们自己程序相同的mysql数据库即可。这样前端人员也能非常方便地协同开发。
- 打包
由于我们在构建SpringBoot工程时已经在pom.xml中配置了如下插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
所以我们只需要使用Maven的package
指令打包就会在target目录下生成对应的Jar包。
- 启动
进入jar包所在的位置,在命令行窗口中输入如下命令即可启动项目。
java -jar springboot_02_spring-0.0.1-SNAPSHOT.jar
SpringBoot概述
我们知道SpringBoot的作用是简化Spring的搭建过程和开发过程。
原始Spring环境搭建和开发存在以下问题:配置繁琐和依赖设置繁琐
SpringBoot程序优点恰巧就是针对Spring的缺点
- 自动配置。用来解决Spring程序配置繁琐的问题
- 起步依赖。这个是用来解决Spring程序依赖设置繁琐的问题
- 辅助功能(内置服务器)。我们在启动SpringBoot程序时没有使用本地的tomcat也没有使用tomcat插件,而是使用SpringBoot内置的服务器。
在实际开发中,需要使用什么技术只需引入该技术对应的起步依赖即可。
使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供。
程序启动
创建的每一个SpringBoot程序时都包含一个类似于下面的类,我们将这个类称为引导类。
package com.itheima;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Springboot02SpringApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot02SpringApplication.class, args);
}
}
注意!
- SpringBoot在创建项目时,采用jar的打包方式
- SpringBoot的引导类是项目的入口,运行引导类的main方法即可启动项目。
切换web服务器
现在我们启动工程使用的是tomcat服务器,现在我们想使用jetty服务器,jetty在我们maven高级时讲maven私服使用的服务器。而要切换web服务器就需要将默认的tomcat服务器给排除掉。我们使用排除依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
接着我们引入jetty服务器。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
<version>2.7.2</version>
</dependency>
最后我们运行引导类,在日志信息中就可以看到使用的是jetty服务器。
配置文件
配置文件格式
SpringBoot提供了3种属性配置方式。
- application.properties
- application.yaml
- application.yml
我们现在启动服务器默认的端口号是8080,我们想把端口号改为80,这样在访问时就可以不写端口号了。
在SpringBoot程序中我们有3种配置文件方式来修改端口号。
- application.properties
server.port=80
- application.yaml
server:
port: 80
- application.yml
server:
port: 80
需要注意的是SpringBoot程序的配置文件名必须是application,只是后缀名不同。并且在yml和yaml配置文件中“ : ”后面,数据前必须加空格。
在SpringBoot中三种不同类型的配置文件的优先级如下:
application.properties>application.yml>application.yaml
yaml格式
YAML是一种数据序列化格式。使用这种格式的配置文件具有如下优势:
- 容易阅读
- 容易与脚本语言交互
- 以数据为核心,重数据轻格式
YAML文件扩展名
- .yml(主流)
- .yaml
上面两种后缀名都可以,以后更多的还是yml的。
yaml配置文件数据读取
读取配置文件数据的方式一共有如下三种:
- 使用@Value注解
使用@Value注解可以从配置文件中读取数据,注解中用于读取属性名引用方式是:${一级属性名.二级属性名....}
我们可以在BookController中使用@Value注解读取配合文件数据。如下
@RestController
@RequestMapping("/books")
public class BookController {
@Value("${lesson}")
private String lesson;
@Value("${server.port}")
private Integer port;
@Value("${enterprise.subject[0]}")
private String subject_00;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(lesson);
System.out.println(port);
System.out.println(subject_00);
return "hello , spring boot!";
}
}
- Environment对象(实际开发较少使用)
使用@Value读取到的数据非常零散,SpringBoot还可以使用@AutoWired注解注入Environment对象的方式读取数据。这种方式SpringBoot会将配置文件中所有的数据封装到Environment对象中。当需要用到数据时,只需调用Environment对象的getProperty(String name)方法获取。具体代码如下:
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private Environment env;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(env.getProperty("lesson"));
System.out.println(env.getProperty("enterprise.name"));
System.out.println(env.getProperty("enterprise.subject[0]"));
return "hello , spring boot!";
}
}
- 自定义对象
SpringBoot还提供了将配置文件中的数据封装到我们自定义的实体类对象中的方式。具体操作如下:
- 在实体类上添加@Component注解将实体类交给spring管理。
- 使用@ConfigurationProperties注解表示加载配置文件,在该注解中也可以使用prefix属性指定只加载指定前缀的数据
- 在BookController中使用@AutoWired进行注入
@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {
private String name;
private int age;
private String tel;
private String[] subject;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String[] getSubject() {
return subject;
}
public void setSubject(String[] subject) {
this.subject = subject;
}
@Override
public String toString() {
return "Enterprise{" +"name='" + name + '\'' +", age=" + age +", tel='" + tel + '\'' +", subject=" + Arrays.toString(subject) +'}';
}
}
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private Enterprise enterprise;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(enterprise.getName());
System.out.println(enterprise.getAge());
System.out.println(enterprise.getSubject());
System.out.println(enterprise.getTel());
System.out.println(enterprise.getSubject()[0]);
return "hello , spring boot!";
}
}
多环境配置
以后在工作中,对于开发环境、测试环境、生产环境的配置肯定都不相同。这意味着我们可能需要经常修改配置文件。SpringBoot为开发者提供了多环境的快捷配置,需要切换环境时只需要改一个配置即可。
不同类型的配置文件多环境开发的配置都不相同,接下来对不同类型的配置文件进行说明。
yaml文件
在application.yml中使用---
来分割不同的配置,spring.profiles
是用来给不同的配置起名字的。使用spring.profiles.active
来告知SpringBoot使用哪段配置。
application.yml的内容如下:
spring:
profiles:
active: test
---
# 开发
spring:
profiles: dev #给开发环境起的名字
server:
port: 80
---
# 生产
spring:
profiles: pro # 给生产环境起的名字
server:
port: 81
---
# 测试
spring:
profiles: test #给测试环境起的名字
datasource:
driver-class-name: com.
server:
port: 82
properties文件
properties类型的配置文件配置多环境需要定义不同的配置文件:
application-dev.properties、application-test.properties、application-pro.properties
SpringBoot只会默认加载名为application.properties的配置文件,所以需要在application.properties配置文件中设置启用哪个配置文件,例如使用如下命令表示使用application-pro.properties中的配置。
spring.profiles.active=pro
命令行启动参数设置
使用SpringBoot开发程序以后都是打成jar包,通过java -jar xxx.jar的方式来启动服务器。如何在jar包状态下切换配置文件。解决方式如下:
java -jar xxx.jar --spring.profiels.active=test
同时我们还可以通过这种方法临时修改端口号,命令如下:
java -jar xxx.jar --server.port=80
配置文件分类
SpringBoot定义了配置文件不同的放置位置的优先级不同,优先级由低到高如下:
- 1级:classpath:application.yml
- 2级:classpath:config/application.yml
- 3级:file(jar包所在目录下):application.yml
- 4级:file(jar包所在目录下):config/application.yml
SpringBoot整合Junit
SpringBoot整合Junit非常简单,步骤如下:
- 在测试类上添加@SpringBootTest注解
- 使用@AutoWired注入要测试的资源
- 定义测试方法进行测试
SpringBoot整合Mybatis
使用SpringBoot整合MyBatis也很简单,在创建模块是,需要选择mysql、mybatis的技术集。之后创建实体类、dao接口、测试类以及编写配置文件。这里有两点需要注意,1、我们需要在dao接口上添加@Mapper注释。2、数据库连接四要素以及指定数据源需要书写在配置文件中。
application.yml中的内容如下:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring_db
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
SpringBoot实现SSM框架案例
综合一下上面整合SpringMVC、Junit、MyBatis的步骤。
需要注意的是在SpringBoot程序中是没有webapp目录的,所以静态资源需要放在resources下的static下。