SpringBoot笔记:SpringBoot启动参数配置
文章目录
- 目的
- 测试代码
- 配置文件配置
- 获取自定义参数
- 项目打包发布
- 修改启动配置
- 方式一:系统变量
- 方式二:命令行参数
- springboot启动参数解释
目的
1、熟悉springboot多环境配置
2、熟悉springboot使用jar包启动时候的参数含义
测试代码
配置文件配置
application.yml
# springboot多环境配置
# springboot多环境配置
#端口,项目上下文
server:port: 8080servlet:context-path: /springboot-params-demo# 默认启动的是测试环境配置
spring:profiles:active: test# 日志输出配置
logging:level:root: INFOorg:springframework:security: WARNweb: ERRORfile:path: ./logsname: './logs/springboot-params-demo.log'pattern:file: '%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n'console: '%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n'
application-test.yml
# 自定义的参数
myParam: 'on'
application-prod.yml
# 自定义的参数
myParam: 'close'
获取自定义参数
package com.demo.config;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;import java.util.Arrays;@Component
@Slf4j
public class MyParamRunner implements CommandLineRunner {/*** 自定义测试参数*/@Value("${myParam}")String myParam;/*** 获取环境变量参数*/@AutowiredEnvironment environment;@Overridepublic void run(String... args) throws Exception {log.info("本地设置的参数myParam为:{}", myParam);log.info(environment.toString());log.info(String.valueOf(Arrays.asList(environment.getActiveProfiles())));}
}
项目打包发布
打包后springboot-jvm-params-1.0-SNAPSHOT.jar
文件存放目录如下:
启动jar包进行测试:
java -jar /usr/local/springboot_demos/springboot-port8001/springboot-jvm-params-1.0-SNAPSHOT.jar
修改启动配置
方式一:系统变量
java -jar -Dspring.profiles.active=prod /usr/local/springboot_demos/springboot-port8001/springboot-jvm-params-1.0-SNAPSHOT.jar
方式二:命令行参数
java -jar /usr/local/springboot_demos/springboot-port8001/springboot-jvm-params-1.0-SNAPSHOT.jar --spring.profiles.active=prod --myParam='test'
注意以上两种方式的区别,我们可以在启动参数里修改我们配置文件中配置的参数。这里是将myParam='close’修改为myParam=‘test’
如果是下面的配置结果myParam会是什么?
java -jar -DmyParam='test1' /usr/local/springboot_demos/springboot-port8001/springboot-jvm-params-1.0-SNAPSHOT.jar ---spring.profiles.active=prod --myParam='test2'
由上可以得出,Springboot加载参数的优先级:配置文件变量 < JVM系统变量 < 命令行参数
springboot启动参数解释
测试配置的的参数如下:
/usr/local/jdk/jdk1.8.0_261/bin/java -jar -server \ ## 服务模式,linux默认是server模式,window默认是client参数
-XX:+HeapDumpOnOutOfMemoryError \ ## 当OOM发生时自动生成Heap Dump文件
-XX:HeapDumpPath=/usr/local/springboot_demos/springboot-port8001/dump/heap/oom.hprof \ ## 指定发生OOM时生成Dump文件存储位置
-Djava.io.tmpdir=/usr/local/springboot_demos/springboot-port8001/tmp/ \ ## 指定操作系统缓存的临时目录
-Dserver.port=8001 \ ## web服务使用端口
-Dcom.sun.management.jmxremote \ ## 是否支持远程JMX访问,默认true
-Dcom.sun.management.jmxremote.port=5103 \ ## 配置jmx远程connection的端口号,要确认这个端口没有被占用
-Dcom.sun.management.jmxremote.rmi.port=6103 \ ## JMX在远程连接时,会随机开启一个RMI端口作为连接的数据端口
-Dcom.sun.management.jmxremote.authenticate=false \ ## 是否需要开启用户认证,默认开启
-Dcom.sun.management.jmxremote.ssl=false \ ## 是否连接开启SSL加密,默认开启
-Dcom.sun.management.jmxremote.access.file=/usr/local/jdk/jdk1.8.0_261/jre/lib/management/jmxremote.access \ ## 对访问用户的权限授权的文件的路径,默认路径是${JRE_HOME}/lib/management/jmxremote.access
-Xmx256m \ ## 设置堆最大空间为256m
-Xms256m \ ## 设置堆最小空间为256m
-XX:+DisableExplicitGC \ ## 禁止手动的system.gc
-Xloggc:/usr/local/springboot_demos/springboot-port8001/logs/springboot-jvm-params_gc.%t.log \ ## gc日志存放的位置
-XX:+PrintHeapAtGC \ ## HotSpot在GC前后都会将GC堆的概要状况输出到log中
-XX:+PrintTenuringDistribution \ ## 打印Survivor对象年龄分布
-XX:+PrintGCApplicationStoppedTime \ ## 预估垃圾收集"Stop the world"暂停所阻塞的时间
-XX:+PrintGCTaskTimeStamps \ ## 打印gc线程的时间戳
-XX:+PrintGCDetails \ ## 打印gc详情
-XX:+PrintGCDateStamps \ ## 日志开头显示日期以及时间
-Dserver.connection-timeout=60000 \ ## HTTP请求超时时间
-Dserver.tomcat.accept-count=1000 \ ## 所有可能的请求处理线程正在使用时,传入连接请求的最大队列长度
-Dserver.tomcat.max-threads=300 \ ## 最大工作线程数
-Dserver.tomcat.min-spare-threads=65 \ ## 最小工作线程数
-Dserver.tomcat.accesslog.enabled=false \ ## 启用访问你日志
-Dserver.tomcat.accesslog.directory=/usr/local/springboot_demos/springboot-port8001/logs/ \ ## 日志文件路径
-Dserver.tomcat.accesslog.prefix=access_log \ ## 日志文件名前缀
-Dserver.tomcat.accesslog.pattern=combined \ ## 日志格式
-Dserver.tomcat.accesslog.suffix=.log \ ## 日志文件后缀
-Dserver.tomcat.accesslog.file-date-format=.yyyy-MM-dd ## 放在日志文件名中的日期格式
-Dserver.tomcat.accesslog.rotate=true \ ## 是否启用访问日志分割
-Dserver.tomcat.accesslog.rename-on-rotate=true \ ## 推迟在文件名中加入日期表示,直到日志分割时
-Dserver.tomcat.accesslog.request-attributes-enabled=true \ ## 为请求使用的IP地址、主机名、协议和端口设置请求属性
-Dserver.tomcat.accesslog.buffered=true \ ## 缓存日志定期刷新输出(建议设置为true,否则当有请求立即打印日志对服务的响应会有影响)
-XX:NewRatio=4 \ ## 设置Yang和Old的比例,设置4则Old是Yang的4倍,即Yang占1/5
-XX:SurvivorRatio=8 \ ## 设置Eden和Suivior的比例,Eden:S0:S1=8:1:1
-XX:MaxTenuringThreshold=15 \ ## 在新生代对象存活次数(经过Minor GC的次数)超过n后,就会晋升到老年代
-XX:TargetSurvivorRatio=90 \ ## 在新生代的对象不一定要满足存活年龄达到MaxTenuringThreshold才能去老年代,当Survivor空间中相同年龄所有对象大小总和大于[Desired survivor size]时,年龄大于或等于该年龄的对象直接进入老年代。[Desired survivor size]=单个survivor大小*TargetSurvivorRatio百分比
-XX:+UseCMSInitiatingOccupancyOnly \ ## 指在使用CMS收集器的情况下,老年代使用了指定阈值的内存时,触发FullGC
-XX:CMSInitiatingOccupancyFraction=70 \ ## 指在使用CMS收集器的情况下,老年代使用达到70%,出发CMS垃圾回收
-XX:ParallelGCThreads=8 \ ## parallel回收的时候可以设置年轻代的并行线程数,取决于cpu核数
-XX:ConcGCThreads=2 \ ## 设置并行标记的线程数。将n设置为并行垃圾回收线程数(ParallelGCThreads)的 1/4 左右。
-XX:-UseGCOverheadLimit \ ## jvm gc行为中超过98%以上的时间去释放小于2%的堆空间时会报“GC overhead limit exceeded”错误,此参数避免此报错
-XX:+UseParNewGC \ ## 开启此参数使用ParNew & serial old搜集器(不推荐)使用这个参数后会在新生代进行并行回收
-XX:+UseConcMarkSweepGC \ ## 开启此参数使用ParNew & CMS(serial old为替补)搜集器
-XX:CMSFullGCsBeforeCompaction=1 \ ## 设置在几次CMS垃圾收集后,触发一次内存整理
-XX:+CMSParallelRemarkEnabled \ ## 降低标记停顿
-XX:+CMSScavengeBeforeRemark \ ## 开启或关闭在 CMS-remark 阶段之前的清除(Young GC)尝试
-XX:+ParallelRefProcEnabled \ ## 并行处理Reference,加快处理速度,缩短耗时
-XX:+UseCMSCompactAtFullCollection \ ## 年老代使用CMS,默认是不会整理堆碎片的。设置此配置打开对年老代的压缩,即执行Full GC后对内存进行整理压缩,免得产生内存碎片,但有可能会影响性能。
-XX:CMSMaxAbortablePrecleanTime=6000 \ ## 指定CMS-concurrent-abortable-preclean阶段执行的时间,该阶段主要是执行一些预清理,减少应用暂停的时间
-XX:CompileThreshold=10 \ ## 超过10此进行JTI即时编译
-XX:MaxInlineSize=1024 \ ## 方法体的大小阈值。通过 -XX:CompileThreshold 来设置热点方法的阈值。但要强调一点,热点方法不一定会被 JVM 做内联优化,如果这个方法体太大了,JVM 将不执行内联操作
-Dsun.net.client.defaultConnectTimeout=60000 \ ## socket连接超时时间
-Dsun.net.client.defaultReadTimeout=60000 \ ## socket读取超时时间
-Dnetworkaddress.cache.ttl=300 \ ## JVM的DNS缓存有效期,单位秒
-Dsun.net.inetaddr.ttl=300 \ ## 缓存失败结果,如果在缓存时效内再次lookup时直接返回错误(减轻DNS服务压力)
-Djsse.enableCBCProtection=false \ ## 关闭jvm中的java修复程序
-Djava.security.egd=file:/dev/./urandom \ ## 加快随机数产生过程
-Dfile.encoding=UTF-8 \ ## 指定web应用编码
-Dlog.path=/usr/local/springboot_demos/springboot-port8001/logs/ \ ## 指定项目日志文件路径
-Dspring.profiles.active=prod \ ## 指定运行的环境配置
/usr/local/springboot_demos/springboot-port8001/springboot-jvm-params-1.0-SNAPSHOT.jar jvmparams
SpringBoot笔记:SpringBoot启动参数配置相关推荐
- SpringBoot整合nacos实现参数配置
SpringBoot整合nacos实现参数配置 1.nacos安装 2.项目配置 配置文件 3.nacos配置 4.启动 1.nacos安装 首先,这里的版本号用的是linux的1.4.1 链接:ht ...
- IntellIJ IDEA 启动 参数 配置
系统环境: 型号名称: MacBook Pro 型号标识符: MacBookPro11,4 处理器名称: Intel Core i7 处理器速度: 2.8 GHz 处理器数目: 1 核总数: 4 L2 ...
- log4j异步mysql_log4j2用Log4jContextSelector启动参数配置全局异步日志是如何使用disruptor...
与 log4j2用asyncRoot配置异步日志是如何使用disruptor差异有几个: 给disruptor实例的EventFactory不同 此处EventFactory采用的是RingBuffe ...
- golang学习笔记8 beego参数配置 打包linux命令
golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架 https://beego.me/docs/mvc/contr ...
- JVM启动参数配置详解
JVM启动参数配置详解 1. JDK8的JVM启动参数默认配置 2. JDK8的JVM启动参数说明 2.1 基本参数 2.2 G1相关参数 2.3 辅助信息 1. JDK8的JVM启动参数默认配置 - ...
- 无聊的小技巧-idea启动springboot时设置启动参数
idea 启动代码调试时可以为spring boot添加启动参数 第一步:打开启动配置 第二步:添加springboot启动的参数 对于分布式项目开发过程中,设置服务名,设置实例IP,设置端口但是又不 ...
- SpringBoot笔记02-yaml文件的配置
SpringBoot全局配置文件 IDEA建立一个springboot项目可以发现会有一个application.properties的全局配置文件 但是根据如下: <excludes>& ...
- java 启动参数 配置,java程序启动参数设置
有些时候我们需要在java程序启动时设置一些系统属性值,然后程序启动后可以获取这些系统属性值并进行一些逻辑处理.例如我们在使用Maven打包的时候如果想跳过test执行,可以使用如下命令: mvn c ...
- php-fpm 的参数,php-fpm启动参数配置详解
pid = run/php-fpm.pid #pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启 error_log = log/php-fpm.log #错误日志,默认在 ...
最新文章
- 5G中网络切片技术是什么?—Vecloud
- thread类 java_java入门避坑必读,通过Thread类创建java多线程
- (转载)VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)...
- 《iPad开发从入门到精通》——6.2节系统主界面
- 查看程序用运时占用的内存
- python公众号文章爬虫_微信公众号文章爬虫
- jxta-amalto
- js2D物理引擎插件
- 一只基于Vue2.x的移动端微信UI。 -YDUI Touch
- ps怎么把模糊的图片变清楚
- 带你开发一款给Apk中自动注入代码工具icodetools(完善篇)
- 刚毕业不久就被裁了,然后就一直没上班了,谈谈体验吧!
- 【源码阅读 | 04】update-notifier 检查包更新
- Linux趣味小游戏,嘟嘟嘟,小火车来了
- win10重装系统(正版)(好用)(带激活方法)
- Windows 11新版本安装时需要联网及登录微软账号
- 不小心执行了rm -f 如何恢复
- c++入门 有关《c++关键字》 《命名空间》《缺省参数》《函数重载》《引用》《内联函数》《outo关键字》
- C语言:计算阶乘和阶乘的和
- AAL模版 中英文对照