1.SpringBoot简介
SpringBoot
是用来简化Spring
应用的初始搭建以及开发过程
先回顾一下SpringMVC
的开发过程:
- 创建工程,并在
pom.xml
配置文件中配置所依赖的坐标:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
- 编写
web3.0
的配置类:
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
- 编写
SpringMVC
的配置类:
@Configuration
@ComponentScan("com.psj.controller")
public class SpringMvcConfig {}
- 编写
Controller
类:
@Controller
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'info':'springmvc'}";
}
}
可以看到前三步都是在搭建环境,基本固定,
SpringBoot
可对这三步进行简化
SpringBoot快速入门
开发步骤如下:
- 创建新模块:
- 打包方式需设置为
jar
- 创建好的工程中不需要创建配置类
- 创建好的项目会自动生成其他的一些文件,可删除,如
.mvn、.gitignore
等
- 创建
Controller
- 启动服务器:运行工程不需要使用本地的
Tomcat
和插件,只运行项目Application
类即可
前端开发人员要测试前端程序就需要后端开启服务器,为了摆脱这个受制,前端开发人员要在自己电脑上安装
Tomcat
和Idea
然后启动程序。使用SpringBoot
后可以将工程打成jar
包,该包运行不依赖于Tomcat
和Idea
,如何打包?
- 打包:构建
SpringBoot
工程时已在pom.xml中配置了插件(通过该插件才能打包为能直接启动的jar
包,maven
直接打成的jar
包无法直接启动),点击package
指令即可(默认打为jar
包)<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
- 启动:前端人员进入
jar
包所在位置,在 命令提示符中输入命令即可启动项目jar -jar SpringBoot_01_quickstart-0.0.1-SNAPSHOT.jar
SpringBoot概述
SpringBoot
程序优点:
- 自动配置:解决
Spring
程序配置繁琐的问题- 起步依赖:解决
Spring
程序依赖设置繁琐的问题
starter
:定义了当前项目使用的所有项目坐标,以减少依赖配置parent
:所有SpringBoot
项目要继承的项目,定义了若干个坐标版本号(往上追踪可以看到里面已配置好了properties
用于定义依赖版本,以及dependencyManagement
标签进行依赖版本锁定),减少依赖冲突
- 辅助功能:比如启动
SpringBoot
程序时既没有使用本地的tomcat
也没有使用tomcat
插件,而是用SpringBoot
内置的服务器(通过追踪spring-boot-starter-web
可以看到依赖了spring-boot-starter-tomcat
)
2.配置文件
配置文件格式
SpringBoot
程序的配置文件名必须是application
,后缀可以有三种:
application.properties
:server.port=80
application.yml
:server: port: 80
application.yaml
:server: port: 80
上述三种配置文件的优先级:
application.properties > application.yml > application.yaml
yaml格式
YAML(YAML Ain't Markup Language)
是一种数据序列化格式YAML
的文件扩展名为.yml
(主流)和.yaml
- 语法规则:
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(空格的个数并不重要,保证同层级的左侧对齐即可)
- 属性值前面添加空格(属性名与属性值之间使用**
冒号+空格
作为分隔)#
表示注释
yaml配置文件数据读取
有以下几种读取配置数据(即
application.yml
)的方式:
- 使用
@Value
注解,注解中引用方式是${一级属性名.二级属性名……}
:
@Value("${lesson}")
private String lesson;
@Value("${server.port}")
private Integer port;
@Value("${enterprise.subject[0]}")
private String subject_00;
- 使用
@Autowired
注解,该方式会将配置文件中所有的数据封装到Environment
对象中,使用哪个数据调用Environment
对象的getProperty
方法获取:
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(environment.getProperty("lesson"));
return "hello , spring boot!";
}
- 自定义对象,即将配置文件中的数据封装到自定义的实体类对象中,步骤如下:
- 将实体类
bean
的创建交给Spring管理(即在类上添加@Component
注解)- 实体类中使用
@ConfigurationProperties
注解定义该类读取配置属性信息(可使用prefix
属性指定只加载指定前缀数据)- 在
Controller
中进行注入
多环境配置
工作中,对于开发/测试/生产环境的配置都不同,如何快速切换?
- 在
application.yml
中配置,使用---
来分割不同的配置- 命令行启动参数设置:
java –jar xxx.jar –-spring.profiles.active=test
多环境开发兼容问题
在
Maven
中可以配置多环境,SpringBoot
也可以,该以哪个为主?Maven
为主,因为是它负责把项目打为jar
包(项目启动依赖jar
包)具体操作如下:
application.yml
中使用${profile.active}
将启动环境设置为pom.xml
中配置的- 在
pom.xml
引入插件maven-resources-plugin
(用于编译配置文件,这样application.yml
中${xxx}
才能被解析)
配置文件分类
开发完后需要测试人员进行测试,由于测试环境和开发环境的很多配置都不同,所以测试人员在运行开发好的工程时要临时修改很多配置,该如何简化操作?在高优先级的配置文件进行配置
SpringBoot
中4级配置文件放置位置:级别越高优先级越高,前两级为开发服务,后两级为上线服务1级:
classpath:application.yml
2级:
classpath:config/application.yml
3级:
file:application.yml
(file
指的是生成的jar
包所在的目录)4级:
file:config/application.yml
3.SpringBoot整合junit
Spring
整合junit
如下,上面的注解都是重复的内容:
@RunWith(SpringJUnit4ClassRunner.class) // 指定运行器
@ContextConfiguration(classes = SpringConfig.class) // 指定配置类或者配置文件
public class UserServiceTest {
@Autowired
private BookService bookService;
@Test
public void testSave(){
bookService.save();
}
}
而
SpringBoot
整合junit
比较容易,但是要注意引导类(即xxxApplication.java
)所在包必须是测试类所在包及其子包,要不然要在@SpringBootTest
设置启动类的路径:
- 在测试类上添加
SpringBootTest
注解- 使用
@Autowired
注入要测试的资源- 定义测试方法进行测试
4.SpringBoot整合mybatis
Spring
整合Mybatis
需要定义很多配置类:
SpringConfig
配置类:导入下面两个配置类并定义扫描的包JdbcConfig
配置类:定义数据源MybatisConfig
配置类:定义SqlSessionFactoryBean
以及映射配置对于
SpringBoot
只需要以下几步:
- 定义实体类和
dao
接口- 编写
application.yml
配置数据库连接信息并指定使用什么数据源- 在
dao
接口上加@Mapper
(替代了之前MybatisConfig
中的映射配置)
5.案例
使用
SpringBoot
将之前整合好的SSM
案例进行重新实现,主要分为以下步骤:
pom.xml
:配置起步依赖,必要的资源坐标(比如druid
)application.yml
:设置数据源、端口等- 将
config
文件夹下的配置类全部删除- 在
dao
接口中设置@Mapper
- 将页面放置在
resources
目录下的static
目录中