Spring Boot(一)

一、 Spring Boot(一)

SpringBoot简介

简化Spring应用开发的框架

整个Spring技术栈的一个大整合

J2EE开发的一站式解决方案

Hello World探究

  • pom.xml
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId><version>1.5.9.RELEASE</version>

上面的是Spring Boot的版本仲裁依赖
以后我们导入依赖默认是不需要写版本的(没有在dependencies中的自然需要声明版本号)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

spring-boot-starter:spring-boot场景启动器;上述帮我们导入了web模块正常运行所依赖的组件;

SpringBoot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。

  • 代码内的注解
/**
 * Created by Jazon on 2019/9/4.
 */
@SpringBootApplication
public class HelloWorldMainApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldMainApplication.class, args);
    }
}
1.@SpringBootApplication**: SpringBoot Application应用标注在某个类上说明是主配置类,应用要运行这个类的main方法启动SpringBoot应用
2.将自定义的包内组件注入到容器

这个注解是开启自动配置的,@AutoConfigurationPackage

@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {

}

@Import 将属性内的类注入到容器中
AutoConfigurationPackages.Registrar.class的作用是将主配置类(@SpringBootApplication标注的类)的所在包下面及所有子包里面的所有组件扫描到Spring容器中;

3.获得自动配置类的全类名
//导入组件的选择器
@Import(EnableAutoConfigurationImportSelector.class)

EnableAutoConfigurationImportSelector继承了AutoConfigurationImportSelector,此父类的selectImports方法会将所有需要导入的组件以全类名的方式返回,这些组件会被添加到容器中。
它会给容器中导入非常多的自动配置类(xxxAutoConfiguration),这些自动配置类会导入这个场景需要的所有组件,并配置好。有了自动配置类,免去了我们手动配置及注入的工作。

4.是如何获得上述的自动配置类的全类名的
SpringFactoriesLoader.loadFactoryNames(
				getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());

SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取key为EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们完成配置工作。
所有配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar内。

5.使用Spring Initializer快速创建Spring Boot项目
  • resource文件夹的目录结构
    • static:保存所有的静态资源
    • templates:保存所有的模板页面(嵌入式Tomcat,默认不支持JSP)
    • application.properties:SpringBoot应用的配置文件

配置文件

全局配置文件
  • yml:以数据为中心,不会将数据浪费到标签中。
YML基本语法
1.基本语法

k:(空格)v 表示一对键值对(空格必须有)

以空格的缩进来控制层级关系:只要是左对齐的一列数据,都是同一个层级的

server
  port: 8080
  path: /hello

属性和值也是大小写敏感;

2.值得写法

字面值:普通的值(数字、字符串、布尔).

字符串默认无需加单引号或双引号,双引号不会转义字符串里面的特殊字符;特殊字符会作为本身表示的意思。name: “zhangsan \n lisi”;输出:zhangsan 换行 lisi。单引号: 会转义特殊字符,特殊字符最终只是一个普通的字符串数据name: “zhangsan \n lisi”;输出:zhangsan \n lisi

对象、Map(属性和值)(键值对)

frined:
  lasttName: zhangsan
  age: 20

行内写法

friend: {lastName: zhangsan, age: 18}

数组

pets:
  - cats
  - dogs
  - pigs

行内写法

pets: [cats, dogs, pigs ]
properties语法

字面值:普通的值

friend.lastName=张三
friend.aage=20

对象、Map

friend.map.key1=value1

数组

friend.lists=a,b,c

IDEA中编码默认是UTF-8,需要将配置勾选,使其转换成asci码才能不乱码。

@Value@ConfigurationProperties
功能一个个指定批量注入配置文件中的属性
松散语法不支持,要求严格匹配支持,比如大写的N匹配-N
spEL支持@Value("#(11*12)")不支持
JSR303数据校验不支持支持比如@Email
复杂类型封装不支持支持

如果说,只是需要获取某一项值则使用@Value

@PropertySource(value = {“classpath:person.properties”})

加载制定的配置文件

@ImportResource(locations = {“classpath:beans.xml”})

导入Spring的配置文件让其生效
这种使用XML的方式不推荐,SpringBoot推荐的给容器添加组件的方式:
1、配置类=======Spring配置文件

配置文件占位符
1、写随机数
${random.value}、${random.int}
${random.int[1024,65536]}
${random.int(10)}

2、占位符可以获取之前配置的值,如果没有可以用:(冒号)指定默认值
Profile
多profile文件

在新建配置文件时命名

application-{profile}.properties,例如application-dev.properties

默认使用application.properties的配置

激活指定profile

1.在默认配置文件中spring.profile.active=dev

yml下的多profile

1.yml是使用—区分文档块的,并在第一个文档快指定激活

spring:
  profiles:
    active: dev
---
spring:
  profiles: dev
---
spring: 
  profiles: prod
配置文件加载位置
  • file:./config/ 项目路径下的config目录
  • file:./ 项目路径
  • classpath:/config/
  • classpath:/

优先级由高到低,而且还会互补配置。

自动配置原理
自动配置原理

1)、SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration

2)、@EnableAutoConfiguration作用:

  • 利用EnableAutoConfiguration给容器导入一些组件

  • 可以插件SelectImports()方法的内容

  • List configurations = getCandidateConfigurations(annotationMetadata, attributes)获取候选的配置

    • SpringFactoriesLoader.loadFactoryNames()
      扫描所有jar包类路径下 META-INF/spring.factories
      把扫描到的这些文件的内容包装成properties对象
      从properties中获取到EnableAutoConfiguration对应的值,然后把他们添加在容器中。
      

3)、每一个自动配置类进行自动配置功能;

4)、以HttpEncodingAutoConfiguration为例解释自动配置原理;

@Configuration//表示这是一个配置类
//指定HttpEncodingProperties的ConfigurationProperties功能
@EnableConfigurationProperties(HttpEncodingProperties.class)
@ConditionalOnWebApplication//Spring底层@Conditional注解,根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效。此注解意思是Web应用生效
@ConditionalOnClass(CharacterEncodingFilter.class)//判断当前项目有没有这个类CharacterEncodingFilter
@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)//判断配置文件中是否存在某个配置
public class HttpEncodingAutoConfiguration {

根据当前不同的条件,判断这个配置类是否生效。

5)、所有在配置文件中能配置的属性都是在xxxProperties类中封装着;配置文件能配置什么就可以参照某个功能对应的这个属性类

@ConfigurationProperties(prefix = "spring.http.encoding")//从配置文件中获取
public class HttpEncodingProperties {
日志使用

SpringBoot帮我们配置好了slf4j适配,当引入其他框架时,只需将其他框架内的日志依赖剔除,应用则会自动使用slf4j+logback。

原理(以log4j变为logback+slf4j为例,即springBoot的实现):

在这里插入图片描述

log4j-over-slf4j是slf4j提供的一个jar包,将log4j的接口转为了slf4j,而springboot的slf4j实现是logback,所以logback的配置文件也能影响到第三方库里的log4j的代码的输出日志。

1、默认配置

1、全局常规设置,在.properties或yml中配置

logging.level.com.atguigu=trace    
#logging.path= 
# 不指定路径在当前项目下生成springboot.log日志 
# 可以指定完整的路径; 
#logging.file=G:/springboot.log   
# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件 logging.path=/spring/log   
#  在控制台输出的日志的格式 
logging.pattern.console=%d{yyyy‐MM‐dd} [%thread] %‐5level %logger{50} ‐ %msg%n 
# 指定文件中日志输出的格式 
logging.pattern.file=%d{yyyy‐MM‐dd} === [%thread] === %5level === %logger{50} ==== %msg%n

2、指定配置文件,logback或logback-spring.xml,其中-spring.xml不由日志框架解析,由springBott解析,支持配置某种环境才生效。

3、切换框架

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值