[Java]SpringBoot配置参数

news/2024/11/24 14:06:51/

偶尔忘记怎么获取配置的参数,备忘一下。

  • Spring Boot会自动识别正确的配置文件(.properties或.yml)并加载其中的属性。
    例如:application.properties与application.yml
  • 读取机制为 Environment ,它将配置抽象为Properties和Profiles,并提供了一个接口来访问配置。SpringBoot中,Environment默认使用的Environment实现类是StandardServletEnvironment

1、参数注入

1.1、@PropertySource配置文件引入+@Configuration注入

使用下列注解引入配置文件

注解用途
@PropertySource(“classpath:/datasource.properties”)在任意被注入的类、方法使用。提供了一种方便的声明性机制,用于将 PropertySource 添加到 Spring 的环境中。与@Configuration类结合使用。一般用于引入不会被默认加载的自定义配置文件

例如下面的代码,加载了resources下自定义的baidu-secret.properties文件,在其他类使用的时候,注入BaiduProperties 即可获取baidu-secret.properties配置文件中的参数。

@PropertySource只是将自定义的配置文件引入,具体值还需要适用 @Value注解配置


import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;@Data
@Configuration
@PropertySource("classpath:baidu-secret.properties")
public class BaiduProperties {@Value("{baidu.ocr.client_id}")private String clientId;@Value("${baidu.ocr.client_secret}")private String clientSecret;@Value("${baidu.trans.appid}")private String appId;@Value("${baidu.trans.key}")private String key;@Value("${baidu.trans.url}")private String url;
}

另外还有一个注解,可以指定参数前缀。不用也可以,没什么必要,感觉通常情况参数在一处写完整比较易读

注解用途
@ConfigurationProperties可以指定前缀外部化配置的注释。如果要绑定和验证某些外部属性(例如,从 .properties 文件),请将其添加到类定义或 @Configuration 类中的 @Bean 方法中。

1.2、@ImportResource

使用下列注解兼容Spring配置文件,使用位置为启动类(一般情况)

注解用途
@ImportResource(“classpath:/applicationContext.xml”)在启动类使用,引入Spring配置文件

2、使用Environment

除了使用@Value注解,还可以使用SpringBoot的 Environment来动态的获取程序加载的参数。
demo如下,可以获取参数 hello.world:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;@Component
public class DemoEnvironment implements CommandLineRunner {@Autowiredprivate Environment environment;@Overridepublic void run(String... args) throws Exception {String property = environment.getProperty("hello.world");System.out.println("Hello world: " + property);}
}

http://www.ppmy.cn/news/37884.html

相关文章

Java摘要算法学习日记

Java摘要算法学习日记摘要的作用MD家族的摘要算法sha(安全散列算法)MAC(含有秘钥的散列函数算法)摘要的作用 摘要的作用主要是验证数据的完整性 举个例子: 我们去apche下载jar包时网页上有个sha512的链接,点击后会看到一串sha512摘要值 b6d517db15aedc424d112b8f3…

代码随想录算法训练营第四十九天| 121 买卖股票的最佳时机 122 买卖股票的最佳时机II

代码随想录算法训练营第四十九天| 121 买卖股票的最佳时机 122 买卖股票的最佳时机II LeetCode 121 买卖股票的最佳时机 题目: 121.买卖股票的最佳时机 动规五部曲: 确定dp数组以及下标的含义 **dp[i][0] 表示第i天持有股票所得最多现金 ** 确定递推公式 dp[…

超详细WindowsJDK1.8与JDK11版本切换教程

文章目录一、JDK生效原理二、安装配置JDK11三、切换JDK11版本四、查看切换JDK11版本是否成功五、再次切换至JDK8版本六、查看切换JDK8版本是否成功一、JDK生效原理 想必大家都在为如何流畅的切换JDK版本问题而来,那么在此篇文章开始之前,首先我们来思考一…

蓝桥杯:阶乘约数

蓝桥杯:阶乘约数https://www.lanqiao.cn/problems/1020/learning/ 目录 题目描述 填空题:答案是 39001250856960000 题目分析 AC代码(Java) 暴力 线性筛 题目描述 填空题 定义阶乘 n!123⋅⋅⋅n。 请问 100! (100 的阶乘)有…

vue3+ts+vite+electron搭建桌面应用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 vue3tsviteelectron搭建桌面应用前言一、版本背景介绍二、过程1. 搭建vitevue-ts的项目2. 接入electron3. electron启动4. electron打包5. 项目目录梳理前言 提示&#xff1…

腾讯后端开发实习一面(24届)

毫无准备的腾讯一面,最近都在忙比赛去了,突然收到腾讯一面的邮件,直接没准备。。。 总结,除了Vue其他的都挺好,但是腾讯hr为啥Vue面我四个问题,不是面的后端开发吗,好难呀,都只能随…

Spring AOP:理解动态代理和 Advice

ProxyFactory cglib代理解析 jdk动态代理 动态代理技术在Spring中进行了封装,封装出来的类叫做ProxyFactory,表示是创建一个代理对象的一个工厂,比jdk动态代理和cglib代理更加方便,比如: public class UserService {public void test(){System.out.println("test...&qu…

2023年 合肥市庐阳区信息学竞赛区赛 小学组

2023年 合肥市庐阳区信息学竞赛区赛 小学组T1.快递盒(box) 问题描述 快递盒底面长为 a、宽为 b,货品包装的底面为正方形,边长为 c。快递盒同货品包装的高度一致,货品包装边要求同快递盒边平行。请问快递盒最多可以装入多少件货品? 输入格式 一行,三个整数 a、b 和 c,意…