使用Spring Initializer快速创建Spring Boot项目
IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目;
选择我们需要的模块;向导会联网创建Spring Boot项目;
默认生成的Spring Boot项目;
·主程序已经生成好了,我们只需要我们自己的逻辑.
resources文件夹中目录结构
static :保存所有的静态资源;js css images ;
templates:保存所有的模板页面;( Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎( freemarker、thymeleaf ) ;
application.properties : Spring Boot应用的配置文件;
YAML (YAML isn't Markup Language )
以前的配置文件大多都使用的是xxxx.xml文件;
YAML∶以数据为中心,比json、xml等更适合做配置文件;
YAML配置例子:
server: port:8081
传统xml配置:
8081
YAML语法∶
1、基本语法
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
server: port: 8081 path: /hello //属性跟值之间也需要有空格
属性和值也是大小写敏感;
2、值的写法
字面量︰普通的值(数字,字符串,布尔)
k: v:字面直接来写﹔
字符串默认不用加上单引号或者双引号;
"":双引号会转义特殊字符,特殊字符会作为本身想表示的意思
name: "zhangsan ln lisi":输出;zhangsan换行lisi
":单引号不会转义字符串里面的特殊字符;特殊字符最终只是一个普通的字符串数据
name: 'zhangsan ln lisi':输出; zhangsan \n lisi
对象的行内写法
student: {id: 5, age: 20, name: 凯帝大哥哥}
数组/列表
用- 值来表示数组的的元素
studentList: - student1: {id: 5, age: 20, name: 凯帝大哥哥} - student2: {id: 5, age: 20, name: 凯帝大哥哥} - student3: {id: 5, age: 20, name: 凯帝大哥哥}或者studentList: - student1: id: 5 age: 20 name: 凯帝大哥哥 - student2: id: 5 age: 20 name: 凯帝大哥哥 - student3: id: 5 age: 20 name: 凯帝大哥哥
数组行内写法
studentList: {student1: {id: 9,age: 16},student2: {id: 10,age: 80},student3: {id: 9,age: 20}}
[img=239,0]C:\Users\Lenovo\AppData\Local\YNote\data\kaidi_dagege@163.com\a624642c10734fc2a77e3ffc86873f22\clipboard.png[/img]
属性名匹配规则(松散绑定Relaxed binding )
- person.firstName:使用标准方式
- person.first-name :大写用-
- person.first_name:大写用_
PERSON FIRST_NAME:
推荐系统属性使用这种写法
@ConfigurationProperties@Value
功能批量注入配置文件中的属性一个个指定
松散绑定(松散语法)支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持
@PropertySource({"指定properties"}):加载指定properties配置文件
@lmportResource:导入Spring的配置文件,让配置文件里面的内容生效
[img=620,0]C:\Users\Lenovo\AppData\Local\YNote\data\kaidi_dagege@163.com\f3e3ec49ce3b4c01a39cb5217942a629\clipboard.png[/img]
[img=620,0]C:\Users\Lenovo\AppData\Local\YNote\data\kaidi_dagege@163.com\f3871b8813724b908decbafe9e3f138e\clipboard.png[/img]
[img=620,0]C:\Users\Lenovo\AppData\Local\YNote\data\kaidi_dagege@163.com\3d57959a372249b3b276709e31a5d29d\clipboard.png[/img]
注:以上优先级经过测试,未必正确(随着版本的变化配置文件优先级发生了改变)
补充:配置文件优先级
在同一目录下,properties配置优先级 > YAML配置优先级。//所以我们在jar包启动时带上properties写法的配置可以覆盖配置
[img=620,0]C:\Users\Lenovo\AppData\Local\YNote\data\kaidi_dagege@163.com\87775a6d8d5b4821afce3d8d7bacd91a\clipboard.png[/img]
SpringBoot由外到内加载加载配置文件
[img=620,0]C:\Users\Lenovo\AppData\Local\YNote\data\kaidi_dagege@163.com\d78d662d487940daa2440f894f3a8285\clipboard.png[/img]
SpringBoot自动配置的核心原理
[img=620,0]C:\Users\Lenovo\AppData\Local\YNote\data\kaidi_dagege@163.com\96de7218d0e544efaabe86b1a181d1d8\clipboard.png[/img]
@Conditional注解有非常多的分支注解,用于对注入Bean时做条件判断,当条件满足是在会将Bean添加到IOC容器中。
在SpringBoot源码有非常多的自动配置类就用到了@Conditional注解来识别判断配置文件,根据配置文件判断是否装载Bean到IOC容器中。
[img=620,0]C:\Users\Lenovo\AppData\Local\YNote\data\kaidi_dagege@163.com\5e6c0973d1b04ee38731e343058a2a48\clipboard.png[/img]
关于市面上的日志
[img=620,0]C:\Users\Lenovo\AppData\Local\YNote\data\kaidi_dagege@163.com\eb92819eea49435b8bef671b1a22d6a8\clipboard.png[/img]
日志程序的实现原理是面向日志门面进行开发,也就是日志的抽象层。目的是让程序员在写程序中写入日志系统时可以面向日志的接口进行调用开发,这样一来不管日志的实现类如何变动,我们都不需要更改原有代码的日志API。
当然既然有了日志的接口,那么开发日志的人员就理应当遵守日志接口的规范来开发日志程序。
市面是有许多的日志实现我们该如何选择?
日志门面JCL早在2014年就停止了更新,jboos-loggin本身不适合普通程序员用,最终的选择的SLF4j日志门面。而日志实现选择log4j的升级版Logback,注意log4j2并不是log4j的作者开发的,它是apache借log4j的名号开发出的一种日志实现。
一般日志调用流程:
Application ——》 slf4j ——》 logback 或者 Application ——》 slf4j ——》 适配层 ——》 log4j
还有的情况是一个程序中使用到了不同的框架,而框架内部使用到了各不相同的日志实现,此时麻烦的事情出现了,不同的日志做不同的输出格式不统一输出、位置不统一、记录方式不统一。给开发人员造成很多困惑,因此有产生了一成名为包装成的api
Application ——》日志统一转换包装层 ——》 slf4j ——》 适配层 ——》 log4j
如何做到日志实现的统一?
1)将原有的其他日志框架排除掉
2)用中间包来替换原有的日志框架
3)导入其他slf4j的实现
SpringBoot的日志管理就是用上面的方式进行日志统一的,需要注意的是如果我们导入了其他框架依赖有log日志实现包的一定要排除掉它所依赖的日志包,否则会和springboot的日志统一转换包产生冲突
日志级别(由低到高,日志级别由低向高兼容)
trace:跟踪日志记录,记录跟踪信息
debug:调试日志级别,记录开发中的调试信息
info:自定义一些输出观测日志信息
wran:警告日志级别
errot:错误日志级别
使用日志记录器
//通过日志抽象工厂获取日志计量器Log log = LogFactory.getLog(getClass());//SpringBoot默认日志级别是infolog.trace("跟踪日志级别");log.debug("调试日志级别");log.info("信息日志级别");log.warn("警告日志级别");log.error("错误日志级别");
SpringBoot默认日志设置
[img=620,0]C:\Users\Lenovo\AppData\Local\YNote\data\kaidi_dagege@163.com\5d8bc1873c68417686abef1de6d8c431\clipboard.png[/img]
logging: level.cn.kgc: WARN file:# 指定日志输出文件路劲# path: / name: mylog.log pattern:# 控制台日志输出格式 console:# 文件日志输出格式 file:
嵌入式Tomcat不支持jsp
SpringBoot支持其他的模板引擎,例如Thymeleaf语法简洁且功能强大
//导入thymeleaf需要的依赖 org.springframework.boot spring-boot-starter-thymeleaf