一、入门
1、编写基本的SpringBoot项目
1、创建maven工程
2、导入依赖
3、编写主程序
/**
* 表明这是一个SpringBoot的主程序类
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
// Spring应用启动起来
SpringApplication.run(MainApplication.class, args);
}
}
2、HelloWorld探究
1、POM文件
1、父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
它的父项目是spring-boot-dependecies:来真正管理springboot应用的所有依赖版本
有一个<propertes>定义了每一个依赖的版本
SpringBoot的版本仲裁中心
以后导入依赖默认是不需要写版本;dependecies中没引入的需要声明版本号
2、场景启动器
spring-boot-stater-web
spring-boot-stater:
SpringBoot场景启动器,声明了一些依赖导入,导入web模板正常运行需要依赖的组件
SpringBoot将所有的功能场景都抽取处理啊,做成一个个的starters(启动器),只需要在项目里引入这些相关场景的依赖。版本由父pom自动控制,一个功能对应一个场景启动器
2、主程序类
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
// Spring应用启动起来
SpringApplication.run(MainApplication.class, args);
}
}
@SpringBootApplication 标注的类是SpringBoot的主配置类,运行该类main方法来启动应用
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
1、 @SpringBootConfiguration:表示是SpringBoot的配置类,底层是@Configuration配置类=配置文件,配置类也是容器中的一个组件
2、 @EnableAutoConfiguration:开启自动配置功能。是一个组合注解
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
1、@AutoConfigurationPackage:自动配置包。
将主配置类的所在包及下面所有子包里面的所有组件扫描到Spring容器中
2、@Import({AutoConfigurationImportSelector.class}):给容器中导入一个组件;导入的组件由AutoConfigurationImportSelector.class(导入组件的选择器)指定。
AutoConfigurationImportSelector.class该类下的String[] selectImports()方法,将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中。会给容器中导入非常多的自动配置类(xxxAutoConfiguration)
todo 截图自动配置类内容
AutoConfigurationImportSelector.getCandidateConfigurations()方法
-> SpringFactoriesLoader.loadFactoryNames():从"META-INF/spring.factories"路径下,spring-boot-autoconfiguration包下的META-INF/spring.factories文件里面定义的org.springframework.boot.autoconfigure.EnableAutoConfiguration字段定义的配置类,导入到容器中,自动配置类就生效
3、使用Spring Initializer快速创建项目
选中自己需要的模块,联网自动下载依赖
默认生成的内容:
-
主程序已经生成好,无需手动编写Application类
-
resources文件夹。
- static:保存所有静态资源:imags...
- templates:保存所有模板页面,默认jar包方式,嵌入式Tomcat,默认不支持jsp页面,可以使用模板引擎(freemarker、thymeleaf)
- application.properties:Spring Boot应用的配置文件。可修改一些默认设置,ex:server.port=XXX
二、配置文件
1、配置文件
SpringBoot使用一个全局的配置文件
- application.properties
- application.yml
作用:修改自动配置的默认值
YAML(YAML Ain't Markup Language):以数据为中心的配置
- a:是一个标记语言
- isn't:不是一个标记语言
标记语言:
yml配置案例
server:
port: 8090
2、YAML语法
1、基本语法
K: [空格]V 表示一个键值对
以空格缩进来控制层级关系,左对齐的一列数据是同一层级
属性和值也是大小写敏感
2、值的写法
字面量:普通的值(数字、字符串、布尔)
- k: v:字面量直接写、字符串默认不用加引号
- "":不转义字符串中特殊字符
- '':会转义特殊字符
对象:属性+值,键值对
- k: v:下一行写对象的属性和值
friends:
lastName:zhangsan
age:20
-
行内写法
friends: {lastName:zhangsan, age: 18}
数组:
用-值表示数组中的一个元素
pets:
- cat
- dog
- pig
pets: [cat,dog,pig]
3、获取配置文件值
1、将配置文件中配置的属性值映射到组件中@ConfigurationProperties(prefix = "xxx"):将本类中的所有属性和配置文件中值进行绑定
2、导入配置文件处理器
spring-boot-configuration-processor
单元测试
@SpringBootTest:使用SpringBoot的单元测试
@RunWith(SpringRunner.class) :驱动器
3、properties配置文件
1、语法
2、获取配置文件值
1、@ConfigurationProperties(prefix = "xxx");编码问题:FileEncodings:设置转换成ASCII
2、@Value:Spring的底层注解,为字段赋值。@Value(${xxx.yyy}/表达式/字面量)
获取map的值:
| @ConfigurationProperties | @Value | |
|---|---|---|
| 功能 | 导入一个类的属性定义 | 单个字段的导入 |
| 松散绑定 | last-name=lastName | 不支持 |
| spEl | 不支持 | 支持 |
| 复杂类型封装 | 支持 | 不支持 |
JavaBean和配置文件进行映射时->@ConfigurationProperties
单个字段获取配置值->@Value
三、Profile
用来支持多环境配置
1、多Profile文件
1、properties文件
主配置文件编写时,文件名可为application-{profile}.properties/yaml
2、yaml文件
---:同一个文件中划分不同的document
2、激活指定profile
- Spring-profiles.active = xxx:配置文件中指明激活指定profile
- 命令行:idea运行时指定。--spring.profiles.active = dev。优先级更高
- 将项目打成jar包(打完的包在target目录下),java -jar xxx.jar --spring.profiles.active = dev
- 虚拟机参数。VM options:-Dspring-profiles.active=dev
四、日志
1、日志框架
JUL、JCL、JBoss-logging、logback、log4j、log4j2、slf4j....
| 日志门面(抽象层) | 日志实现 |
|---|---|
| Log4j、 |
左边选一个门面,右边选一个实现
日志门店:slf4j;实现:log4j2
SpringBoot底层是Spring框架,Spring默认是JCL、SpringBoot选用的是slf4j和logback