当前位置: 首页 > news >正文

Spring Boot 实例解析:配置文件

  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 注解不能注入复杂属性(对象,集合等)
        @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. 注意:容器中的组件才能使用该注解
        @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. 导入配置文件处理器:
      <!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
      <dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐configuration‐processor</artifactId><optional>true</optional>
      </dependency>
  6. @PropertySource & @ImportResource & @Bean:
    1. @PropertySource:加载指定的配置文件
      //@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 文件:
        <?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. 配置类注入测试:
        @RunWith(SpringRunner.class)
        @SpringBootTest
        public class TxDemo3ApplicationTests {//注入对象@AutowiredApplicationContext applicationContext;@Testpublic void contextLoads01() {System.out.println(applicationContext.getBean("personservice"));}
        }
    3. @Bean:给容器中添加组件
      1. 配置类 @Configuration  ==> 配置文件
      2. 使用 @Bean 给容器中添加组件
        //@Configuration:标明当前是一个配置类,代替之前的 Spring 配置文件
        @Configuration
        public class MyAppConfig {//将方法返回的值添加到容器当中,当前组件默认 ID 为当前文件名//@Bean注解给容器中添加组件@Beanpublic HelloService HelloService01(){System.out.println("配置类 @Bean 给容器中添加了组件");return new HelloServiceImpl();}
        }

相关文章:

Spring Boot 实例解析:配置文件

SpringBoot 的热部署&#xff1a; Spring 为开发者提供了一个名为 spring-boot-devtools 的模块来使用 SpringBoot 应用支持热部署&#xff0c;提高开发者的效率&#xff0c;无需手动重启 SpringBoot 应用引入依赖&#xff1a; <dependency> <groupId>org.springfr…...

pytorch图神经网络处理图结构数据

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 图神经网络&#xff08;Graph Neural Networks&#xff0c;GNNs&#xff09;是一类能够处理图结构数据的深度学习模型。图结构数据由节点&#xff08;vertices&#xff09;和边&#xff08;edges&#xff09;组成&a…...

计算机网络一点事(23)

传输层 端口作用&#xff1a;标识主机特定进程&#xff0c;TCP&#xff0c;UDP协议 端口号分类&#xff1a;服务器&#xff1a;0-1023&#xff0c;熟知 1024-49151 登记 客户端&#xff1a;49152-65535 功能&#xff1a;实现端到端&#xff0c;进程到进程的通信&#xff0c…...

(9)下:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同。小例子的实验

&#xff08;4&#xff09;本实验代码的蓝本&#xff0c;是伊圣雨老师里的课本里的代码&#xff0c;略加改动而来的。 以下是 服务器端的代码&#xff1a; 每当收到客户端的报文时&#xff0c;就测试一下对应的 epoll 事件里的事件标志&#xff0c;不读取报文内容&#xff0c;…...

DeepSeek-R1模型1.5b、7b、8b、14b、32b、70b和671b有啥区别?

deepseek-r1的1.5b、7b、8b、14b、32b、70b和671b有啥区别&#xff1f;码笔记mabiji.com分享&#xff1a;1.5B、7B、8B、14B、32B、70B是蒸馏后的小模型&#xff0c;671B是基础大模型&#xff0c;它们的区别主要体现在参数规模、模型容量、性能表现、准确性、训练成本、推理成本…...

一、html笔记

(一)前端概述 1、定义 前端是Web应用程序的前台部分,运行在PC端、移动端等浏览器上,展现给用户浏览的网页。通过HTML、CSS、JavaScript等技术实现,是用户能够直接看到和操作的界面部分。上网就是下载html文档,浏览器是一个解释器,运行从服务器下载的html文件,解析html、…...

AI大模型开发原理篇-2:语言模型雏形之词袋模型

基本概念 词袋模型&#xff08;Bag of Words&#xff0c;简称 BOW&#xff09;是自然语言处理和信息检索等领域中一种简单而常用的文本表示方法&#xff0c;它将文本看作是一组单词的集合&#xff0c;并忽略文本中的语法、词序等信息&#xff0c;仅关注每个词的出现频率。 文本…...

基于微信小程序的实习记录系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

【LLM】DeepSeek-R1-Distill-Qwen-7B部署和open webui

note DeepSeek-R1-Distill-Qwen-7B 的测试效果很惊艳&#xff0c;CoT 过程可圈可点&#xff0c;25 年应该值得探索更多端侧的硬件机会。 文章目录 note一、下载 Ollama二、下载 Docker三、下载模型四、部署 open webui 一、下载 Ollama 访问 Ollama 的官方网站 https://ollam…...

【Elasticsearch】 Intervals Query

Elasticsearch Intervals Query 返回基于匹配术语的顺序和接近度的文档。 intervals 查询使用 匹配规则&#xff0c;这些规则由一小组定义构建而成。这些规则然后应用于指定 field 中的术语。 这些定义生成覆盖文本中术语的最小间隔序列。这些间隔可以进一步由父源组合和过滤…...

DeepSeek技术深度解析:从不同技术角度的全面探讨

DeepSeek技术深度解析&#xff1a;从不同技术角度的全面探讨 引言 DeepSeek是一个集成了多种先进技术的平台&#xff0c;旨在通过深度学习和其他前沿技术来解决复杂的问题。本文将从算法、架构、数据处理以及应用等不同技术角度对DeepSeek进行详细分析。 一、算法层面 深度学…...

Docker 部署 Starrocks 教程

Docker 部署 Starrocks 教程 StarRocks 是一款高性能的分布式分析型数据库&#xff0c;主要用于 OLAP&#xff08;在线分析处理&#xff09;场景。它最初是由百度的开源团队开发的&#xff0c;旨在为大数据分析提供一个高效、低延迟的解决方案。StarRocks 支持实时数据分析&am…...

【LLM-agent】(task6)构建教程编写智能体

note 构建教程编写智能体 文章目录 note一、功能需求二、相关代码&#xff08;1&#xff09;定义生成教程的目录 Action 类&#xff08;2&#xff09;定义生成教程内容的 Action 类&#xff08;3&#xff09;定义教程编写智能体&#xff08;4&#xff09;交互式操作调用教程编…...

29.Word:公司本财年的年度报告【13】

目录 NO1.2.3.4 NO5.6.7​ NO8.9.10​ NO1.2.3.4 另存为F12&#xff1a;考生文件夹&#xff1a;Word.docx选中绿色标记的标题文本→样式对话框→单击右键→点击样式对话框→单击右键→修改→所有脚本→颜色/字体/名称→边框&#xff1a;0.5磅、黑色、单线条&#xff1a;点…...

14 2D矩形模块( rect.rs)

一、 rect.rs源码 // Copyright 2013 The Servo Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENS…...

【Unity3D】实现2D角色/怪物死亡消散粒子效果

核心&#xff1a;这是一个Unity粒子系统自带的一种功能&#xff0c;可将粒子生成控制在一个Texture图片网格范围内&#xff0c;并且粒子颜色会自动采样图片的像素点颜色&#xff0c;之后则是粒子编辑出消散效果。 Particle System1物体&#xff08;爆发式随机速度扩散10000个粒…...

Linux - 进程间通信(3)

目录 3、解决遗留BUG -- 边关闭信道边回收进程 1&#xff09;解决方案 2&#xff09;两种方法相比较 4、命名管道 1&#xff09;理解命名管道 2&#xff09;创建命名管道 a. 命令行指令 b. 系统调用方法 3&#xff09;代码实现命名管道 构建类进行封装命名管道&#…...

3、C#基于.net framework的应用开发实战编程 - 实现(三、三) - 编程手把手系列文章...

三、 实现&#xff1b; 三&#xff0e;三、编写应用程序&#xff1b; 此文主要是实现应用的主要编码工作。 1、 分层&#xff1b; 此例子主要分为UI、Helper、DAL等层。UI负责便签的界面显示&#xff1b;Helper主要是链接UI和数据库操作的中间层&#xff1b;DAL为对数据库的操…...

C++编程语言:抽象机制:泛型编程(Bjarne Stroustrup)

泛型编程(Generic Programming) 目录 24.1 引言(Introduction) 24.2 算法和(通用性的)提升(Algorithms and Lifting) 24.3 概念(此指模板参数的插件)(Concepts) 24.3.1 发现插件集(Discovering a Concept) 24.3.2 概念与约束(Concepts and Constraints) 24.4 具体化…...

Python面试宝典13 | Python 变量作用域,从入门到精通

今天&#xff0c;我们来深入探讨一下 Python 中一个非常重要的概念——变量作用域。理解变量作用域对于编写清晰、可维护、无 bug 的代码至关重要。 什么是变量作用域&#xff1f; 简单来说&#xff0c;变量作用域就是指一个变量在程序中可以被访问的范围。Python 中有四种作…...

基于最近邻数据进行分类

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 完整代码&#xff1a; import torch import numpy as np from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt# 生成一个简单的数据…...

DeepSeek V3 vs R1:大模型技术路径的“瑞士军刀“与“手术刀“进化

DeepSeek V3 vs R1&#xff1a;——大模型技术路径的"瑞士军刀"与"手术刀"进化 大模型分水岭&#xff1a;从通用智能到垂直突破 2023年&#xff0c;GPT-4 Turbo的发布标志着通用大模型进入性能瓶颈期。当模型参数量突破万亿级门槛后&#xff0c;研究者们开…...

一、TensorFlow的建模流程

1. 数据准备与预处理&#xff1a; 加载数据&#xff1a;使用内置数据集或自定义数据。 预处理&#xff1a;归一化、调整维度、数据增强。 划分数据集&#xff1a;训练集、验证集、测试集。 转换为Dataset对象&#xff1a;利用tf.data优化数据流水线。 import tensorflow a…...

指导初学者使用Anaconda运行GitHub上One - DM项目的步骤

以下是指导初学者使用Anaconda运行GitHub上One - DM项目的步骤&#xff1a; 1. 安装Anaconda 下载Anaconda&#xff1a; 让初学者访问Anaconda官网&#xff08;https://www.anaconda.com/products/distribution&#xff09;&#xff0c;根据其操作系统&#xff08;Windows、M…...

7层还是4层?网络模型又为什么要分层?

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 一、为什么要分层 \quad 网络通信的复杂性促使我们需要一种分层的方法来理解和管理网络。就像建筑一样&#xff0c;我们不会把所有功能都混在一起…...

C++:抽象类习题

题目内容&#xff1a; 求正方体、球、圆柱的表面积&#xff0c;抽象出一个公共的基类Container为抽象类&#xff0c;在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径)&#xff0c;以及求表面积的纯虚函数area()。由此抽象类派生出…...

C++ 泛型编程指南02 (模板参数的类型推导)

文章目录 一 深入了解C中的函数模板类型推断什么是类型推断&#xff1f;使用Boost TypeIndex库进行类型推断分析示例代码关键点解析 2. 理解函数模板类型推断2.1 指针或引用类型2.1.1 忽略引用2.1.2 保持const属性2.1.3 处理指针类型 2.2 万能引用类型2.3 传值方式2.4 传值方式…...

音视频入门基础:RTP专题(5)——FFmpeg源码中,解析SDP的实现

一、引言 FFmpeg源码中通过ff_sdp_parse函数解析SDP。该函数定义在libavformat/rtsp.c中&#xff1a; int ff_sdp_parse(AVFormatContext *s, const char *content) {const char *p;int letter, i;char buf[SDP_MAX_SIZE], *q;SDPParseState sdp_parse_state { { 0 } }, *s1…...

计算机网络 应用层 笔记 (电子邮件系统,SMTP,POP3,MIME,IMAP,万维网,HTTP,html)

电子邮件系统&#xff1a; SMTP协议 基本概念 工作原理 连接建立&#xff1a; 命令交互 客户端发送命令&#xff1a; 服务器响应&#xff1a; 邮件传输&#xff1a; 连接关闭&#xff1a; 主要命令 邮件发送流程 SMTP的缺点: MIME&#xff1a; POP3协议 基本概念…...

【视频+图文详解】HTML基础3-html常用标签

图文教程 html常用标签 常用标签 1. 文档结构 <!DOCTYPE html>&#xff1a;声明HTML文档类型。<html>&#xff1a;定义HTML文档的根元素。<head>&#xff1a;定义文档头部&#xff0c;包含元数据。<title>&#xff1a;设置网页标题&#xff0c;浏览…...