当前位置: 首页 > news >正文

springboot配置

一、配置文件的加载顺序

 SpringApplication从以下位置的application.properties文件加载属性,并将它们添加到Spring Environment中去,优先级如下:

  1. 当前目录的/config子目录(src\config)
  2. 当前目录(跟src目录同级别)
  3. classpath /config包(是指src\main\resources\config)
  4. classpath 路径(跟src\main\resources目录)

列表按优先级排序(在列表中较高位置定义的属性将覆盖在较低位置中定义的属性)。

二、切换别的配置文件

      如果不喜欢application.properties作为配置文件名,则可以通过指定spring.config.name环境属性来切换到另一个文件名。您还可以使用spring.config.location环境属性(以逗号分隔的目录位置或文件路径列表)来引用显式位置。以下示例显示如何指定其他文件名:

$ java -jar myproject.jar --spring.config.name=myproject

以下示例显示如何指定两个位置:

$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

三、属性中的占位符

  application.properties中的值在使用时通过现有的Environment进行过滤,因此您可以返回先前定义的值(例如,从系统属性中)。

app.name=MyApp
app.description=${app.name} is a Spring Boot application

四、使用ymal

 YAML是JSON的超集,因此是用于指定分层配置数据的便捷格式。只要在类路径上有SnakeYAML库,SpringApplication类就会自动支持YAML作为属性的替代 。

Spring Framework提供了两个方便的类,可用于加载YAML文档。YamlPropertiesFactoryBean将YAML加载为PropertiesYamlMapFactoryBean将YAML加载为Map

例如:

environments:dev:url: http://dev.example.comname: Developer Setupprod:url: http://another.example.comname: My Cool App

前面的示例将转换为以下属性:

environments.dev.url=http://dev.example.com
environments.dev.name=Developer Setup
environments.prod.url=http://another.example.com
environments.prod.name=My Cool App

YAML列表表示为具有[index]解除引用的属性键。例如,考虑以下YAML:

my:
servers:- dev.example.com- another.example.com

前面的示例将转换为这些属性:

my.servers[0]=dev.example.com
my.servers[1]=another.example.com

绑定到实体类上:

@ConfigurationProperties(prefix="my")
public class Config {private List<String> servers = new ArrayList<String>();public List<String> getServers() {return this.servers;}
}

缺点:

无法使用@PropertySource注释加载YAML文件。因此,如果您需要以这种方式加载值,则需要使用属性文件。

五、对象配置

例如,假设一个MyPojo对象,其namedescription属性默认为null。以下示例公开了来自AcmePropertiesMyPojo对象的列表:

@ConfigurationProperties("acme")
public class AcmeProperties {private final List<MyPojo> list = new ArrayList<>();public List<MyPojo> getList() {return this.list;}}

配置:

acme:list:- name: my namedescription: my description
---
spring:profiles: dev
acme:list:- name: my another name

对于Map属性,您可以绑定从多个源中提取的属性值。但是,对于多个源中的相同属性,使用具有最高优先级的属性。以下示例从AcmeProperties公开Map<String, MyPojo>

@ConfigurationProperties("acme")
public class AcmeProperties {private final Map<String, MyPojo> map = new HashMap<>();public Map<String, MyPojo> getMap() {return this.map;}}

请考虑以下配置:

acme:map:key1:name: my name 1description: my description 1
---
spring:profiles: dev
acme:map:key1:name: dev name 1key2:name: dev name 2description: dev description 2

http://www.lryc.cn/news/189486.html

相关文章:

  • 大数据中的一些词汇解释
  • 10月11-12日上课内容 Ansible
  • android studio 我遇到的Task :app:compileDebugJavaWithJavac FAILED问题及解决过程
  • PLC电梯控制系统
  • FastAPI学习-27 使用@app.api_route() 设置多种请求方式
  • 08. 机器学习- 线性回归
  • 好奇喵 | PT(Private Tracker)——什么是P2P,什么是BT,啥子是PT?
  • 【Node.js】crypto 模块
  • vue父组件向子组件传值的方法
  • MATLAB算法实战应用案例精讲-【优化算法】高尔夫优化算法(GOA)(附MATLAB代码实现)
  • 数组的reduce和reduceRight方法
  • 自动监控网站可用性并发送通知的 Bash 脚本
  • go 项目打包部署到服务器
  • 整理mongodb文档:副本集成员可以为偶数
  • PHP - 遇到的Bug - 总结
  • 统计子岛屿的数量
  • IntelliJ IDEA Maven 项目的依赖分析
  • 数学建模、统计建模、计量建模整体框架的理解以及建模的步骤
  • WaitGroup原理分析
  • java直播源码:如何使用Java构建一个高效的直播系统
  • Websocket获取B站直播间弹幕教程——第二篇、解包/拆包
  • 膝关节检测之1设计目标手势与物体交互的动画
  • canvas力导布局
  • 【网络安全】「漏洞原理」(二)SQL 注入漏洞之理论讲解
  • JavaScript中类的学习
  • 1600*A. Linova and Kingdom(DFS优先队列贪心)
  • gitlab git lfs的替代软件整理汇总及分析
  • IDEA 2023.2.2图文安装教程及下载
  • 第六届“中国法研杯”司法人工智能挑战赛
  • Springcloud中间件-----分布式搜索引擎 Elasticsearch