Spring Boot基础学习

·  阅读 52

一、入门

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....

日志门面(抽象层)日志实现
JCL、SLF4j、jboss-loggingLog4j、JUL、Log4j2、LogBack

左边选一个门面,右边选一个实现

日志门店:slf4j;实现:log4j2

SpringBoot底层是Spring框架,Spring默认是JCL、SpringBoot选用的是slf4j和logback

分类:
后端
标签: