SpringBoot(一)主程序注解、自动配置类、配置文件、日志框架

1.创建一个Spring Boot工程

2.导入Spring Boot 依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	
    //继承一个父类
    //该父项目还依赖另一个父项目dependencies,该项目定义里大部分jar包依赖版本,所以导入依赖默认可以不写版本号(部分除外)
    <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	
	<properties>
		<java.version>1.8</java.version>
	</properties>
        
	
	<dependencies>
        WEB模块启动器:帮助导入所有WEB可以正常运行的Jar包
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>
        
	//maven-plugin插件,可以直接将项目打为jar包:右侧maven插件直接点击packge打包,包存在target。
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

3.Spring Boot主程序

  • 创建一个主程序类,添加主程序标注注解 @SpringBootApplication
  • 内置Tomcat可直接启动项目
@org.springframework.boot.autoconfigure.SpringBootApplication
public class SpringBootApplication {
    public static void main(String[] args) {
        //Spring 应用启动
        SpringApplication.run(SpringBootApplication.class);
    }
}

4.启动器

  • Pom文件中,Spring-boot-starter:Spring-boo场景启动器:帮我们导入各模块所需要的的jar包,例如:spring-boot-starter-web。需要用什么功能就导入相关场景的starter

5.@SpringBootApplication内置注解解释

@SpringBootConfiguration:

1. 作用:标注Spring Boot的配置类 其他写法@Configuration
2. 配置类相当于 -- 配置文件

@EnableAutoConfiguration:

作用:开启自动配置功能
5.2.1 @AutoConfigurationPackage(自动配置包) @Import({Registrar.class}):给容器中导入一个组件Registrar.class,由该组件将主配置类所在包下所有组件扫描到Spring容器

5.2.2 @Import({AutoConfigurationImportSelector.class}):给容器中导入AutoConfigurationImportSelector.class组件(组件选择器),由该组件给容器中导入很多自动配置类(组件)并配置好,例如:AOP,ES等

**注:org.springframework.boot:spring-boot-autoconfigure ----  J2EE的整体自动配置都在该jar包

6.配置文件

YAML基本语法

1.k:空格V
2.集合,数组,对象写法自行百度

配置文件中配置中文

解决配置文件中文乱码问题

在这里插入图片描述

配置文件相关注解

1.读取配置文件注解(默认读取全局配置文件)
@Component
//@ConfigurationProperties获取配置文件值方式 需要配合@Component将该类标注为组件
@ConfigurationProperties(prefix = "person")
//数据校验,给成员变量上添加注解表示校验格式,具体注解自行百度
@Validated
public class person {
    //@Value获取配置文件值方式
    @Value("${xxx}")
    private String  name;
    //SpEL
    @Value("{11*33}")
    private String  password;
}
两者区别
@ConfigurationProperties@Value
功能批量注入配置文件中的属性单个指定
松散绑定支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装(对象,集合等)支持不支持
  • 松散绑定:配置文件中的key 和 成员变量名称可以大致相同,不用完全一样
  • SpEL:Spring 表达式
2.指定配置文件注解
//注:只能用于properties配置文件
@PropertySource(value = "classpath:配置文件在resource文件夹下的路径")
3.读取外部配置文件
//作用在Spring Boot主程序注解上
 //不推荐使用
@ImportResource(locations = {"classpath:配置文件在resource文件夹下的路径"}): 
4. Spring Boot推荐给容器中添加组件的方式: 配置类
//标记当前类为配置类  == 配置文件
@Configuration
public class MyAppConfig {
    //将该方法的返回值作为组件添加到容器中,容器中这个组件默认id(名称)是该方法名
    @Bean
    public HelloService helloService(){
        System.out.println("配置类给容器中添加组件了、、、");
            return new HelloService();
        }
}

配置文件占位符

1.随机数
person.password = ${random.int}
//其他随机值用法自行百度 random

7.Profile多环境配置文件

  • 主要用于设置多环境下不同的配置文件

7.1 多Profile文件方式

文件名:application-dev.properties / application-prd.properties 等
//*注:默认使用主配置文件的配置
激活其他环境配置文件: 在主配置文件中配置:spring.profiles.active = dev/prd

7.2 yml多文档快方式

#文档块语法:--- 来分割成文档块,每一个文档块相当于一个配置文件
#文档配置:
spring:
	profiles:dev/prd/xxx
#激活文档配置:
Spring:
	profiles:
		active:dev/prd/xxx

7.3 其他激活profile方式

命令:--spring.profiles.active=dev/prd/xxx
  • 两种激活profile方式

在这里插入图片描述

8.配置文件加载位置

//Spring Boot项目启动时会扫描application.properties或application.yml文件
//优先级:由高到低,高优先级配置会覆盖低优先级的配置(值覆盖重复的配置),其他配置互补
-1:file/config/xxxx:项目包下创建config包中的配置文件
-2:file/xxxx:项目包下的配置文件
-3:classpath/config/xxx:模块Resource文件夹下config包中的配置文件
-4:classpath/xxx:模块Resource文件夹下配置文件
//注:项目打包后运行也可以通过 项目包 -jar spring.config.location=配置文件路径 来加载新的配置文件(最高优先级)

9.自动配置原理

9.1 自动配置流程:

  • @SpringBootApplication(主程序注解) --> @EnableAutoConfiguration(开启自动配置) --> @Import({EnableAutoConfigurationImportSelector.class})(加载Selector组件,通过Selector组件加载SpringBoot提供的大量自动配置类)
    

9.2 自动配置类举例

  • HttpEncodingAutoConfiguration:Http编码自动配置 ,帮助我们解决乱码问题
//表示这是一个配置类,并将该类作为组件加入容器
@Configuration

//启动指定类的ConfigurationProperties功能
@EnableConfigurationProperties({HttpEncodingProperties.class})

//Conditional:Spring底层注解:根据条件来进行判断,条件成立配置类才会生效
//判断当前项目是否是  WEB 应用
@ConditionalOnWebApplication

//判断当前项目 是否存在 CharacterEncodingFilter类:乱码解决过滤器
@ConditionalOnClass({CharacterEncodingFilter.class})

//判断配置文件中是否存在 spring.http.encoding.enabled配置  matchIfMissing = true 无论是否存在 判断都成立
@ConditionalOnProperty(
    prefix = "spring.http.encoding",
    value = {"enabled"},
    matchIfMissing = true
)
public class HttpEncodingAutoConfiguration {
    //该类的 成员属性 已经通过注解与配置文件中的配置绑定
    private final HttpEncodingProperties properties;

    public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
        this.properties = properties;
    }
	//给容器中添加一个组件,这个组件的部分值需要从 properties中获取
    @Bean
    //判断容器中是否 存在CharacterEncodingFilter组件: 不存在才添加
    @ConditionalOnMissingBean({CharacterEncodingFilter.class})
    public CharacterEncodingFilter characterEncodingFilter() {
        CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
        filter.setEncoding(this.properties.getCharset().name());
        filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
        filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
        return filter;
    }
//将配置文件中的spring.http.encoding.xx值 和该类的 成员属性相绑定
@ConfigurationProperties(
    prefix = "spring.http.encoding"
)
public class HttpEncodingProperties {

9.3 总结:

  • SpringBoot启动时会添加大量的自动配置类
  • 查看我们需要的功能是否有SpringBoot写好的自动配置类
  • 可以查看配置类配置了那些组件,如果需要自己编写自动配置类
  • 自动配置类 给容器中添加组件的时候,需要从properties中获取属性值,这个属性值我们可以通过配置文件修改

9.4 如何判断自动配置类是否生效

  • 给properties文件中添加 debug=true : 运行项目可以在控制面板打印自动配置类 加载信息

10 日志框架

10.1 框架组合

  • 抽象层(SLF4J) + 实现层 JAVA(JUL)、spring(jcl)、log4j

10.2 日志实现流程

  • 调用抽象层接口,实现层实现抽象层接口
    在这里插入图片描述

  • 日志统一

  • //由于 java srping log4j都有自己的日志框架,所以项目中需要将日志框架统一,只需要配置一个框架的配置文件
    统一方法:
        将引入框架中的日志依赖jar排除,不用做任何配置,SpringBoot会自动和引入的统一日志框架适配
    

在这里插入图片描述

10.3 如何查看pom文件依赖图

右击POM文件,选择Diagarms

10.4 日志框架使用

  • private Logger logger = LoggerFactory.getLogger(xxxx.class);
    
  • //追踪日志
    logger.trace("trace");
    logger.debug("debug");
    logger.info("info");
    logger.warn("warn");
    logger.error("error");
    
  • #properties配置: 
    logger.level.包路径(不填则修改整个项目) = trace/.../...  默认日志级别 INFO
    logger.file = 路径/日志文件名称.log 生成日志文件(默认文件名 springboot.log) 不指定路径则在当前项目下生成
    logger.path = 路径  和logger.file只生效一个 该配置优先级高
    logger.pattern.console= ......在控制台打印日志的格式
    logger.pattren.file=..........日志文件中的输出格式
    

10.5 日志框架自定义配置

  • 根据使用的日志框架,创建对应名称的xml文件放入Resources包中即可
框架需要配置文件名
Logbacklogback-spring.xml , logback-spring.groovy , logback.xml , logback.groovy
Log4j2log4j2-spring.xml , log4j2.xml
java JULlogging.properties
  • 配置文件名称的区别
#logback-spring.xml  OR  logback.xml举例
#logback.xml:由日志框架直接加载,绕过spring框架

#logback-spring.xml: 由Spring框架加载,可以使用spring的高级功能
#高级功能举例: 可以设置某一段配置 只在某个环境下生效
dev:只在开发环境生效
<springProfile name="dev">
    <!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值