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

[6-02-01].第05节:配置文件 - 读取配置文件的内容

SpringBoot学习大纲


一、读取配置文件的内容:

方式1:@Value注解读取数据:

a.说明:

  • SpringBoot 的核心配置文件中,除了使用内置的配置项之外,我们还可以在自定义配置,然后采用@Value注解注解去读取配置的属性值
    • @Value注解可以将application.properties/application.yml文件中的配置信息注入/绑定到java对象的属性上
    • 语法格式:@Value(“${key}”)

b.实现案例:

1、案例1:@Value 注解的使用:

  • 1.自定义配置文件:
server.port=9090
server.servlet.context-path=/myboot
school.name=动力节点
school.address=北京大兴区
school.website=www.bjpowernode.com
site=www.bjpowernode.com
  • 2.编写controllere:
    • 使用@Value("${key}") :key 来自 application.properties(yml)来获取数据
package com.bjpowernode.controller;import com.bjpowernode.vo.SchoolInfo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.annotation.Resource;@Controller
public class HelloController {@Value("${server.port}")private Integer port;@Value("${subject[1]}")private Integer qianduan;@Value("${users[1].age}")private Integer qianduan;@Value("${server.servlet.context-path}")private String contextPath;@Value("${school.name}")private String name;@Value("${site}")private String site;@Resourceprivate SchoolInfo info;@RequestMapping("/data")@ResponseBodypublic String  queryData(){return name+",site="+site+", 项目的访问地址="+contextPath+",使用的端口="+port;}@RequestMapping("/info")@ResponseBodypublic String  queryInfo(){return "SchoolInfo对象=="+info.toString();}
}

在这里插入图片描述


2、读取单独属性的值:
在这里插入图片描述


方式2:读取配置中的全部数据:

  • 1.步骤1:使用Environment对象封装全部配置信息
  • 2.步骤2:使用Autowired自动装配数据到Environment
    在这里插入图片描述


二、将配置绑定到bean:

2.1.注解:

注解1:@Value注解

  • SpringBoot配置文件中的信息使用@Value注解读取配置文件的属性

注解2:@ConfigurationProperties注解

  • @ConfigurationProperties 注解与@Value注解配合使用,@ConfigurationProperties指定配置文件中的前缀

注解3:@Component注解和@Configuration注解

  • 使用了@Component注解进行了标注,来纳入IoC容器的管理。也可以使用另外一个注解@Configuration,用这个注解将Bean标注为配置类
  • 多数情况下我们会选择使用这个注解,因为该Bean对象的属性对应的就是配置文件中的配置信息,因此这个Bean我们也可以将其看做是一个配置类

2.2.语法:

第1步:自定义配置文件:

server.port=9090
server.servlet.context-path=/myboot
school.name=动力节点
school.address=北京大兴区
school.website=www.bjpowernode.com
site=www.bjpowernode.com

第2步:定义实体类

  • 1.定义实体类:SchoolInfo
    • 实体类SchoolInfo就是被绑定的bean,使用 @ConfigurationProperties注解,使用prefix属性用来指定前缀,把配置文件中的属性注入
    • 这种方式注入的话,就比上面按照字段一个一个的注入要方便很多
package com.bjpowernode.vo;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@ConfigurationProperties(prefix = "school")
public class SchoolInfo {private String name;private String website;private String address;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getWebsite() {return website;}public void setWebsite(String website) {this.website = website;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "SchoolInfo{" +"name='" + name + '\'' +", website='" + website + '\'' +", address='" + address + '\'' +'}';}
}

第3步:将Bean纳入IOC容器管理:

  • 1.添加使用@Component注解进行标注,纳入IoC容器的管理。@Component注解负责创建Bean对象
    在这里插入图片描述

第4步:创建 SchoolController:

@Controller
public class SchoolController {//创建对象@Resourceprivate SchoolInfo schoolInfo;//接受到myschool请求@RequestMapping("/myschool")@ResponseBodypublic String doSchool(){//对象调方法,结果返回return "学校信息:"+schoolInfo.toString();} 
}

第5步:配置提示:

  • 1.自定义类绑定的配置提示的问题:这是IDEA不识别配置文件的问题,自定义的类和配置文件绑定一般没有提示
  • 2.如果想有提示,需要进行引入依赖,这样就可以解决这个提示的问题;当然不加依赖也不会影响程序的执行;
    在这里插入图片描述
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><!--表示防止此依赖加载到其他模块--!><optional>true</optional>
</dependency>
  • 2.依赖引入后,为了减少加载时间,需要告诉springBoot打包的时候,不要将processor依赖进行打包。所以需要进行以下配置
 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId></exclude></excludes></configuration></plugin></plugins></build>

第6步:测试

  • 4.执行 Application , 访问浏览器查看数据

2.3.说明:

  • 1.配置文件中的namewebsite等要和bean对象的属性名namewebsite对应上(属性名相同)
  • 2.bean中的所有属性都提供了setter方法,因为底层是通过setter方法给bean属性赋值的
  • 3.bean的属性需要是非static的属性

2.4.案例:

案例实现:

  • 1.建一个java类,然后使用@ConfigurationProperties注解绑定配置信息到封装类中;使用@Component把封装类添加到Spring管理的bean容器中,否则无法进行属性注入,
===========Person.java===========
package com.jianqun.boot.bean;import lombok.Data;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
/** @author lvjianuqn* @create 2021-10--21:50* @ConfigurationProperties:指定要加载的数据*/@ConfigurationProperties(prefix = "person")
@Component
@Data
@ToString
public class Person {private String userName;private Boolean boss;private Date birth;private Integer age;private Anim pet;private String[] interests;private List<String> animal;private Map<String, Object> score;private Set<Double> salarys;private Map<String, List<Pet>> allPets;
}
  • 2.创建配置文件:application.yml
# yaml表示以上对象
===========application.yml===========
person:userName: zhangsanboss: falsebirth: 2019/12/12 20:12:33age: 18pet: name: tomcatweight: 23.4interests: [篮球,游泳]animal: - jerry- marioscore:english: first: 30second: 40third: 50math: [131,140,148]chinese: {first: 128,second: 136}salarys: [3999,4999.98,5999.99]allPets:sick:- {name: tom}- {name: jerry,weight: 47}health: [{name: mario,weight: 47}]
  • 3.创建controller,然后我们在浏览器中进行访问测试

在这里插入图片描述

b.案例说明:

  • 1.@Component注解可以修改为@Configuration
    在这里插入图片描述
  • 2.当修改为@Configuration注解后,打印这个Bean对象的类名,可以看到代理类相关的提示:
    • 可以发现底层实际上创建了Bean的代理对象AppBean$$SpringCGLIB
      在这里插入图片描述
  • 3.生成代理对象会影响效率,这里我们不需要使用代理功能,可以通过以下@Configuration(proxyBeanMethods = false)配置来取消代理机制

三、yml中的属性引用:

  • 1.所谓的属性引用意思就是tempDir中,第一个路径的值和baseDir中的值有关系,会随之变化而变化,所以就用{}形式来进行引用:
    在这里插入图片描述

http://www.dtcms.com/a/262954.html

相关文章:

  • 一、(基础)构建一个简单的 LangChain 应用
  • 对称非对称加密,https和http,https通讯原理,Charles抓包原理
  • macos 使用 vllm 启动模型
  • WIFI 低功耗保活知识系列---三.WiFi AP如何广播自己的缓存区信息
  • OpenCV CUDA模块设备层----计算向量的平方根函数sqrt
  • 基于Spring Boot的绿园社区团购系统的设计与实现
  • Python 安装使用教程
  • Spring Boot 启动性能优化实战指南
  • 基于 SpringBoot+Vue.js+ElementUI 的 Cosplay 论坛设计与实现7000字论文
  • 【硬核数学】2.7 理论与现实的鸿沟:深度学习的数值稳定性挑战《从零构建机器学习、深度学习到LLM的数学认知》
  • 【Spring】——事务、整合、注解
  • 后台管理系统模板Art Design Pro
  • js代码03
  • Karmada 多集群服务发现
  • Apache Doris Profile 深度解析:从获取到分析,解锁查询性能优化密码
  • RedhatCentos挂载镜像
  • LeetCode Hot100(图论)
  • SQL参数化查询:防注入与计划缓存的双重优势
  • 使用 Sqlcmd 高效导入大型 SQL Server 数据库脚本 (.sql)
  • 深入理解 B+ 树:数据库索引的脊梁
  • AI初学者如何对大模型进行微调?——零基础保姆级实战指南
  • vscode一个文件夹有残余的git仓库文件,已经失效了,怎样进行清空仓库残余文件并重新初始化git--ubuntu
  • 【stm32】HAL库开发——CubeMX配置RTC,单片机工作模式和看门狗
  • 炸鸡派-基础测试例程
  • Linux入门篇学习——Ubuntu 系统介绍和Ubuntu启用root用户
  • 在线五子棋对战项目
  • 1.1_2 计算机网络的组成和功能
  • python+uniapp基于微信小程序的食堂菜品查询系统
  • Deepoc 大模型:无人机行业的智能变革引擎
  • vue-33(实践练习:使用 Nuxt.js 和 SSR 构建一个简单的博客)