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

news2024/12/23 18:19:03

目录

  • 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/737310.html

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

相关文章

mysql离线安装

MySQL离线安装 进行MySQL离线安装包,当前安装版本为MySQL8.0.32 下载页面:https://downloads.mysql.com/archives/community/ 下载地址:https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar 将下载完成的安…

【Linux】关于Linux系统挂载大于2TB磁盘的问题

之前在Linux系统挂载文件系统的时候,我已经习惯了使用 fdisk 命令来对磁盘进行分区。fdisk 常用的几个指令有: m 显示命令帮助菜单; n 创建新的分区; p 显示分区信息; t 修改分区类型(一般设置为8e&…

Transformer原理理解

本文介绍Transformer的基本原理,主要记录一下自己的学习过程。 论文:https://arxiv.org/abs/1706.03762 参考: http://jalammar.github.io/illustrated-transformer/https://zhuanlan.zhihu.com/p/338817680https://blog.csdn.net/longxin…

2023年05月份青少年软件编程Python等级考试试卷三级真题(含答案)

2023-05 Python三级真题 题数:38 分数:100 测试时长:60min 一、单选题(共25题,共50分) 1. 请选择,下面代码运行之后的结果是?( )(2分) a 2 b 4 try:…

声网 Agora音视频uniapp插件跑通详解

一、前言 在使用声网SDK做音视频会议开发时, 通过声网官方论坛 了解到,声网是提供uniapp插件的,只是在官方文档中不是很容易找到。 插件地址如下: Agora音视频插件 Agora音视频插件(JS) 本文讲解如何跑通演示示例 二、跑通Demo 2.1 环境安装: 参考: 2. 通过vue-…

Mellanox ConnectX-6-dx智能网卡 openvswitch 流表卸载源码分析

Mellanox ConnectX-6-dx智能网卡 具备流表卸载能力。智能网卡的部署方式兼容当前服务器ovs部署方式。而DPU bluefield 2,其要求ovs从服务器上转移到DPU上,这影响现有上层neutron架构,改造量大。 前置信息 OFED代码版本:Linux In…

Scratch 猴子踢球

scratch 猴子踢球 本程序转为HTML后运行,“猴子”角色跟随鼠标移动,“沙滩球”角色开始时生成20个并移动到随机位置,在碰到“猴子”角色时开始移动,碰到边缘或其它角色时反弹。 图形化程序如下 “沙滩球”角色 “猴子”角色

spring 详解四 IOC(spring Bean生命周期)

spring生命周期概述 spring Bean的生命周期是从Bean实例化之后,即通过反射创建对象之后,到Bean成为一个完整对象,最终存储在单例池中,然后在销毁的过程被称为spring Bean的生命周期,这部分不会介绍销毁过程&#xff0…

Spring限流之限流方案分析

文章目录 1 限流方案1.1 引言1.2 常用限流策略1.3 基于guava限流实现1.3.1 引入guava依赖1.3.2 自定义限流注解1.3.3 限流AOP类1.3.4 测试接口 1.4 基于sentinel限流实现1.4.1 引入sentinel核心依赖包1.4.2 自定义限流注解1.4.3 自定义AOP类实现限流1.4.4 自定义测试接口 1.5 基…

独立和相关(线性)的关系

相关(线性)>不独立 不相关(线性) 推不出 独立 (是因为不一定线性相关,可以沿曲线相关)

一起学SF框架系列5.7-模块Beans-BeanDefinition解析

开发人员按元数据规则定义了应用bean,了解SF如何根据定义解析成BeanDefiniton有助于深入理解框架实现。解析过程如下: 资源加载 从资源文件加载bean的元数据配置,实际过程如下图: 实际从指定的XML文件加载bean定义是从XmlBeanD…

电脑pdf如何转换成word格式?分享这三个方法给大家!

记灵在线工具是一个非常方便的PDF转Word工具,它可以帮助用户快速、准确地将PDF文件转换为Word格式。以下是使用步骤: 打开您的网络浏览器,访问记灵在线工具的官方网站。 在首页上找到并点击“PDF转Word”选项。 在新打开的页面中&#xff0…

如何在 SwiftUI 中配置 SwiftData

文章目录 前言创建模型模式和版本控制迈出关键的一步创建迁移计划创建模型容器从视图中查询模型从视图中访问模型上下文总结 前言 在 WWDC 2023 上,Apple 宣布了一个备受期待的新持久性刷新,以一种新的框架形式出现:SwiftData。SwiftData 从…

【设计模式】设计模式前置知识:UML类图入门

UML类图 介绍 UML–Unified modeling language UMl(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于…

来啦!OceanBase 第7期技术征文活动获奖名单公布!

“小鱼”的诞生与成长离不开广大开发者的陪伴与支持,我们非常兴奋能把 4.1 版本的这一系列新能力带给大家,“小鱼”会游得更快更远,也会陪伴更多数据库开发者一同成长。 OceanBase 联合墨天轮技术社区,举行「4.1 上手体验」第五届…

基于SpringBoot+Hadoop+Vue的企业网盘系统

完整资料进入【数字空间】查看——baidu搜索"writebug" 1.1.1 选题的背景 随着信息网络技术的迅猛发展,云计算技术从它的概念提出已经开始在实际生产环境中使用了。大部分的东西都已经慢慢云端化,这种新型的技术也受到许多互联网人员的关注&a…

初阶C语言——三子棋

我们今天讲一个小游戏,三子棋大家应该都玩过吧,就是行和列,或者对角线上有一样大的字符时,就为获胜,今天我们就来写这样的一个代码实现这样的功能 首先我们要创建两个源文件和一个头文件 头文件game.h用来包含我们的头…

EmEditor制表符设置为空格

以下是具体操作 工具 - 当前配置属性 - 常规 - 制表符/缩进 - 将制表符转换为空格 前打对钩

作业怎么清除试卷笔迹?拿捏可以擦除答案的方法

在日常学习中,我们经常会遇到需要修改或擦除试卷上的笔迹的情况。本文将介绍一种简单实用的方法,即使用手机拍照扫描试卷并擦除答案。 手机拍照扫描试卷 首先,我们需要使用手机拍照扫描试卷。这一步非常简单,只需要将试卷平铺在桌…

集成学习-BaggingVoting和多个模型的混淆矩阵

当涉及到集成学习时,投票法和袋装法是两种常见的技术,用于将多个基学习器(base learner)组合成一个强大的集成模型。 投票法(Voting):投票法是一种简单且常用的集成学习方法。在投票法中&#…