企业级信息系统开发讲课笔记4.3 Spring Boot两种全局配置和两种注解

news2024/11/28 19:26:36

文章目录

  • 零、学习目标
  • 一、全局配置文件概述
  • 二、Application.properties配置文件
    • (一)创建Spring Boot的Web项目PropertiesDemo
    • (二)在application.properties里添加相关配置
      • 1、配置tomcat端口号和web虚拟路径
      • 2、对象类型的配置与使用
        • (1)创建Pet类
        • (2)创建Person类
        • (3)在application.properties里配置对象
        • (4)给Person类添加注解
        • (5)给Pet类添加注解
        • (6)从Spring容器里获取Person类的实例并输出
        • (7)解决输出结果的汉字乱码问题
        • (8)从Spring容器里获取Pet类的实例并输出
      • 3、两种属性注解方式的对比
  • 三、Application.yaml配置文件
    • 1、备份application.properties文件
    • 2、在resoures目录里创建application.yaml文件
    • 3、运行测试方法testPerson(),查看结果
    • 4、运行测试方法testPet(),查看结果
  • 四、两种配置文件的比较
    • 1、application.properties配置文件
    • 2、application.yaml配置文件
  • 五、课后作业
    • 任务:修改StudentInfo项目输出学生信息

零、学习目标

  1. 掌握application.properties配置文件
  2. 掌握application.yaml配置文件
  3. 掌握使用@ConfigurationProperties注入属性
  4. 掌握使用@Value注入属性

一、全局配置文件概述

  • 全局配置文件能够对一些默认配置值进行修改。Spring Boot使用一个application.properties或者application.yaml的文件作为全局配置文件,该文件存放在src/main/resource目录或者类路径的/config,一般会选择resource目录。

二、Application.properties配置文件

(一)创建Spring Boot的Web项目PropertiesDemo

  • 利用Spring Initializr方式创建项目
    在这里插入图片描述

  • 设置项目元数据
    在这里插入图片描述

  • 添加测试和Web依赖
    在这里插入图片描述

  • 设置项目名称及保存位置
    在这里插入图片描述

  • 单击【Finish】按钮,完成项目初始化工作
    在这里插入图片描述

  • 设置项目编码为utf8
    在这里插入图片描述

(二)在application.properties里添加相关配置

  • 点开resource目录,查看应用程序属性配置文件
    在这里插入图片描述

1、配置tomcat端口号和web虚拟路径

#修改tomcat默认端口号
server.port=8888
#修改web虚拟路径
server.servlet.context-path=/lzy

在这里插入图片描述

  • 更多配置属性,详见官网https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
  • 启动应用,查看控制台
    在这里插入图片描述

2、对象类型的配置与使用

(1)创建Pet类

  • 在net.hw.lesson03里创建bean子包,在子包里创建Pet类
    在这里插入图片描述
package net.hw.lesson03.bean;

/**
 * 功能:宠物实体类
 * 作者:华卫
 * 日期:2021年04月28日
 */
public class Pet {
    private String type; // 类型
    private String name; // 名字

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Pet{" +
                "type='" + type + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

(2)创建Person类

  • 在net.hw.lesson03.bean包里创建Person类
    在这里插入图片描述
package net.hw.lesson03.bean;

import java.util.List;
import java.util.Map;

/**
 * 功能:人类
 * 作者:华卫
 * 日期:2021年04月28日
 */
public class Person {
    private int id; // 编号
    private String name; // 姓名
    private List<String> hobby; // 爱好;
    private Map<String, String> family; // 家庭成员
    private Pet pet; // 宠物

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public List<String> getHobby() {
        return hobby;
    }

    public void setHobby(List<String> hobby) {
        this.hobby = hobby;
    }

    public Map<String, String> getFamily() {
        return family;
    }

    public void setFamily(Map<String, String> family) {
        this.family = family;
    }

    public Pet getPet() {
        return pet;
    }

    public void setPet(Pet pet) {
        this.pet = pet;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", hobby=" + hobby +
                ", family=" + family +
                ", pet=" + pet +
                '}';
    }
}

(3)在application.properties里配置对象

#配置对象
person.id=1
person.name=张三丰
person.hobby=旅游,美食,音乐
person.family.father=张云光
person.family.mother=吴文燕
person.family.grandpa=张宏宇
person.famliy.grandma=唐雨欣
person.family.son=张君宝
person.family.daughter=张晓敏
person.pet.type=泰迪犬
person.pet.name=瑞瑞

在这里插入图片描述

(4)给Person类添加注解

  • 添加注解@Component,交给Spring去管理
    在这里插入图片描述
  • 添加注解@ConfigurationProperties(prefix = “person”)
    在这里插入图片描述
  • 注意:采用@ConfigurationProperties注解方式,必须要有set方法,才会自动为Person类所有属性注入相应的值,包括简单类型和复杂类型

(5)给Pet类添加注解

  • 添加注解@Component,交给Spring去管理
  • 添加注解@ConfigurationProperties(prefix = “person.pet”) - 可以不用添加
    在这里插入图片描述

(6)从Spring容器里获取Person类的实例并输出

  • 实现接口ApplicationContextAware,实现其抽象方法setApplicationContext
    在这里插入图片描述

  • 声明ApplicationContext对象,并在setApplicationContext里初始化
    在这里插入图片描述

  • 创建测试方法testPerson(),从Spring容器中获取Person类的实例并输出
    在这里插入图片描述

  • 运行测试方法testPerson(),查看结果
    在这里插入图片描述

(7)解决输出结果的汉字乱码问题

  • 使用JDK工具native2ascii.exe将汉字处理成uncode编码
    在这里插入图片描述
D:\IdeaProjects\PropertiesDemo>cd src/main/resources

D:\IdeaProjects\PropertiesDemo\src\main\resources>native2ascii -encoding utf8 application.properties
#\u4fee\u6539tomcat\u9ed8\u8ba4\u7aef\u53e3\u53f7
server.port=8888
#\u4fee\u6539web\u865a\u62df\u8def\u5f84
server.servlet.context-path=/lzy

#\u914d\u7f6e\u5bf9\u8c61
person.id=1
person.name=\u5f20\u4e09\u4e30
person.hobby=\u65c5\u6e38,\u7f8e\u98df,\u97f3\u4e50
person.family.father=\u5f20\u4e91\u5149
person.family.mother=\u5434\u6587\u71d5
person.family.grandpa=\u5f20\u5b8f\u5b87
person.famliy.grandma=\u5510\u96e8\u6b23
person.family.son=\u5f20\u541b\u5b9d
person.family.daughter=\u5f20\u6653\u654f
person.pet.type=\u6cf0\u8fea\u72ac
person.pet.name=\u745e\u745e

D:\IdeaProjects\PropertiesDemo\src\main\resources>

  • 修改application.properties文件,汉字采用unicode编码形式
    在这里插入图片描述
  • 运行测试方法testPerson(),查看结果
    在这里插入图片描述

(8)从Spring容器里获取Pet类的实例并输出

  • 查看Pet类的注解,有配置属性的注解@ConfigurationProperties(prefix = "person.pet")
    在这里插入图片描述

  • 在测试类里添加测试方法testPet()
    在这里插入图片描述

  • 运行测试方法testPet(),查看结果
    在这里插入图片描述

  • 注释掉Pet类的配置属性的注解@ConfigurationProperties(prefix = "person.pet")
    在这里插入图片描述

  • 再次运行测试方法testPet(),查看结果
    在这里插入图片描述

  • 修改application.properties,配置宠物对象
    在这里插入图片描述

  • 再次运行测试方法testPet(),查看结果
    在这里插入图片描述

  • 大家可以看到,宠物对象的属性依然没有被注入,下面我们换一种属性注解的方式,采用@Value注解方式。

  • 给Pet类的属性添加值注解@Value
    在这里插入图片描述

  • 再次运行测试方法testPet(),查看结果
    在这里插入图片描述

3、两种属性注解方式的对比

  • 采用@ConfigurationProperties注解方式,必须要有set方法,才会自动为所注解的类的全部属性注入相应的值,包括简单类型和复杂类型(List、Map、Pet……)。
  • 采用@Value注解方式,优点在于可以不要set方法,但是有两点不足:其一、需要一个一个地注入,显得麻烦;其二、对于复杂类型不能注入,比如Map、List、Pet等。

三、Application.yaml配置文件

1、备份application.properties文件

  • 文件更名为application.back,即让此文件不起作用
    在这里插入图片描述

2、在resoures目录里创建application.yaml文件

  • 创建application.yaml文件
    在这里插入图片描述

  • 配置服务器属性
    在这里插入图片描述

  • 配置person对象属性
    在这里插入图片描述

  • 配置pet对象属性
    在这里插入图片描述

  • 查看application.yaml文件内容

#配置服务器
server:
  port: 8888
  servlet:
    context-path: /lzy

#配置person对象
person:
  id: 1
  name: 张三丰
  hobby:
    旅游
    美食
    音乐
  family: {
       father: 张云光,
       mother: 吴文燕,
       grandpa: 张宏宇,
       grandma: 唐雨欣,
       son: 张君宝,
       daughter: 张晓敏
    }
  pet:
    type: 泰迪犬
    name: 瑞瑞

#配置pet对象
pet:
  type: 泰迪犬
  name: 瑞瑞

3、运行测试方法testPerson(),查看结果

在这里插入图片描述

4、运行测试方法testPet(),查看结果

在这里插入图片描述

四、两种配置文件的比较

1、application.properties配置文件

  • 采用XML语法,键值对:键=值,没有层次结构
  • 如果值里有汉字,必须得转成unicode,否则会出现乱码问题

2、application.yaml配置文件

  • 采用YAML语法,键值对:键: 值(冒号与值之间有空格),具有层次结构
  • 允许值里有汉字,不必转成unicode,也不会出现乱码问题

五、课后作业

任务:修改StudentInfo项目输出学生信息

在这里插入图片描述

  • 创建学生实体类Student
    在这里插入图片描述
  • 添加属性
private String id;
private String name;
private String gender;
private int age;
private String major;
private String telephone;
private String email;
private String hobby;
  • 添加getter和setter
  • 添加toString()方法
  • 添加注解@Component
  • 添加注解@ConfigureProperties
  • 将application.properties更名为application.yaml
    在这里插入图片描述
  • 配置student对象属性
    在这里插入图片描述
  • 修改控制器StudentInfoController,student()方法里返回student的值
  • 运行启动类
    在这里插入图片描述
  • 在浏览器里访问http://localhost:8080/student
    在这里插入图片描述

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

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

相关文章

C++继承(一文学懂继承)——对象赋值转换、菱形虚拟继承

hello&#xff0c;这里是bangbang&#xff0c;今天来讲下继承。 面向对象三大特性&#xff1a;封装、继承、多态。 目录 1. 继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1 定义格式 1.2.2 继承关系和访问限定符 1.2.3 继承基类成员访问方式的变化 2. 基类和派生类对…

波士顿房价数据集怎么不见了?

波士顿数据下载 消失的波士顿 OoO 做线性回归的同学大概率会用到一个数据集&#xff0c;即波士顿房价数据集&#xff0c;然而当你从sklearn下载该数据集时&#xff0c;你会惊讶地发现居然下载不了了&#xff01;&#xff01;&#xff01;起初我以为是是什么别的原因导致数据集可…

云计算之OpenStack基础

云计算之OpenStack基础 一、OpenStack基础知识二、虚拟化2.1 虚拟化类型2.1.1 Ⅰ型虚拟化2.1.2 Ⅱ型虚拟化2.1.3 比较 2.2 KVM&#xff08;Ⅱ型虚拟化&#xff09;2.2.1 基本概念2.2.2 Libvirt2.2.3 CPU虚拟化2.2.4 内存虚拟化2.2.5 存储虚拟化2.2.5.1 目录类型的 Storage Pool…

【教程】配置NFS共享直接访问目标服务器的存储目录

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 目录 前景提要 NFS安装教程 旧服务器上 新服务器上 验证安装 优缺点 扩展 前景提要 我们新服务器的硬盘容量很小&#xff0c;但旧服务器的硬盘容量很大。如何在不拔硬盘的情况下&#xff0c;直接已本地目录…

分区计量管理项目应用

为充分发挥分区计量管理项目在漏损控制的效用&#xff0c;应构建科学完备的应用体系&#xff0c;如下图 分区计量应用体系 1. 基于水量平衡分析的漏损现状评估方法 分区计量管理项目通过监控分析DMA 分区内流量、压力、水质、大用户用水等情况&#xff0c;结合营业抄收系统的营…

【内网渗透】春秋云镜 Tsclient WP

前言 mssql连接和攻击、windows提权、令牌窃取、镜像劫持 flag1 上来就扫给的地址 nmap: 结合题目的mssql知识点&#xff0c;估计是从这里入手了&#xff0c;尝试爆破用户名和密码&#xff0c;这里先用fscan来爆&#xff0c;可以直接爆出来&#xff08;别的工具也可&#x…

0.96寸oled显示坏苹果(badapple)

前言 俗话说&#xff1a;有屏幕的地方就会有badapple。 下面带来使用0.96寸OLED屏幕显示badapple的教程。 1、获取视频 首先从网上下载badapple的视频&#xff0c;下载地址&#xff1a;badapple 2、抓取视频图片 使用OLED播放视频的思想就是将视频分成一张一张的图片然后进行…

叉乘在图形学中的几何意义 ---- 判断一个点是否在三角形内

1 叉乘是什么 先简单介绍一下叉乘(cross product)&#xff1a; a → b → \overrightarrow{a} \times \overrightarrow{b} a b &#xff0c;其结果&#xff0c;还是一个向量。 其方向&#xff0c;符合右手螺旋定则&#xff08;右手手指头从a转向b&#xff0c;看大拇指指向哪…

声音合成——Foley Sound——DECASE项目——多模态智能感知与应用——VariantAutoencoder(VAE)代码实现(7)

文章目录 概述VAE代码实现关闭eager execution修改bottlenectk组件修改loss损失函数 Preprocessline模块实现Loader模块Padder模块LogSpectrogramExtractor模块MinMaxNormaliser模块Saver模块PreprocessPipeLine模块知识补充property修饰词 train训练模块load_fsdd模块train模块…

针对基于智能卡进行认证的活动目录攻击

最近&#xff0c;我参与了一项攻击基于智能卡的活动目录的工作。实际上&#xff0c;你根本不需要使用物理智能卡来验证登录这个活动目录。证书的属性决定了它是否可以用于基于智能卡进行登录。因此&#xff0c;如果你能获得相应的私钥&#xff0c;那么就可以绕过智能卡的验证实…

ubuntu 22.04 安装 Docker Desktop 及docker介绍

目录 一、Docker Desktop 安装 1、我们先去官网下载安装包 2、Install Docker Desktop on Ubuntu 3、Launch Docker Desktop 二、Docker 介绍 什么是docker 如何使用docker docker是如何工作的 docker build docker run docker pull 一、Docker Desktop 安装 1、我们先…

网络应用技术师技能考试试题+讲解

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 前言 本章将会讲解网络应用技术师技能考试试题 一.正文 一、单选题(每题1分,满分50分) 1. 设信号的波特率为800Baud,采用幅度…

肠道微生物群:心力衰竭的新治疗靶点

谷禾健康 心力衰竭 Heart Failure&#xff08;HF&#xff09; 心力衰竭是一种严重的心血管疾病&#xff0c;其特点是较高的发病率和死亡率&#xff0c;同时也会带来高昂的医疗成本。 一般都认为心力衰竭是老年人的疾病&#xff0c;但其实心力衰竭已经呈现年轻化趋势。 以上症状…

a标签属性href的多种写法

众所周知&#xff0c;a标签的最重要功能是实现超链接和锚点。而且&#xff0c;大多数人认为a标签最重要的作用是实现超链接&#xff0c;其实不单单是实现超链接的方法&#xff0c;今天新起点博客就来整理下a标签中href的几种用法。 1、a href“[removed]js_method();” 这是常用…

即拼七人拼团系统开发模式,为什么这么火?

即拼七人拼团模式主要是结合了拼团模式的奖励机制和二二复制系统的排位玩法&#xff0c;将产品销售中的利润最大化让利于拼团的用户&#xff0c;刺激用户主动分享推广&#xff0c;以解决平台引流和用户活跃度的问题。 具体来说&#xff0c;即拼七人拼团模式就是用户进入平台购买…

崩坏:星穹铁道私人服务器搭建教程

准备工具&#xff1a; 一台 Windows 系统服务器 《崩坏&#xff1a;星穹铁道》启动器 《崩坏&#xff1a;星穹铁道》客户端 如果以上各项你都准备好了的话&#xff0c;现在就开始吧&#xff01; 首先完全解压你的《崩坏&#xff1a;星穹铁道》客户端以及SR启动器。 解压完成…

你不知道的JavaScript的事件循环

JavaScript的事件循环 JavaScript语言的一大特点就是单线程&#xff0c;也就是说&#xff0c;同一个时间只能做一件事。那么&#xff0c;为什么JavaScript不能有多个线程呢&#xff1f;这样能提高效率啊。这也与它的用途有关。作为浏览器脚本语言&#xff0c;JavaScript的主要…

Kubernetes二进制部署 单节点

目录 1.环境准备 1.关闭防火墙和selinux 2.关闭swap 3.设置主机名 4.在master添加hosts 5.桥接的IPv4流量传递到iptables的链 6.时间同步 2.部署etcd集群 1.master节点部署 2.在node1与node2节点修改 3.在master1节点上进行启动 4.部署docker引擎 3.部署 Master 组…

麻了,同样是科班出身,学弟月薪却是我的3倍

我有个同学大学毕业&#xff0c;因为却少工作经验&#xff0c;又不愿意去正经的互联网企业做实习生&#xff0c;他嫌工资太低&#xff0c;于是进了家外包公司&#xff0c;那时候感觉待遇还可以。可现在五年过去了&#xff0c;他想跳槽却鲜有人问津。最可气的是比他晚一年毕业的…

Java中的七种设计原则

1.开闭原则 对扩展开放&#xff0c;对修改关闭。在程序需要进行扩展的时候&#xff0c;不能去修改原有的代码&#xff0c;要去实现一个热插拔的效果。简言之&#xff0c;是为了使程序的扩展性好&#xff0c;易于维护和升级。 下面是输入法设置皮肤的例子&#xff1a; // 抽象皮…