75-java-springboot(1)-概述/配置文件详解

本文深入探讨SpringBoot如何简化项目配置,实现自动化装配bean,解决传统项目中繁复的配置问题,涵盖SpringBoot启动原理、配置文件读取、多环境配置及资源文件加载顺序。

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

本文从以下几个方面spring boot来介绍springboot
在这里插入图片描述

一.概述

1.spring的问题
  • 项目中配置非常多,通常一个项目中的配置文件特别的多,为什么配置特别多呢?是因为我们需要向spring容器中注入各种各样的bean,而这些bean的属性需要我们指定,所以产生了特别多的配置文件.
  • 经常我们映入jar包的时候,通常需要向容器中注入框架所需要的的bean,而这些bean大多没有特殊的个性配置,所以我们考虑怎样自动化的装配bean.
2.springboot产生的原因

解决容器中注入框架固定的bean时过多的配置文件,实现自动将框架基本需求的bean都注入容器,并配上默认的属性.

3.springboot需要解决的几个问题
  • 项目启动时怎么根据我们引入的jar包自动注入基础bean对象?
  • 注入bean的时候怎么判断bean是否会注入冲突,或者怎样依据环境注入bean?
  • 如果我们想要修改注入bean的属性,怎样修改属性呢?

向容器中注入bean有三种方案:
(1) 类上标注@Component等注解
优点:无
缺点:硬编码,而且修改源码
(2) xml文件配置等方式
优点:可以解决第1个问题,即bean的注入.
缺点:无法解决第二个问题和第三个问题.
(3) @Bean注解的方式
优点:可以解决1,2,3问题.

  • 能解决注入bean的问题,同第二个一样,我们自己包装一下jar包,手动的书写一个配置类,并将bean配置到容器.
  • 将bean注入容器的时候,我们还可利用@Conditional注解设置注入bean的条件
  • 我们注入bean的时候,还可以利用@ConfigurationProperties注解,获取我们本地的属性修改

二.目录及文件详解

1.pom文件

(1)继承springboot
spring-boot-starter-parent(父依赖) ==>spring-boot-dependencies(父依赖)

  • spring-boot-starter-parent
    统一管理插件plugins
  • spring-boot-dependencies
    通过标签dependencyManagement标签统一管理版本号

(2)spring-boot-starter-xx springboot启动环境

  • 以后我们导入spring-boot-starter-xx依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号)

(3) springboot的maven构建插件

		<!--这个插件是maven用于构建springboot项目的插件-->
 		<plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>

(4)支持yml提示的依赖

这是用于支持yml提示的依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
2.主启动类(后续会在原理中详细解释)

(1)@SpringBootApplication

  • 定义方法获取当前类的包,作为基础扫描的包
  • 定义方法扫描所有依赖的jar包下的META-INF/spring.factories文件中的EnableAutoConfiguration的值

(2) SpringApplication.run(xx.class, args);
执行初始化方法,具体执行哪些,后面回再说.

3.配置文件(properties文件或者yml文件)

(1)yml语法

  • 字面量
    name: 李四

  • 对象
    map: {k1:11,k2:12}
    或者
    map:
    k1: 11
    k2: 12

  • 数组/集合
    subject: [math,english,Chinese]
    或者
    subject:
    - math
    - english
    - Chinese

例如:

person:
  name1: 李四
  age: 12
  #集合  行内写法  map: {k1:11,k2:12}
  map:
    k1: 11
    k2: 12
  #数组   行内写法 subject: [math,english,Chinese]
  subject:
    - math
    - english
    - Chinese
  #对象
  dog:
    name: jackpo
    age: 2

(2)读取配置文件中的值

  • @ConfigurationProperties(prefix= “”)

     1.默认读取application文件,但也可以读取其他文件,读取其他配置文件,该类需用@PropertySource()指定其他配置文件
     2.批量读取配置文件注入属性,只需要指定默认前缀即可
     3.属性名必须和配置中的一致,如果不一致,则获取不到值,则为null
     4.可以使用注解 @Validated ,搭配其他校验我们获取到的配置中的值.
     5.不能使用spel表达式
    
  • @value

     1.默认使用application文件,但也可以读取其他文件,读取其他配置文件,该类需用@PropertySource()指定其他配置文件
     2.必须一个一个属性的注入,不像@ConfigurationProperties 注解一样批量指定
     3.可以使用spel表达式获取默认配置文件中的值.
     4.使用@Value注解,使用spel表达式获取配置,该spel表达式的值不能没有,没有则报错.
     5.不能使用@Validated 等注解的校验功能
    

    对比
    在这里插入图片描述

(3) 导入其他配置文件

  • @PropertySource(value = {“classpath:person.properties”})
    使用当前类路径下的person2.properties文件,则我们的@value注解和@ConfigurationProperties注解则读取这个配置文件

  • @ImportResource
    导入Spring的配置文件,让配置文件里面的内容生效,加载指定的spring的配置文件;
    @ImportResource(locations = {“classpath:beans.xml”})
    这个效果等同于我们用注解版@Configuration,配置bean注入容器

(4) 配置文件中的占位符(包括properties文件和yml文件)

  • 随机数
    r a n d o m . v a l u e 、 {random.value}、 random.value{random.int}、${random.long} r a n d o m . i n t ( 10 ) 、 {random.int(10)}、 random.int(10){random.int[1024,65536]}

  • 占位符获取之前配置的值,如果没有可以是用:指定默认值

person
	last‐name: 张三${random.uuid} 
	age: ${random.int} 
	birth: 2017/12/15 
	boss: false 
	maps:
		k1: v1 
		k2: 14 
	lists: a,b,c 
	dog:
		name: ${person.hello:hello}_dog

(5) profile(多环境配置文件,指定使用不同环境的配置文件profile)

  1. 编写其他环境的配置文件,如dev表示开发环境,prod表示生成环境等

    • properties文件
      文件名格式: application-{profile}.properties
      在这里插入图片描述
    • yml文件
      使用三个分割线来另起一个文档块 —
#使用---表示配置页分隔符
---
#dev环境
#指定当前配置页为dev
spring:
  profiles: dev
server:
  port: 8081
---
#prod环境
#指定当前配置页为prod
spring:
  profiles: prod
server:
  port: 80
  1. 切换到该环境,并激活配置文件的方式

    • 主文件application.properties或者application.yml文件中激活其他环境的配置文件:
      spring.profiles.active=prod #这里的prod是上面{}括号中的profile

    • 命令行方式 java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar
      –spring.profiles.active=dev; 可以直接在测试的时候,配置传入命令行参数

    • 虚拟机参数; -Dspring.profiles.active=dev

这是配置文件方式切换启动配置环境.

server:
  port: 8080
#表示使用哪一个配置页
spring:
  profiles:
    #这个即可表示使用当前的yml分隔页,也可以表示使用其他配置文件
    #如果当前配置文件有,也有其他配置文件,则读取其他配置文件的
    #指定的其他配置文件名格式必须为: application-xx.properties或者application-xx.yml;xx为我们下面激活的文件
      active: dev
#使用---表示配置页分隔符
---
#dev环境
#指定当前配置页为dev
spring:
  profiles: dev
server:
  port: 8081
---
#prod环境
#指定当前配置页为prod
spring:
  profiles: prod
server:
  port: 80

(6) 默认的配置文件

1)默认读取的配置文件是application.properties或者是application.yml

2)该默认配置(application文件)的加载
#springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文 件

  • 默认读取的配置文件顺序
    优先级从上往下,上面的优先级更高;意思如果几个配置文件都配置了相同的属性,则上面的为主;配置互补,其他配置则互补
    1. –file:./config/
      #当前项目的config目录下的application文件,即config/application文件
    2. –file:./
      #当前项目下的application文件,即 application文件
    3. –classpath:/config/
      #当前项目类路劲下的config/路劲下的application文件,也就是resource/config/application文件
    4. –classpath:/
      #当前项目类路劲下的application文件,也就是resource/application文件

在这里插入图片描述

  • 其他方式使用配置文件
    通过命令的形式:
    java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties
4.springboot-web项目下的resources目录结构
  • static:保存所有的静态资源; js css images;
  • templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页 面);可以使用模板引擎(freemarker、thymeleaf);
  • application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值