一. 快速上手springBoot
1.1 简介
SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程§
1.2 创建SpringBoot工程
-
配置项目结构和java版本
-
选择依赖(这里只选择了web开发)
-
搭建成功
-
运行程序
-
访问网页
1.3 springBoot程序优点
- 起步依赖(简化依赖配置):Spring-boot将所有的依赖的版本统一管理,当自己使用依赖时直接使用即可,避免了包冲突问题
- 自动配置(简化常用工程相关配置)
- 辅助功能(内置服务器…)
1.4 SpringBoot的Parent
所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的(依赖版本管理)
- 开发SpringBoot程序要继承Spring-boot-starter-parent
- spring-boot-starter-parent中定义了若干个依赖管理
- 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
- 继承parent的形式也可以采用引入依赖的形式实现效果(阿里云就是用的这个)
1.5 springBoot的starter:spring-boot-starter-web.pom
starter时SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的(依赖管理)
- 开发SpringBoot程序需要导入坐标时通常导入对应的Starter
- 每个不同的Starter根据功能不同,通常包含多个依赖坐标
- 使用starter可以实现快速配置的效果,达到简化配置的目的
在实际开发时,在使用任意坐标时,仅仅写GAV终端中G和A,V由SpringBoot提供,除非SpringBoot未提供对于版本的V,如果发生坐标错误,再自己手动指定version(注意出现版本冲突)
1.6 SpringBoot的引导类(整个SprinBoot工程的入口,运行main方法就可以启动项目)
- SpringApplication.run(GetspringApplication.class, args)实际上是实例化了SpringBoot的容器类(和SpringIOC一样存放Bean对象)
- @SpringBootApplication用来加载配置
- SpringBoot工程运行后初始化spring容器,扫描引导类所在包加载bean
1.7 内嵌Tomcat容器
在下面这个包里面内嵌了Tomcat容器
- 内嵌Tomcat服务器是SpringBoot辅助功能之一
- 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理
- 变更内嵌服务器思想是去除现有服务器,添加全新的服务器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
在SpringBoot中内置了3款服务器:
- tomcat(默认):apache出品,应用面广,负载了若干较重的组件
- jetty:更轻量级,负载性能远不及tomcat
- undertow:负载性能勉强跑赢tomcat
二. Rest开发简介(springMVC知识补充)
2.1 REST简介
REST(Representational State Transfer)表现形式转换,一种访问资源的格式
- 传统风格资源描述形式
http://localhost/user/getByID?id=1(get方式)
http://localhost/user/saveUser(post方式) - Rest风格
http://localhost/user/1(和上面的get方法一样的效果)
http://localhost/user(和上面的post方式一样的效果) - 优点
- 隐藏了资源的访问行为,无法通过url得知对资源是何种操作
- 书写简化
- 按照Rest风格访问资源时使用行为动作区分对资源进行了何种操作
- http://localhost/users (get查询时是用于查询全部用户信息)
- http://localhost/users/1 (get查询时是查询ID为1的用户的信息)
- http://localhost/users (POST新增/保存时用于添加用户信息)
- http://localhost/users (PUT修改/更新时用于修改用户信息)
- http://localhost/users/1 (DELETE删除时用于删除ID为1的用户信息)
上述行为是约定方式,约定不是规范是可以打破的,所以称为REST风格而不是REST规范,描述模块的名称通常使用的是复数,也就是加s的格式描述,表示此类资源,而非当个资源,例如上面的users
2.2 REST简单案例
- http://localhost/users/1地址执行查询id=1的用户
- 设定http请求动作(http://localhost/users/1)
- 设定请求参数(路径变量)(value="/users/{chailong})
- method:请求动作
- @PathVariable:形参注解,用于绑定路径参数与处理器方法形参
@RequestMapping(value="/users/{chailong},method=RequestMethod.GET)
@ResponseBody
public String getById(@PathVariale Integer chailong)
{
//查询操作
}
2.3 REST改进
基于上面的简单案例我们对Rest的使用可以进一步简化
@RestController
@RequestMapping("/books") //加在类上,就代表类下的所有方法都加了这个注解
public class BookController{
@PostMapping //这个等于@RequstMapping(method=RequestMethod.Post)
public String sava(@RequestBody Book book)
{
......
}
@DeleteMapping("/{id}") //这个等于@RequstMapping(value="/{id}" method=RequestMethod.Delete)
public String sava(@RequestBody Book book)
{
......
}
三、基础配置
springBoot中导入对于的Starter后会提供相应的配置,在springBoot的核心配置文件application.properties修改配置(以
3.1 属性配置
修改服务器端口
#修改服务器端口
server.port=80
修改Banner
原始的banner为
#修改banner
##关闭banner
spring.main.banner-mode=off
##修改banner图片
spring.banner.image.location=banner.jpg
修改日志
#日志配置
##修改日志级别为Debug
logging.level.root=debug
3.2 种配置文件类型
- application.properties(传统格式/默认格式)
- application.yml (主流格式)
- application.yaml
注意:上面三个配置文件都可以对项目生效,但三个配置文件如果同时存在时会存在加载优先级,其中优先级最高的是properties文件,其次是yml配置文件,最后是yaml配置文件
3.3 yaml数据格式
- 简介:Yaml(YAML Ain’t Markup Language),一种数据序列化格式
- 优点:
- 容易阅读
- 容易与脚本语言交互
- 以数据为核心,重数据轻格式
- YAML文件扩展名
.yml(主流)
.yaml
- yaml语法规则
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系(类似于Python),同层级左侧对齐,只运行使用空格(不要使用Tap键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- #表示注释
country: china
province: beijing
city: beijinig
area: haidian
port: 8080
party: true
birthday: 1949-10-01
#对象属性
user:
name: itcast
age: 16
#写多个数据
likes:
- game
- music
- sleep
- 123
likes2: [game,music,sleep]
#对象数组
users:
- name: zhangs
- age: 18
-
name: lisi
age: 20
user3: [{name:zhangsan,age:18},{name:lisi,age:17}]
3.4 读取yaml单一属性数据
使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名…}
yaml数据
country: beijing
user:
name: chailong
age: 16
likes: [sleep,reading,eating]
控制器代码
//rest模式
@RestController
@RequestMapping("/books")
public class BookController {
//读取yaml中的单一属性数据
@Value("${country}")
private String country1;
@Value("${user.name}")
private String name;
@Value("${likes[1]}")
private String hobby;
@GetMapping
public String getById(){
System.out.println(country1);
System.out.println(name);
System.out.println(hobby);
return "chailong";
}
}
运行结果:
3.5 yaml文件中变量的引用
使用${属性名}直接引用文件中的其他变量
age1: 14
#使用${属性名}引用数据
info:
name: jack
age: ${age1}#引用
3.6 读取yaml全部属性的数据
封装全部数据到Environment对象封装全部配置信息,使用@Autowired自动装配数据到Environment对象中
import org.springframework.core.env.Environment;
@RestController
@RequestMapping("/books")
public class BookController {
//使用自动装配将所有的数据装配到env中
@Autowired
private Environment env;
@GetMapping
public String getById(){
System.out.println(env.getProperty("info.age"));//读取数据
return "chailong";
}
}
3.7 读取yaml引用类型数据
- 读取流程
- 创建一个类用于封装要封装的数据
- 由Spring帮助我们去加载数据到对象中(要告诉Spring加载这组信息)
- 从Spring中直接获取数据
- 在yaml中定义数据
datasource:
driver: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/spring_db
username: root
password: root666
- 定义数据用于封装数据
@Component //定义为spring的bean
@ConfigurationProperties("datasource")
public class Mydatasource {
private String driver;
private String url;
private String username;
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 getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
- 控制器中装配
@Autowired
private Mydatasource data;