当前位置:首页 > 科技  > 软件

Spring BOOT 启动参数

来源: 责编: 时间:2023-09-28 10:08:09 211观看
导读Spring BOOT 启动参数在Java Web的开发完成后,以前我们都会打包成war文件,然后放大web容器,比如tomcat、jetty这样的容器。现在基于SpringBoot开发的项目,我们直接打包成jar文件,基于内嵌的tomcat来实现一样的效果。而启动

Spring BOOT 启动参数

在Java Web的开发完成后,以前我们都会打包成war文件,然后放大web容器,比如tomcat、jetty这样的容器。现在基于SpringBoot开发的项目,我们直接打包成jar文件,基于内嵌的tomcat来实现一样的效果。dA028资讯网——每日最新资讯28at.com

而启动的方式变成了这样:dA028资讯网——每日最新资讯28at.com

java [ options ] -jar *.jar [ arguments ]

常见配置

我们常见的配置有:dA028资讯网——每日最新资讯28at.com

  1. --server.port:指定应用程序的端口号
  2. --spring.profiles.active:设置应用程序使用的配置文件中的环境配置。
  3. --spring.config.additional-location:指定额外的配置文件路径。
  4. --Xms:设置JVM初始堆大小。
  5. --Xmx:设置JVM最大堆大小。
  6. --XX:PermSize:设置JVM永久代大小。
  7. --XX:MaxPermSize:设置JVM最大永久代大小。
  8. --Xdebug:开启远程JDWP调试。
  9. -D:定义属性

options

在启动参数中,我们可以通过添加这样的配置,来覆盖系统属性中的值:dA028资讯网——每日最新资讯28at.com

java -Dfile.encoding=UTF-8 -jar app.jar

在代码中可以通过这样获取该值:dA028资讯网——每日最新资讯28at.com

String fileEncoding = System.getProperties("file.encoding"); //UTF-8

在很多项目中,都会基于*System.getProperties()*来控制代码流程,这里要注意,通过启动参数配置的值优先级会大于系统中的配置。同时注意改配置出现的位置,在上面使用了options位置来进行区分。dA028资讯网——每日最新资讯28at.com

arguments

在SpringBoot项目中,我们一般把配置都会写在application.yml文件中,随着项目一并打包到jar文件中,在生产环境中, 启动项目时通过添加*--spring.config.location=/application.yml*来修改项目的配置文件指向,从而实现覆盖application的效果。dA028资讯网——每日最新资讯28at.com

同样,我们可以通过配置启动参数来覆盖application中的某个配置项,比如:dA028资讯网——每日最新资讯28at.com

java -Dfile.encoding=UTF-8 -jar app.jar --server.port=8080

可以在main方法的参数中获取该值dA028资讯网——每日最新资讯28at.com

log.info(">>>>> args: {}", Arrays.toString(args) );

参数的位置在上面对应arguments位置。dA028资讯网——每日最新资讯28at.com

优先级

系统参数或环境变量:dA028资讯网——每日最新资讯28at.com

  • 启动配置
  • set prop=value (export prop=value)
  • 系统中配置的参数或环境变量

Spring中的配置:dA028资讯网——每日最新资讯28at.com

  • 启动参数
  • --spring.config.location=application.yml
  • classpath:application.yml

EnvironmentAware

在Spring中,提供了一个Aware接口EnvironmentAware,通过该接口我们可以很方便地获取上面说的那些参数,不用关心是系统属性、环境变量还是main方法的args。dA028资讯网——每日最新资讯28at.com

public class MyService implements ApplicationContextAware, EnvironmentAware {        @Override    public void setEnvironment(Environment environment) {        // 可以读取System properties|env 数据;系统参数        log.info(">>>>> 从系统属性中取值: {}", environment.getProperty("file.encoding") );    }}

通过观察SpringBoot启动流程中,其中在SpringApplication的run方法中,可以看到系统环境属性加载过程dA028资讯网——每日最新资讯28at.com

ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);

基于StandardEnvironment的扩展。dA028资讯网——每日最新资讯28at.com

public class StandardEnvironment extends AbstractEnvironment {     public static final String SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME = "systemEnvironment";     public static final String SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME = "systemProperties";     @Override protected void customizePropertySources(MutablePropertySources propertySources) {  propertySources.addLast(    new PropertiesPropertySource(SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, getSystemProperties()));  propertySources.addLast(    new SystemEnvironmentPropertySource(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, getSystemEnvironment())); }}

我们看到的这样的写法其实就是基于SpEL对PropertySources的资源的解析:dA028资讯网——每日最新资讯28at.com

@Value("#{systemProperties['file.encoding']}")    private String fileEncoding;    @Value("#{systemEnvironment['JAVA_HOME']}")    private String javaHome;

读取配置顺序

  1. 默认配置:Spring Boot 默认提供了一些基本的配置,如应用程序的端口号、上下文路径等。这些配置位于 SpringBoot jar 包中的默认配置文件中。
  2. 用户自定义配置:如果应用程序中有自定义的配置文件,Spring Boot 会首先加载这些文件。用户可以通过在应用程序的 classpath 下放置一个名为 application.properties 或 application.yml 的文件来提供自定义配置。
  3. 命令行参数:在启动应用程序时,可以通过命令行参数来传递配置。这些参数会被加载并覆盖默认配置和用户自定义配置。
  4. 环境变量:环境变量也可以提供配置信息。如果应用程序中定义了环境变量,它们将被加载并覆盖默认配置、用户自定义配置和命令行参数。
  5. 系统属性:系统属性也可以提供配置信息。如果应用程序中定义了系统属性,它们将被加载并覆盖默认配置、用户自定义配置、命令行参数和环境变量。

Springboot会先加载PropertiesPropertySourceLoader,后加载YamlPropertySourceLoader,所以先读取的是properties文件。dA028资讯网——每日最新资讯28at.com

结束语

了解SpringBoot配置加载相关知识,可以有效解决配置项不生效问题以及需要快速修改配置项的情况。dA028资讯网——每日最新资讯28at.com

需要注意的是,在加载多个配置文件时,如果有冲突的配置项,后加载的配置文件中的配置项将覆盖先加载的配置文件中的相同配置项。因此,在应用程序中,应该避免使用相同的配置项名来定义不同的配置值。dA028资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-11852-0.htmlSpring BOOT 启动参数

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用查询分离后从20s优化到500ms

下一篇: 五分钟k8s入门到实战-应用配置

标签:
  • 热门焦点
  • 摸鱼心法第一章——和配置文件说拜拜

    摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • K8S | Service服务发现

    K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 多线程开发带来的问题与解决方法

    多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • JavaScript学习 -AES加密算法

    JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 重估百度丨“晚熟”的百度云,能等到春天吗?

    重估百度丨“晚熟”的百度云,能等到春天吗?

    ©自象限原创作者|程心排版|王喻可2016年7月13日,百度云计算战略发布会在北京举行,宣告着百度智能云的正式启程。彼时的会场座无虚席,甚至排队排到了门外,在场的所有人几乎都
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
  • 苹果140W USB-C充电器:采用氮化镓技术

    苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
Top
Baidu
map