SpringBoot快速回顾(@value读取配置文件)

news2024/12/22 19:44:30

目录

  • 1.定义配置文件
  • 2. 定义Controller类
  • 3. 测试
  • 4. 优化
    • 4.1 封装实体类
    • 4.3 定义controller类
    • 4.2 测试

本文将介绍如何使用@value读取配置文件的内容。
在实际项目中,往往会在配置文件中写项目部署需要配置的环境信息(数据库驱动,数据库账号密码等),因此学会读取配置文件信息十分关键。 项目结构

在这里插入图片描述

1.定义配置文件

文件名:application.properties

# 端口号
server.port=8081

# 修改上下文地址为localhost:8081/zjh-value/hello
server.servlet.context-path=/zjh

# 自定义配置信息
school.name=中科大
school.age=200
school.local=西安

myMajor=computer science

2. 定义Controller类

文件名:helloSpring

package com.zjh.Controller;

import com.zjh.vo.School;
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的解释
//声明成一个controller类,表明这是springMVC Controller的对象。
//1、浏览器访问url地址:localhost:8081/zjh/hello时,后台寻找Controller对象,找到了注解@Controller,找到了这个类
//2、找到在类中使用了@RequestMapping("/hello")的方法,该方法返回一个字符串
@Controller
public class helloSpring {

    //解释:.properties类型的文件中,要求key=value的格式
    //因此我们先声明一个与key同名的属性,再用@Value把数据从配置文件中取出来,就可以直接用了
    @Value("${server.port}")
    private String port;

    @Value("${server.servlet.context-path}")
    private String path;

    @Value("${school.name}")
    private String name;

    @Value("${school.age}")
    private int age;

    @Value("${school.local}")
    private String local;

    @Value("${myMajor}")
    private String myMajor;

    // 利用@Value一个一个获取配置文件的信息
    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        return path+", port="+port+", name="+name+", age="+age+", local="+local+", myMajor="+myMajor;
    }

}

3. 测试

运行结果
在这里插入图片描述

4. 优化

可以发现,我们使用了很多各@value注解,需要一一读取到相关信息
如果一个一个的取配置文件的数据,太麻烦。所以希望可以把配置文件的数据包装成一个java对象,一次性取出
这里尝试一次性取出 school.name=西科大 、school.age=200、 school.local=西安
怎么做呢,那就是将school前缀的信息封装成一个实体类

4.1 封装实体类

文件名:school

//@Component解释:
//利用注解声明这个类是一个Bean,需要交给IOC管理
@Component
//@ConfigurationProperties解释:
//读取配置文件的前缀信息,这样就在配置文件中找school开头的key
@ConfigurationProperties(prefix = "school")
public class School {

    private String name;
    private int age;
    private String local;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getLocal() {
        return local;
    }

    public void setLocal(String local) {
        this.local = local;
    }

    @Override
    public String toString() {
        return "School{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", local='" + local + '\'' +
                '}';
    }
}

4.3 定义controller类

文件名:hellospring2


@Controller
public class helloSpring2 {
    @Value("${server.port}")
    private String port;

    @Value("${server.servlet.context-path}")
    private String path;

    @Value("${myMajor}")
    private String myMajor;

    //2.P24 把配置文件的数据映射为java对象
    //把配置属性包装成java对象,便捷式获取信息
    //@Resource说明:依赖注入
    //将声明为Bean的类School注入到IOC容器里面,IOC容器自动生成该类的对象,并且把该对象赋值给sch
    @Resource
    private School sch;

    @RequestMapping("/dateSchool")
    @ResponseBody
    public String test(){
        return sch.toString();
    }

}

4.2 测试

在这里插入图片描述
成功返回

思考问题:

为什么使用@vaule,就可以读取到配置文件内容?

答:因为在实体类上使用@value会将配置文件信息注入到对应的属性中

为什么这里没有使用@value,还可以读取到配置文件的内容?

答:使用@ConfigurationProperties注解来直接将配置文件中的值注入到类的属性中,而无需使用@Value注解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/726362.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

医疗金融法律大模型:从ChatDoctor到FinBERT/FinGPT/BloombergGPT、ChatLaw/LawGPT_zh

第一部分 各种医疗类ChatGPT:或中英文数据微调LLaMA、或中文数据微调ChatGLM 1.1 基于LLaMA微调的中英文版ChatDoctor 1.1.1 ChatDoctor:通过self-instruct技术提示API的数据和医患对话数据集微调LLaMA Github上有一个基于LLaMA模型的医疗微调模型&am…

zabbix (自定义监控内容-配置邮件报警-自动发现与自动注册)

目录 zabbix 客户端主机配置自定义监控内容设置邮件报警zabbix 自动发现与自动注册zabbix 自动发现(对于 agent2 是被动模式)//zabbix 自动发现(对于 agent2 是被动模式)zabbix 自动注册(对于 agent2 是主动模式&#…

IDEA+springboot+jpa+Layui+Mysql销售考评系统源码

IDEAspringbootjpaLayuiMysql销售考评系统源码 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.评分结果3.评分管理4.添加评分5.用户管理6.添加用户7.角色管理8.添加角色8.销售管理9.添加销售 三、部分代码UserDao.javaUserController.javaUser.java 四、其他获取源码 一、…

计算机组成原理实验二:多位逻辑门构建

目录 一、实验目的 二、实验设备 三、实验原理 四、实验内容 1. 16位非门 2.16位与门 3.16位或门 4. 16位复用器 五、实验习题 1.还可以怎样设计各种芯片的物理结构 2.“block copy”(块复制)和edit菜单中“copy to clipboard”的区别 六、自…

在线OJ项目

1.在线OJ-背景介绍 在线的网页版的编程平台.,打开一个网站,上面就能看到很多的算法题.,在线做题,在线提交.立即就能看到运行结果,是否通过. leetcode 牛客等 一个在线OJ平台,核心功能: 能够管理题目(保存很多的题目信息:题干+测试用例)题…

FPGA软核调试方法

软核工程创建步骤 创建如下工程目录 bin目录:存放SDK工程生成的elf文件(Release编译模式) hdf目录:存放fpga工程师提供的的hdf文件 prj目录:工程目录(包含SDK工程源码) doc目录:文档目录 基于2018.2版本SDK建立工程 打开Xil…

Spring Boot中的CSRF攻击及预防

Spring Boot中的CSRF攻击及预防 什么是CSRF攻击? CSRF(Cross-site Request Forgery)跨站请求伪造,也称为“one-click attack”或“session riding”,是一种网络攻击方式,攻击者通过在受害者浏览器上欺骗或…

【redis】生产级部署

目录 环境部署 redis环境部署 redis多实例配置 构建redis cluster集群 cluster生产集群部署 Cluster集群故障切换 环境部署 1 、关闭防火墙 2 、准备两台虚拟机配置内容如下 redis-master 192.168.108.67 7000 redis-master01 7001 redis-master02 7002 redis-ma…

Vue2.0-3.0 入门到实战 - 初始及插件安装

1 创建view实例,初始化渲染 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><div id"app">{{ msg }} </div><script type&…

第123天:内网安全-域防火墙入站出站规则不出网隧道上线组策略对象同步

#知识点&#xff1a; 0、防火墙组策略对象 1、OSI七层协议模型 2、正反向监听器说明 3、隧道技术分层协议 4、CS&MSF&控制上线-隧道技术&#xff1a;解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; -代理技术&#xff1a;解决网络通讯不通…

arduino平台控制直流电机PID速度闭环控制编程实现

PID&#xff08;Proportional-Integral-Derivative&#xff0c;比例-积分-微分&#xff09;控制是一种常用的控制算法&#xff0c;可以用于实现直流有刷电机的速度闭环控制。PID控制器根据当前的误差&#xff08;期望速度与实际速度之差&#xff09;来计算输出&#xff0c;以调…

RabbitMQ系列(15)--死信队列的简介与死信队列和死信消费者的实现

1、死信的概念 死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;一般来说producer&#xff08;生产者&#xff09;将消息投递到broker或直接放到queue&#xff08;队列&#xff09;中&#xff0c;consumer&#xff08;消费者&#xff09;从queue&#xff08;队列&am…

Css基础:盒子模型

1.盒子模型的构成&#xff1a; 边框 外边距 内边距 实际内容 2.table表格的单元格之间的线太粗需要border-collapse:collapse;合并一下边框宽度 3.内边距 padding 4.外边距 margin 块元素水平居中的做法&#xff0c;margin:0 auto; 行内元素和行内块元素 水平居中做…

FreeRTOS ~(五)队列的常规使用 ~ (2/5)队列解决互斥缺陷

前情提要 FreeRTOS ~&#xff08;四&#xff09;同步互斥与通信 ~ &#xff08;2/3&#xff09;互斥的缺陷 举例子说明&#xff1a;利用队列解决前述的"互斥的缺陷"问题 static QueueHandle_t xQueueUARTHandle;/* 利用队列的写数据和读数据来做类似标志位的工作,类…

C++笔记之数组拷贝和vector拷贝

C笔记之数组拷贝和vector拷贝 code review! 文章目录 C笔记之数组拷贝和vector拷贝一.C数组拷贝1.使用循环2.使用std::copy算法3.使用std::array 二.C语言数组拷贝1.使用循环2.使用memcpy函数3.使用for循环和指针 三.CVector拷贝四.公众号&#xff1a;三戒纪元 博文摘抄——C…

Dynamsoft 条形码阅读器 10.0.0 Crack

Dynamsoft 条形码阅读器 10.0.0 将来自不同来源的图像数据转换为标准输入图像数据。 7月 06&#xff0c; 2023 - 10&#xff1a;32新版本 特征 SDK经过重构&#xff0c;与DynamsoftCaptureVision&#xff08;DCV&#xff09;架构集成&#xff0c;该架构包括&#xff1a; ImageS…

提升车道运行效率——远眺智慧可变车道控制系统

精细科学的交通组织是提升道路通行效率的有效途径。可变导向车道&#xff08;后文简称可变车道&#xff09;作为精细化交通组织的重要手段&#xff0c;能够有效地利用现有道路空间资源、提高道路通行效率。在交通拥堵日趋严重的情况下&#xff0c;其在保障交通畅通方面起着重要…

Cisco AnyConnect Secure Mobility Client 4.10.07062 (macOS, Linux, Windows)

Cisco AnyConnect Secure Mobility Client 4.10.07062 (macOS, Linux, Windows) Cisco Secure Client&#xff08;包括 AnyConnect&#xff09; 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-anyconnect-4/&#xff0c;查看最新版。原创作品&#xff0c;转载请保…

warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

1>LINK : warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突&#xff1b;请使用 /NODEFAULTLIB:library 1>LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突&#xff1b;请使用 /NODEFAULTLIB:library 知识背景&#xff1a; VC中有4个CRT链接库版…

java项目之九宫格日志网站(ssm+jsp+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的九宫格日志网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&#x…