springboot-依赖、配置、日志等

本文介绍了Spring Boot中依赖管理、自动配置、配置文件加载、多环境配置以及日志处理的详细过程,包括自动扫描、配置类编写、属性绑定和Spring Boot与其他技术的整合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依赖

  • 引入父工程,父工程里会检测个人编写的配置文件,父工程引用了父工程:spring-boot-dependencies,其限定了所需要的jar的一些版本,实现jar版本的管理

自动配置

  • @SpringBootApplication注解包含
    • @SpringBootConfiguration注解
      • 包含@Configuration 即最终配置注解
    • @EnableAutoConfiguration 自动配置
      • 包含@Import({AutoConfigurationImportSelector.class}) 即引入了配置类
      • AutoConfigurationImportSelector类:加载配置
      • 同配置类包下:META-INF/spring.factories文件 -》ServletWebServerFactoryAutoConfiguration类引入了 -》ServerProperties类通过注解 -》@ConfigurationProperties加载默认配置 通过其josn文件
    • @ComponentScan 组件扫描 即自动扫描@SpringBootApplication注解同级及子孙包

在启动类上添加@SpringBootApplication即可具备以上三个注解作用。

修改配置

父工程扫描文件

<build>
	<resources>
		<resource>
			<fi1tering>true</filtering>
			<directory>$ {basedir} /src/main/resources</directory>\
            <includes>
				<include>**/application*. yml</ include>
                <include>**/application*.yaml</ include>
				<include>**/application*.properties</include>
            </includes>
		</resource>
    </resourcs>
</build>
  • 要修改配置只要覆盖默认配置即可 如:
# 服务器端口
server.port=8081
#当前web应用的名称
server.servlet.context-path=/demo1

yml语法

server:
  port: 8082

name: zhangsan

#对象配置
person:
  name: zhangsan
  age: 18
  addr: beijing

# 行内配置
person: {name: zhangsan,age: 18,addr: beijing}

# 配置数组
city:
  - beijing
  - tianjin
  - chongqing
  - shanghai
# 或者
city: [beijing,tianjin,chongqing,shanghai]

# 配置数据、集合(对象数据)
student:
  - name: tom
    age: 18
    addr: beijing
  - name: lucy
    age: 17
    addr: tianjing
# 或者
student: [{name: tom,age: 18,addr: beijing},{name: lucy,age: 17,addr: tianjing}]

# map配置
map:
  key1: value1
  key2: value2

获取配置文件所定义的属性

  • 方式1:@Value("${配置名}")
@Value("${name}")
private String name;
@Value("${person.addr}")
private String addr;
  • 方式2:@ConfigurationProperties(prefix = “配置前缀”) + getxxx()方法
@ConfigurationProperties(prefix = "person")放在类上

//定义属性
private String name; 

//提供get方法:
public String getName() {return name;}
public void setName(String name) {this.name = name;}
  • @EnableConfigurationProperties(属性类字节码对象) 可以载入属性类

整合其他技术

整合junit测试

  • 引入启动器
  • 编写测试类,测试类需添加注解
@RunWith(SpringRunner.class)
@SpringBootTest(classes = 启动类字节码文件)

SpringBoot

一、配置文件

可以导入配置文件处理器,这样在配置文件和实体类可以建立映射

  • @ConfigurationProperties(prefix=“xxx”) 通过前缀把配置中的信息绑定到实体类中
  • @Value("${xxx}") 绑定配置文件中属性到实体类属性
  • @PropertySource(value=-“classpath:xxxx.xx”) 引入属性文件(即导入spring配置文件)
  • @ImportResource(“locations={classth:xxx.xml,xxxx.xxx,…}”) 自己配置的文件不生效,通过注解引入配置文件,让其生效

多配置文件时,激活指定的配置文件(激活程序某一种环境):

  • properties:

    • 先给配置文件名称添加标识:如:application-dev.properties

      application.properties
      application-dev.properties
      application-prod.properties
      
    • 在默认配置文件中指定配置文件: 如:spring.profiles.active = xxx

      server.port=8081
      spring.profiles.active=dev
      
    • 当启动后其会使用application-dev.properties这个配置文件了

  • yml: yml支持多文档块方式,即通过"—"来分隔表示不同的配置文件。修改:在默认的文档块中指定

    server:
    port: 8081spring:
    profiles:
    active: prod  # 由于激活了prod,所以程序运行后会使用prod配置块
    
    
    ---
    server:
    	port: 8083
    spring:
    	profilis: dev
    	
    ---
    server:
    	port: 8084
    spring:
    	profiles: prod
    

配置文件加载顺序:先加载带后缀的,先加载外部的后加载内部的。

二、自动配置

springboot就是为了减去繁杂的配置而生,个人认为一切配置都有一个与之对应的配置类,就是把配置文件都转换成了配置类来进行操作。

  • 1-开启:@EnableAutoConfiguration --》
    • 利用@EnableAutoConfigurationImportSelector给容器中导入组件 --》
    • springFacrorieaLoader.loadFacroryNames() 扫描所有jar包装路径下MERA-INF/spring.facrories
  • xxxAutoConfigurationl类都是容器中一个组件(即类),都加入到了容器中用来做自动配置
    • xxxProperties是通过前缀封装了配置文件中属性的类,属性与配置文件中相关配置绑定
  • 使用springboot,即可以看其有没有自动配置类,【有&不满意】可以通过配置文件覆盖来修改【没有】自己编写配置类并添加到配置类,自己编写的配置类还可以和配置文件绑定来做配置。

派生注解:@ConditionalXXX

  • 作用:必须是该注解指定的条件成立,才能给容器中添加组件,添加了组件配置里面配置的内容才能生效
  • 如在某个配置类上加了这个注解:@conditionalOnClass({xxx.class,xxx.class,…}) 即表示:项目中有这些类,配置才能生效
@Conditional扩展注解作用(判断是否满足当前指定条件)
@ConditionalOnJava系统的java版本是否符合要求
@ConditionalOnBean容器中存在指定Bean;
@ConditionalOnMissingBean容器中不存在指定Bean;
@ConditionalOnExpression满足spEL表达式指定
@ConditionalOnClass系统中有指定的类
@ConditionalOnMissingClass系统中没有指定的类
@ConditionalOnSingleCandidate容器中只有一个指定的Bean,或者这个Bean是首选Beat
@ConditionalOnProperty系统中指定的属性是否有指定的值
@ConditionalOnResource类路径下是否存在指定资源文件
@ConditionalOnWebApplication当前是web环境
@ConditionalOnNotWebApplication当前不是web环境
@ConditionalOnJndiJNDI存在指定项

自动配置类必须在一定的条件下才能生效:

配置文件中配置:debug=true 即开启springboot的debug模式
在控制台就可以知道哪些类用了自动配置,哪些类没有用自动配置(因为配置的条件不满足)

三、日记处理

  • springboot底层是spring框架
  • spring默认用jcl日记框架
  • 而springboot用的是slf4j抽象层和logback实现层。
日记门面(即抽象层或接口层)
  • jcl(jakarta commons-logging)
  • slf4j(simple logging facade for java)
  • jboss-logging
日志实现
  • log4j
  • jul(java.util.logging)
  • log4j2
  • logback

可以说logback是对log4j的完善升级。

日志的使用
  • 接口搭配对应的实现类

程序–》接口层面–》对应的实现类

  • 接口搭配非对应实现类,需要通过适配器类来转换

程序–》接口层面–》适配器类层–》非对应实现类

遗留问题:框架中使用了其他框架,其他框架各自使用了不同日志,如何统一日志记录,使用同一日志框架进行输出呢?
解决:即通过适配器类来偷换jar实现包,以完成统一框架输出

  • 1-系统中其他日志框架先排除出去
  • 2-使用中间包来替换原有日志框架
  • 3-导入所使用日志接口的实现类
springboot日志关系(使用)
  • 1-springboot底层使用slf4j + logback的方式进行日志记录
  • 2-springboot把其他日志都替换成了slf4j 接口来完成统一
  • 3-即把中间替换包引入
  • 4-如果引入其他框架,一定要把该框架默认日志依赖先移除

springboot能自动适配所有日志,底层使用【slf4j】 + 【logback】的方式记录日志,要想换成其他日志实现框架时,只需要把这个框架的日志配置放入到程序资源文件即可。

日志类:Logger类
  • 获取:loggerFacroty.getLogger(getClass())
  • .trace(“xxxx信息”);
  • .debug(“xxxx信息”);
  • .info(“xxxx信息”);
  • .warn(“xxxx信息”);
  • .error(“xxxx信息”);

以上五个方法也是日记的级别,由低到高。 spring默认设置日志级别是:info
可以调整日志的输出级别:其只会打印所设置级别即后面级别的日志信息。

  • 设置级别:在配置文件中指定–logging.level.xxx包 = 级别名称 (不填写具体的包,即每个包的日记级别都设置)
  • logging.file = 文件名或路径 --表示把日志打印到所设置的文件或路径中
  • logging.path = 指定path --表示在指定目录下记录日志(与logging.file是冲突的,如果设置了logging.file后就会在其设置的文件或路径下输出日志)
  • logging.pattern.console = xxxxx --设置在控制台输出的日志格式
    • 如:%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
  • logging.pattern.file = xxxxx --设置在指定文件中输出的日志格式
profile特性

多环境日志的格式切换

  • 1-给日志配置文件填加【-spring】后缀

    logback-spring.xml
    
  • 2-在日志配置文件中添加:

    <appender>
    	<layout class="ch.qos.logback.classic.PatternLayout">
                <springProfile name="dev" >
                    <pattern>%d{yyyy-MM-dd HH:mm:ss.ssS} ---->[%thread] --->%-5level %logger{50}</pattern>
                </springProfile>
                <springProfile name="!dev">
                    <pattern>%d{yyyy-MM-dd HH:mm:ss.sss} ==== [%thread] ==== %-5level %logger{50]}</pattern>
                </springProfile>
        </layout>
    </appender>
    
指定日志配置文件

给类路径下放上日志框架自己的配置文件即可,springboot就不使用默认的日志配置了

切换日志框架
  • 即上面所提的适配器类模式:把对应其他框架通过中间替换类替换统一接口
  • 把默认日志实现类去掉,导入所用日志实现类
  • 把日志配置文件导入到类路径下。

WEB

springboot对静态资源的映射规则

可以取webjars网站下载对应的静态资源对应的maven ,如jq、sootstrap等
webjars以jar包的方式引入静态资源

  • 1-【/webjars/**】访问,都去classpath:/META-INF/resources/webjars/所找资源;

  • 2-【/**】访问的任何资源,如果没有处理都默认去以下路径查找

    • “classpath:/META-INF/resources/”
    • “classpath:/resources/”
    • “classpath:/static/”
    • “classpath:/public/”
    • “/”
  • 3-【欢迎页】:静态资源文件下所有的index.html

  • 4-【网页图标】:所有的**/favicon.ico都是在静态资源文件下找;

修改默认的静态资源访问路径:配置文件配置:spring.resources.static-locations=路径,路径,… 如:classpath:/hello/,classpath:/xiaoai/

模板引擎:thymeleaf

模板引擎:jsp、velocity、freemarker、thymeleaf

thymeleaf的使用

  • 引入thymeleaf,即maven添加依赖
<dependency>
    <grouprd>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <-- springboot2以上版本不用改这些 -->
    <java.version>1.8</java.version>
    <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
    <!--布局功能的支持程序thymeLeaf3主程序layout2以上版本-->
    <thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
</dependency>
  • 只要把HTML页面放在classpath:/templates/,thymeleaf就能自动渲染
thymeleaf的语法

可以在页面上导入名称空间: 可以不导入,导入就是为了获得语法提示

  • 语法

可以通过【th:属性名=${xxx}】修改任意属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值