1. 什么是SpringBoot
基于Spring框架开发的框架,目的:简化Spring应用初始化的搭建和开发过程
Spring Boot 只是 对springFramework 框架封装, 简化了开发(spring 整合 spring mvc ,mybatis 还有其他第三方的插件)
- Spring Boot整合了许多框架和第三方库配置,几乎可以达到“开箱即用”。
开箱即用:几乎0配置,可以不做任何的配置,只需引入依赖,就可以使用
约定优于配置:Spring Boot配置很多默认规则,不需要bean.xml 进行配置,装配,消灭了 bean.xml
2. SpringBoot和SpringMVC的区别
Spring 框架**就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring 的ioc和 aop,ioc 提供了依赖注入的容器, aop解决了面向横切面的编程,然后在此两者的基础上实现了其他延伸产品的高级功能。
**Spring MVC提供了一种轻度耦合的方式来开发web应用。**它是Spring的一个模块,是一个web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。解决的问题领域是网站应用程序或者服务开发——URL路由、Session、模板引擎、静态Web资源等等。
Spring Boot实现了自动配置,降低了项目搭建的复杂度。它主要是为了解决使用Spring框架需要进行大量的配置太麻烦的问题,所以它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box)。
Spring Boot只是承载者,辅助你简化项目搭建过程的。如果承载的是WEB项目,使用Spring MVC作为MVC框架,那么工作流程和你上面描述的是完全一样的,因为这部分工作是Spring MVC做的而不是Spring Boot。
对使用者来说,换用Spring Boot以后,项目初始化方法变了,配置文件变了,另外就是不需要单独安装Tomcat这类容器服务器了,maven打出jar包直接跑起来就是个网站,但你最核心的业务逻辑实现与业务流程实现没有任何变化。
3. SpringBoot的搭建
1. 创建java maven功能
<!--引入父依赖
当前工程 继承 父类工程 spring-boot-starter-parent pom
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<!-- 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>
</dependency>
</dependencies>
2. 创建启动类
启动类的位置:在项目的根目录下面,也就是和controller,dao,service等文件夹是同一个目录。
这是一个特殊的地方,在启动类里可以做很多事情
- 写个注解,告诉容器这是启动类,项目从这里启动 @SpringBootApplication
- 写个注解,扫描所有dao层里面的接口并且注入到容器中取 @MapperScan(“com.zx.dao”)
- 代码如下:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//标记当前类是当前应用的启动类 只有一个
// *******重点:当前类只能在项目中的根目录 不能放在其他目录(controller,service)中
@SpringBootApplication// 完成了springboot 自动装配
public class MyApplication {
public static void main(String[] args) {
// 启动springboot 应用
SpringApplication.run(MyApplication.class,args);
}
}
3. 创建一个控制器类
控制器类里有两个注解
- @RestController:返回给html界面json数据
- @Controller:只是声明该类是一个控制器,可用于跳转jsp页面
/**
* 第一个springboot 控制类
*/
@RestController// 等价于 @Controller +@ResponseBody
public class HelloController {
@RequestMapping("/test1")
public String test1(){
return "hello word";
}
}
4. 启动
直接在启动类run就好了
5. 配置服务器端口号
在application.properties文件里写
# 注释
# 配置tomcat 端口号
server.port=8088
4. SpringBoot配置文件
配置文件的实现方式:
- 以后缀名.properties或者.yaml的配置文件的形式存在于resources问价下面
- 用@Configuration标记
配置文件在resources目录中,resources和java是同级目录
yaml也是一种配置文件,功能和properties文件是一样的,是一种超json格式
配置文件分为默认的(application.properties),你可以写一个实体类,在上面添加注解@Component,然后配置自动提示,然后你就可以在默认的配置文件里写属性,而且会有自动提示。另外你还需要配置一个批量读取配置文件里的属性的注解@ConfigurationProperties(prefix = “student”),有了这个注解你才可以读取到属性的内容,不然无法读取。例如:
package com.qfedu.entity; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.Email; import java.util.List; import java.util.Map; @Component// 加入到容器中 @ConfigurationProperties(prefix = "student")// 批量读取配置文件数据 必须有setter 方法 // 读取配置文件application.properties application.yaml 中以 student 开头的数据 @Validated // 开启格式校验 public class Student { private int id; private String name; private int age; @Email// 校验当前属性必须符合 email格式 private String email; /** * 爱好 list */ private List<String> hobby ; /** * 科目对应成绩 map */ private Map<String,Integer> course; public int getId() { return id; } public void setId(int id) { this.id = id; } 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 List<String> getHobby() { return hobby; } public void setHobby(List<String> hobby) { this.hobby = hobby; } public Map<String, Integer> getCourse() { return course; } public void setCourse(Map<String, Integer> course) { this.course = course; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", email='" + email + '\'' + ", hobby=" + hobby + ", course=" + course + '}'; } }
student.id=100 student.name=xiaoming student.age=19 #配置 集合属性 属性之间以 ,分割 student.hobby=pingpang,basketball,football #配置 map 属性 student.course.math=99 student.course.english=100
如果你想要自定义一个配置文件并且还想在配置文件里编辑内容的时候有自动提示,需要做如下的配置:
<!-- Spring Boot提供的配置处理器依赖 作用就是:让自定义属性配置 在编写配置文件时有提示: 必须先编译才会有提示 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <!-- #####完成上述配置会后,需要使用maven的compile功能-->
1. 格式校验功能
你可以在实体类上加上注解@Validated,然后在属性上添加@Email,@Max等注解,这样在你写这些实体类的属性的时候,框架会帮你自动校验你写的数据是否正确。
2. 批量读取自定义配置文件
配置文件分为自定义和系统约定好的两种(约定大于配置),系统固定好的:application.properties, 你自己写好的:mysql.properties,,那么我们应当如何读取自定义配置文件?
-
创建一个和配置类文件内容对应的实体类,并且在实体类上加相应的注解
@Component @ConfigurationProperties(prefix = "jdbc")//只能读取 application.properties application.yaml @PropertySource(value = "mybatis.properties") //如果读取自定义配置文件 必须使用 @PropertySource(value = "mybatis.properties") 制定路径 public class JdbcProperties { private String driver; private String url; private String name; private String password; public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
注解解释:
@Component:将实体类加入到容器中去
@PropertySource(value = “mybatis.properties”) //如果读取自定义配置文件 必须使用 @PropertySource(value = “mybatis.properties”) 制定路径,如果你使用默认的配置文件application.propreties,就不用配置该属性
@ConfigurationProperties(prefix = “jdbc”) 这个注解是让你的实体类和配置文件里面的以“jdbc”开头的属性的 值 进行匹配,jdbc相当于是键,配置文件时键值对的形式