Spring Boot 实例解析:配置文件

ops/2025/2/6 9:12:07/
  1. SpringBoot 的热部署:
    1. Spring 为开发者提供了一个名为 spring-boot-devtools 的模块来使用 SpringBoot 应用支持热部署,提高开发者的效率,无需手动重启 SpringBoot 应用
    2. 引入依赖:
      <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> 
      </dependency>
    3. 修改 Java 代码或者配置文件模板后可以通过 Ctrl + F9 来实现热部署
  2. 配置文件:
    1. SpringBoot 使用一个全局的配置文件,配置文件名是固定的
      1. application.properties
      2. application.yml
    2. 配置文件的作用:修改 SpringBoot 自动装配的默认值,SpringBoot 在底层都给自动配置好
    3. 标记语言:
      1. 以前的配置文件:大多都是 xx.xml 文件
      2. YAML:以数据为中心,比 json、xml 更适合做配置文件
      3. 例如:
  3. YAML 语法:
    1. 基本语法:
      1. K:(空格) V:表示一对键值对(空格必须有)
      2. 只要是左对齐的一列数据,都是同一个层级的
      3. 属性和值也是大小写敏感
    2. 值的写法:
      1. 字面量:普通的值(数字、字符串、布尔)
      2. K:V:字面量直接来写
      3. 字符串默认不用加上单引号或双引号
      4. " ":双引号,不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思:
        1. 例如:name:"zhangsan \n lisi"  ==输出==> zhangsan 换行 lisi
      5. ' ':单引号,会转义特殊字符,特殊字符最终只是一个普通的字符串数据
        1. 例如:name:'zhangsan \n lisi' ==输出==> zhangsan \n lisi
  4. 对象、Map(属性和值):
    1. K:V:在下一行来写对象的属性和值的关系,注意缩进
    2. 对象:key:value 方式
    3. 数组:用 - 表示数组中的一个元素
  5. 配置文件注入:
    1. 配置文件:
      person:laseName: helloage: 18boss: falsebirth: 2019-09-09maps: {k1:v1,k2:v2}lists: - lisi- zhaoliiudog: name: 小狗age: 12
    2. JavaBean:
      @Component
      @ConfigurationProperties(prefix = "person")
      public class Person {private String laseName;private Integer age;private Boolean boss;private Date birth;private Map<String, Object> maps;private List<Object> lists;private Dog dog;
      }
    3. 导入文件处理器:
      <!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
      <dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐configuration‐processor</artifactId><optional>true</optional>
      </dependency>
    4. properties 配置文件在 IDEA 中默认 UTF-8 乱码问题:
    5. @Value 获取值和@ConfigurationProperties 获取值比较:
      1. 松散绑定:大小写区别,@ConfigurationProperties 会自动找到驼峰命名法的哪个字段 ==> @Value  注解不支持自动寻找
      2. SqEL:@Value 注解中可以使用 #{} 和 ${} 进行赋值,而 @ConfigurationProperties 不支持这样赋值
      3. JSR303 数据校验:例如 @Emile 注解
        1. 在 @ConfigurationProperties 中加入这个注解,在配置文件中相对应的形式应给为 Emile 形式,否则会报错
        2. 在 @Value 注解注入值使用这个数据校验注解是无效的
      4. 复杂数据封装:
        1. @Value 注解不支持除基本数据类型以外类型封装,而 @ConfigurationProperties 注解支持复杂数据封装
      5. 在某个业务中获取一个配置文件中的某个值,使用 @Value 注解
      6. 编写一个 JavaBean 来和配置文件进行映射,直接使用 @ConfigurationProperties 注解
    6. 配置文件:
      spring.application.name=S45SpringBootDemoApplicationTestsperson.email=kkkk
      person.hello=lucky
      person.last-name=张三
      person.birth=2017/2/4
      person.age=19
      person.boss=true
      person.list="dog,cat,animal"
      person.maps.key1=value1
      person.maps.key2=value2
      person.dog.name=${person.hello}_dog
      person.dog.age=12
    7. @Value 注解:注入值数据校验
      1. 注意:@Value 注解不能注入复杂属性(对象,集合等)
        java">@Conponent
        @Validated     //加入校验方式
        public class Person {//传入的值必须是邮箱格式,否则会报错@Emailprivate String email;private String hello;//${} : 为取值和 application.properties 配置文件中字段一样的值@Value("${person.last-name}")private String lastName;//#{} : 可以写表达式@Value("#{3*2}")private Integer age;//@Value 注解也可以直接赋值@Value("true")private boolean boss;//@Value注解不能注入复杂属性private Date birth;private Map<String,String> maps;private List<String> list;//set  get 方法}
    8. @ConfigurationProperties 注解映射注入属性:
      1. 注意:容器中的组件才能使用该注解
        java">@Component
        //将本类中的所有属性和配置文件中 person2 下面的所有属性进行映射
        @ConfigurationProperties(prefix = "person2")
        @Validated    //校验注解
        public class Person2 {String email;String hello;String lastName;int age;boolean boss;Date birth;Map<String,String> maps;List<String> list;Dog dog;
        }
    9. 导入配置文件处理器:
      java"><!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
      <dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐configuration‐processor</artifactId><optional>true</optional>
      </dependency>
  6. @PropertySource & @ImportResource & @Bean:
    1. @PropertySource:加载指定的配置文件
      java">//@PropertySource:加载指定配置文件
      @PropertySource(value={"classpath:person2.properties"})
      @Component
      //将本类中的所有属性和配置文件中 person2 下面的所有属性进行映射
      @ConfigurationProperties(prefix = "person2")
      public class Person2 {String email;String hello;String lastName;int age;boolean boss;Date birth;Map<String,String> maps;List<String> list;Dog dog;
      }
    2. @ImportResource:导入 Spring 的配置文件,让配置文件里面的内容生效
      1. SpringBoot 里面没有 Spring 的配置文件,我们自己编写的配置文件也不能自动识别
      2. 编写 applicationContext.xml 文件:
        java"><?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="personservice" class="com.example.springbootdemo.Service.impl.Person2ServiceImpl"></bean>
        </beans>
      3. 导入 Spring 的配置让其生效:
      4. 配置类注入测试:
        java">@RunWith(SpringRunner.class)
        @SpringBootTest
        public class TxDemo3ApplicationTests {//注入对象@AutowiredApplicationContext applicationContext;@Testpublic void contextLoads01() {System.out.println(applicationContext.getBean("personservice"));}
        }
    3. @Bean:给容器中添加组件
      1. 配置类 @Configuration  ==> 配置文件
      2. 使用 @Bean 给容器中添加组件
        java">//@Configuration:标明当前是一个配置类,代替之前的 Spring 配置文件
        @Configuration
        public class MyAppConfig {//将方法返回的值添加到容器当中,当前组件默认 ID 为当前文件名//@Bean注解给容器中添加组件@Beanpublic HelloService HelloService01(){System.out.println("配置类 @Bean 给容器中添加了组件");return new HelloServiceImpl();}
        }

http://www.ppmy.cn/ops/156113.html

相关文章

深度学习之“线性代数”

线性代数在深度学习中是解决多维数学对象计算问题的核心工具。这些数学对象包括标量、向量、矩阵和张量&#xff0c;借助它们可以高效地对数据进行操作和建模。以下将详细介绍这些数学对象及其在深度学习中的典型用途。 数学对象概述 标量 标量是最简单的数学对象&#xff0…

算法 哈夫曼树和哈夫曼编码

目录 前言 一&#xff0c;二进制转码 二&#xff0c;哈夫曼编码和哈夫曼树 三&#xff0c;蓝桥杯 16 哈夫曼树 总结 前言 这个文章需要有一定的树的基础&#xff0c;没学过树的伙伴可以去看我博客树的文章 当我们要编码一个字符串转成二进制的时候&#xff0c;我们要怎么…

【回溯+剪枝】电话号码的字母组合 括号生成

文章目录 17. 电话号码的字母组合解题思路&#xff1a;回溯 哈希表22. 括号生成解题思路&#xff1a;回溯 剪枝 17. 电话号码的字母组合 17. 电话号码的字母组合 ​ 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 …

寻路算法:A*算法。

在2D应用场景中&#xff0c;会出现寻找最短路径的情况。可以运用的算法很多&#xff0c;广度优先算法&#xff0c;曼哈顿算法等等。虽然可以最终访问到。但是为了节省性能&#xff0c;推荐使用A*算法。 1.图示 2.基本原理 遍历一个点周围的点。看看那个点的寻路消耗最小。再以…

31.Word:科技论文的译文审交稿【31】

目录 NO1.2.3​ NO4.5.6 NO7.8样式应用和修改&多级列表​ NO9奇偶页页眉 NO10自动编号&交叉引用 NO11.12 NO1.2.3 另存为/F12&#xff1a;考生文件夹只保留译文内容、格式设置、修订批注&#xff0c;删除其他&#xff1a;删除表格的左列→删除第一行将表格转化成…

解锁C/C++:链表数据结构的奇幻之旅

目录 一、引言二、链表基础概念2.1 链表是什么2.2 链表的类型三、C 语言实现链表3.1 定义链表节点3.2 创建链表3.3 链表操作3.3.1 遍历链表3.3.2 插入节点3.3.3 删除节点3.3.4 查找节点3.4 完整示例代码四、C++ 实现链表4.1 定义链表节点类4.2 创建链表4.3 链表操作4.3.1 遍历链…

双亲委派(jvm)

1.双亲委派 在 Java 中&#xff0c;双薪委派通常是指双亲委派模型&#xff0c;它是 Java 类加载器的一种工作模式&#xff0c;用于确保类加载的安全性和一致性。以下是其相关介绍&#xff1a; 定义与作用 定义&#xff1a;双亲委派模型要求除了顶层的启动类加载器外&#xf…

Java常见的技术场景面试题

一、单点登录这块怎么实现的&#xff1f; 单点登录概述 单点登录&#xff1a;Single Sign On&#xff08;简称SSO&#xff09;,只需要登录一次&#xff0c;就可以访问所有信任的应用系统 在以前的时候&#xff0c;一般我们就单系统&#xff0c;所有的功能都在同一个系统上。…