SpringBoot配置文件之EL表达式(@Value)

2024-06-22 17:38

本文主要是介绍SpringBoot配置文件之EL表达式(@Value),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1 配置文件种类

2 application.properties讲解

2.1 修改内嵌容器端口号和访问路径

2.2 自定义属性配置

2.3 配置变量引用

2.4  随机值配置

2.4.1 配置随机值

2.4.2配置随机端口

2.5 @@

3 yml 配置文件

3.1 yml 配置文件与 properties 文件的区别

3.2 yml 配置文件的语法

3.2.1 分隔符号不同

3.2.2 yml赋值

3.2.3 尽量不用TAB而是Enter

3.2.4 冒号后加空格

4 Spring中EL表达式讲解

4.1 EL表达式简介

4.2 表达式操作符

4.3 EL表达式示例


1 配置文件种类

Springboot有两种配置文件,一种是application.properties,一种是application.yml,两种配置文件,如果同时存在的话,那么application.properties的优先级要高于application.yml

2 application.properties讲解

2.1 修改内嵌容器端口号和访问路径

# 修改访问端口
server.port=8888
# 修改默认的访问路径 / 为 /helloboot
server.context-path=/helloboot

2.2 自定义属性配置

配置文件中是msg=Hello World

那么在类里面,按照下面写直接注入

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

2.3 配置变量引用

配置文件中是  

hello=bjsxt 
msg=Hello World ${hello}

在类中直接使用

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

2.4  随机值配置

2.4.1 配置随机值

在配置文件中:

num=${random.int}
msg=Hello World ${num}

在类中直接使用:

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

用处: 配置随机值, 在程序中如果有一些运算需要一个随机值, 那么可以使用该方式来生成。 注意, 只生成一次

2.4.2配置随机端口

server.port=${random.int[1024,9999]}

用处: 在 SpringCloud 的微服务中, 我们是不需要记录 IP 与端口号的。 那么我们也就不需要去维护服务的端口号。 让他随机生成就可以了。

2.5 @@

${}和@@都是springboot引用属性变量的方式,具体区别与用法:

  • ${}常用于pom.xml,和 src/main/resources/application.properties等默认配置文件的属性变量引用
  • @@方式常用于引用springboot非默认配置文件(即其他配置文件)中的变量,是springboot为替代${}属性占位符产生,原因是${}会被maven处理,所以引用非默认配置文件时起不到引用变量的作用。

语法为:field_name=@field_value@

示例:在实际项目开发中,为了在不同环境进行测试,我们会在src/main/resources目录下创建config文件夹,并在config中创建多个properties文件,例如:local.properties, development.properties, production.properties,
当我们在src/main/resources/application.properties文件中引用src/main/resources/config/local.properties的属性变量时,就要使用@@方式

3 yml 配置文件

yml 配置文件是 SpringBoot 中新增的一种配置文件格式。 特点: 具备天然的树状结构

3.1 yml 配置文件与 properties 文件的区别

配置文件的扩展名有变化

配置文件中的语法有变化

3.2 yml 配置文件的语法

3.2.1 分隔符号不同

在 properties 文件中是以“.” 进行分割, 在 yml 中使用“: ”进行分割

3.2.2 yml赋值

yml 的数据格式和 json 的格式很像, 都是 K-V 结构的。 并且是通过“” 赋值

3.2.3 尽量不用TAB而是Enter

在 yml 中缩进一定不能使用 TAB 件, 否则会报错。

3.2.4 冒号后加空格

每个 K 的冒号后面一定要加一个空格,否则不能识别,因此,一定要在冒号后加空格

详细的.properties和.yml文件比较链接

4 Spring中EL表达式讲解

4.1 EL表达式简介

spring EL-Spring 表达式语言,支持在xml和注解中使用表达式,类似于JSP的EL表达式语言

了解jsp中的EL表达式

Spring 开发中经常涉及调用各种资源的情况,包括普通文件、网址、配置文件、系统环境变量等,我们可以使用Spring的表达式语言实现资源的注入

SpringEL从名字来看就能看出,和EL是有点关系的,SpringEL的使用和EL表达式的使用非常相似,EL表达式在JSP页面更方便的获取后台中的值,而SpringEL就是为了更方便获取Spring容器中的Bean的值,EL使用${},$是去找外部配置的参数,将值赋过来,而SpringEL使用#{}进行表达式的声明

在@Value()中使用$用来从配置文件(.properties或.yml)中获取的,使用#是从一个定义个bean对象中获取对应属性

#{} 功能比 ${} 功能更强大,强调的是把内容赋值给属性,示例:

  • 表示常量: #{‘1’} ,#{’ This is a Constant Str’},直接注入不能使用${}EL${}不支持直接指定常量
  • 使用java代码new/instance of: 此方法只能是java.lang 下的类才可以省略包名 #{“new Spring(‘Hello World’)”}
  • 使用T(Type): 使用“T(Type)”来表示java.lang.Class实例,同样,只有java.lang 下的类才可以省略包名。此方法一般用来引用常量或静态方法 ,#{“T(Integer).MAX_VALUE”}
  • 变量: 使用“#bean_id”来获取,#{“beanId.field”}
  • 方法调用: #{“#abc.substring(0,1)”}
  • 运算符表达式: 算数表达式,比较表达式,逻辑表达式,赋值表达式,三目表达式,正则表达式
  • 判断空: #{“name?:’other’”}
  • #{} 和${}可以混合使用,但是必须 #{}在外面 注意不能反过来
  • SpEL还支持使用标准的“.”符号,即嵌套属性prop1.prop2.prop3和属性值的设置
  • 直接使用#{} 注入bean对象

定义的bean节点

 <bean id="itemBean" class="com.lei.demo.el.Item"><property name="name" value="itemA" /><property name="total" value="10" /></bean><bean id="customerBean" class="com.lei.demo.el.Customer"><property name="item" value="#{itemBean}" /><property name="itemName" value="#{itemBean.name}" /></bean>

#{itemBean}——将itemBean注入到customerBeanitem属性中

#{itemBean.name}——将itemBean 的name属性,注入到customerBean的属性itemName

4.2 表达式操作符

  • 关系操作符:包括:等于 (==, eq),不等于 (!=, ne),小于 (<, lt),,小于等于(<= , le),大于(>, gt),大于等于 (>=, ge)
  • 逻辑操作符:包括:and,or,and not(!)
  • 数学操作符:包括:加 (+),减 (-),乘 (*),除 (/),取模 (%),幂指数 (^)

4.3 EL表达式示例

EL表达式使用示例

public class ELConfig {@Valule("test")//注入字符串private String name;@Valule("#{systemProperties['os.name']}")//注入操作系统属性private String osName;@Valule("#{T(java.lang.Math).random()*100.0}")//注入表达式结果private double randomNumber;@Valule("#{demoService.another}")//注入其他bean属性private String fromAnother;@Valule("classpath:com/test/test.txt")//注入文件资源private Resource testFile;@Valule("https://www.baidu.com")//注入网址资源private Resource testUrl;@Valule("${book.name}")//注入配置文件private String bookName;使用?.符号代表若然左边的值为null,将不执行右边方法, 即,当左边不为空才执行右边的方法 @Value("#{testConstant.showProperty()?.toUpperCase}")private String method4;判断空,当左边为空就取冒号后的值: #{“name?:'other'”}@Value("#{test?:'123456'}")private String name;注入字符不存在属性值并指定默认值,默认值使用冒号分隔 :注入常量其实就可以指定一个不存在的配置然后使用默认值,此处test的值为空字符串@Value("${test:''}")private String skill;@@方式常用于引用springboot非默认配置文件field_name=@field_value@}

这篇关于SpringBoot配置文件之EL表达式(@Value)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084964

相关文章

Python19 lambda表达式

在 Python 中,lambda 表达式是一个小型匿名函数,通常用于实现简单、单行的函数。lambda 函数可以接受任意数量的参数,但只能有一个表达式。 基本语法: lambda arguments: expression 这里,arguments 是传递给 lambda 的参数,expression 是关于这些参数的表达式,它的计算结果就是 lambda 函数的返回值。 使用

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus