问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

springboot启动参数?

发布网友 发布时间:2024-09-26 19:28

我来回答

1个回答

热心网友 时间:2天前

SpringBoot的启动过程及部分注解

相比于以前繁琐的基于Spring的Web应用,SpringBoot通过默认配置很多框架的方式,极大的简化了项目的搭建以及开发流程。

一个简单的SpringBoot应用只需要三步:

1.在pom.xml中引入所需要的依赖

2.在application.yml配置所需的数据源

3.在启动类中加入@SpringBootApplication注解以及run方法

启动流程

1.SpringApplication.run()启动

2.新建SpringApplication实例,主要是初始化一些成员变量,参数列表等

prepareContext():

refreshContext()中refresh():

核心注解(部分)

@SpringBootAppliction启动类

@Configuration+@EnableAutoConfiguration+@ComponentScan

@Configuration

允许在应用上下文中注册其它的bean,可用@Component代替

@Configuration会为bean创建一个代理类,这个类会拦截所有被@Bean修饰的方法,从容器中返回所需要的单例对象;@Component不会创建代理类,会直接执行方法,每次返回一个新的对象

@EnableAutoConfiguration

启用springboot自动装配,该参数位于spring.factories中org.springframework.boot.autoconfigure.EnableAutoConfiguration

@ComponentScan

扫描被@Component(@Service,@Controller)注解的bean,注解默认会扫描该类所在的包下所有的类

@Autowired

自动导入对象到类中,被注入进的类被Spring容器管理Service-Controller

@Component

通用的注解,可标注任意类为Spring组件

@Repository持久层

@Service服务层

@Controller控制层

@Bean

用于告诉方法产生一个Bean对象,然后这个对象交给IOC容器管理。产生这个Bean对象的方法Spring只会调用一次,然后将这个Bean对象放在IOC容器中

springboot启动流程

springboot启动流程如下:

启动流程主要分为三个部分,第一部分进行、SpringApplication的初始化模块,配置一些基本的环境变量、资源、构造器、*,第二部分实现了应用具体的启动方案,包括启动流程的监听模块、加载配置环境模块。

及核心的创建上下文环境模块,第三部分是自动化配置模块,该模块作为springboot自动配置核心,在后面的分析中会详细讨论。在下面的启动程序中我们会串联起结构中的主要功能。

启动过程主要做了以下几件事情:

配置属性、获取*,发布应用开始启动事件初、始化输入参数、配置环境,输出banner、创建上下文、预处理上下文、刷新上下文(加载tomcat容器)、再刷新上下文、发布应用已经启动事件、发布应用启动完成事件。

在SpringBoot中启动tomcat的工作在刷新上下这一步。

而tomcat的启动主要是实例化两个组件:Connector、Container,一个tomcat实例就是一个Server,一个Server包含多个Service,也就是多个应用程序,每个Service包含多个Connector和一个Container,而一个Container下又包含多个子容器。

SpringBoot在命令行指定主类启动程序

SpringBoot程序我们一般会设置使用spring-boot-maven-plugin来生成jar包,配置类似于:

这样我们可以通过-jar的方式直接启动并执行指定的start-class类的main函数:

但当我们需要指定并执行其他类的main函数时,使用-cp参数却行不通:

因为SpringBoot打包时做了处理,启动时的主类也不再是用户指定的,而是由SpringBoot启动后代为调用执行。

此时我们就需要一些trick来解决这个问题。

首先我们要改变spring-boot-maven-plugin的参数:

增加了layoutZIP/layout一行。这将使SpringBoot使用PropertiesLauncher。

然后

可以看到,事实上是以org.springframework.boot.loader.PropertiesLauncher作为主类启动的,设置了loader.main的值,由SpringBoot调用执行。

参考文章:

SpringBoot使用@Schele启动、停止服务

在springboot项目的Application类中增加@EnableScheling注释,创建bean组件(Component),并使用@Scheled(cron="00/20***?")

1、这种方式基本就是全局开启了该定时任务,如果直接将任务内容写在其中,那么很难对定时任务的开关进行控制。

2、服务中的异常也无法使用全局异常捕获的方式进行处理。

3、这种定时任务为单线程方式

1、将服务定义成Service,使用Controller控制器调用Service服务,在定时任务中通过RestTemplate访问本地的Controller地址。这解决了全局异常捕获的问题。

2、在配置文件中定义定时任务是否启动的配置项,Schele中先判断该参数是否为启动。假设默认配置为启动状态,需要对定时任务进行关闭,那么可以在Controller定义一个接口,用来将该参数设置为停止状态。这解决了定时任务的启动与停止切换问题。

3、将其改造为多线程,一般使用线程池,百度上N多案例,不在此介绍

SpringBoot配置的优先级

本文主要参考ExternalizedConfiguration

为了能让应用在不同的环境下运行,SpringBoot允许自定义配置文件,如properties文件、yaml文件、系统环境变量参数、命令行参数。配置文件的覆盖优先级如下

DeveloperTools提供了一些开发帮助工具,在build.gradle添加依赖后启用。

SpringBoot会读取在计算机用户的home目录下的.spring-boot-devtools.properties文件里的配置参数到该计算级的所有SpringBoot应用中作为顶层配置,如Linux环境下root用户下~/.spring-boot-devtools.properties文件。开发过程中,可以将一些个人参数记录在这个配置文件中,例如ip地址,机器uuid,datasource参数等。在该配置文件中的定义的配置环境并不会影响到应用配置的读取,官方原话是:

但要注意,该配置优先级最高,设置的时候需要做好记录否则会出现"原因不明的bug",不过应该很少人会用到这个功能。分析下源码,就是加了一个配置切面,并把其设置为顶层配置:

在测试的时候,可能会使用另一套测试专用的配置,该套配置的优先级高于系统环境变量、java系统参数、程序内部参数,@TestPropertySource注解就是用来指定这一类配置的。该注解一共有5个参数可以设置:

如果使用注解的时候没有任何参数,那么会从标注了注解的测试类的包中尝试读取配置文件,例如测试类com.spring.test.DemoTest,那么相应的默认配置文件为com.spring.test.DemoTest.properties,如果没有找到默认的配置文件则抛出非法状态异常。

AbstractTestContextBootstrapper在初始化上下文的时候会调用一个读取、合并配置的方法buildMergedContextConfiguration,该方法通过工具类TestPropertySourceUtils读取类的注解信息。TestPropertySourceUtils从类的注解解析配置信息后返回一个可合并的配置源。

@SpringBootTest的value\properties属性用于注入一些自定义的注解,语法要求和@TestPropertySource的properties一样,这里就不详细展开了。

用命令行方式启动SpringBoot应用程序的时候,可以注入一些配置参数,参数的格式是--key=name。举个简单的例子,程序直接输出一个参数,然后打成jar包后运行。

运行:

java-jar.\springbootconfiguraiton.jar--cl.name="SpringBootArguments"

从输出的结果中可以看到可以读取到命令行中的配置。

可以在环境变量中定义一个key为SPRING_APPLICATION_JSON的参数,值为json字符串,SpringBoot会解析该json字符串作为参数注入到系统中。SPRING_APPLICATION_JSON可以定义在环境变量、系统配置中,命令行也是可以的,例如命令行参数中用到的demo,执行以下的命令也应该能得到相同的参数结果。

java-jar.\springbootconfiguraiton.jarSPRING_APPLICATION_JSON='{"cl":{"name"="SpringBootArguments"}}'

结果输出是undefined,不知道原因,这个配置方式用的应该也很少,放弃研究。。。

优先级是ServletConfigServletContext,可以在application.yml中设置:

随机数配置大多用于测试,支持的类型如下:

其中long\int可以*数据范围,[]是闭区间,()是开区间。

这个应该是我们用的最多的。首先说优先级,文件可以放在以下4个位置,相同文件从上到下覆盖。外部指的是启动应用程序的目录,例如gradle用application插件打包后,运行的脚本目录就是./:

文件的命名为application-[当前激活的环境名].[yml/properties],当前激活的配置可以用spring.profile.active=[当前激活的环境名]定义,多个环境名用逗号分隔,未设置时用default标识。关于如果修改默认的加载路径和文件名,后面会继续讨论。

SpringBoot系统启动时默认会读取的配置文件,支持properties\yml格式。也就是说,会先加载application.properties,根据spring.profile.active的设置加载相应的application-XX.properties配置,然后按优先级合并配置文件。

不同文件目录下application.properties的优先级和自定义配置文件的顺序是一样的。

类似@TestPropertySource注解,在项目中可以方便的注入自定义的配置文件,注解一共有5个参数:

SpringBoot修改JVM参数(内置Tomcat命令行启动和IDEA工具配置修改)

在“-jar”之前加上相应参数即可

-Xms:初始堆的分配大小,默认为物理内存的六十四分之一(Server端JVM最好将-Xms和-Xmx设为相同值);

-Xmx:堆的最大分配大小(默认为物理内存的四分之一);

-Xmn??JavaHeapYoung区大小,不熟悉最好保留默认值;

?-Xss??每个线程的Stack大小,不熟悉最好保留默认值;

-XX:+UseG1GC:用这个GC;

-XX:+PrintGCDetails:打印信息;

修改相应的VMoptions参数即可

复制粘贴到txt文件中,之后,记得改后缀名为“.bat”

TITLE数据上报8090

"C:\Users\guany\Desktop\开发\JDK8\bin\java.exe"-Xms512m-Xmx512m-XX:+UseG1GC-XX:+PrintGCDetails-jarpt_dataPush_api-1.0.0.jar

pause

1

springboot启动参数?

用命令行方式启动SpringBoot应用程序的时候,可以注入一些配置参数,参数的格式是--key=name。举个简单的例子,程序直接输出一个参数,然后打成jar包后运行。 运行: java-jar.\springbootconfiguraiton.jar--cl.name="SpringBootArguments" 从输出的结果中可以看到可以读取到命令行中的配置。 可以在环境变量中定义一个k...

springboot启动配置(springboot启动配置文件加载顺序)

3.在启动类中加入@SpringBootApplication注解以及run方法 启动流程 1.SpringApplication.run()启动 2.新建SpringApplication实例,主要是初始化一些成员变量,参数列表等 prepareContext(): refreshContext()中refresh(): 核心注解(部分) @SpringBootAppliction启动类 @Configuration+@EnableAutoConfiguration+@ComponentScan @Con...

【SpringBoot 一】SpringApplication启动类的Args详解

传递参数的一种方式,如在启动时使用java -jar --spring.profiles.active=prod或更改自定义配置信息。使用方式是--key=value,其配置优先于项目内部的配置。在大部分使用SpringBoot进行开发的项目中,启动类的格式通常是SpringApplication.run(SpringBootDemoPropertiesApplication.class, args);然而,在日常使...

springboot启动过程图解(springboot的启动流程图)

SpringBoot的启动主要是通过实例化SpringApplication来启动的。启亏竖胡动过程主要做了以下几件事情:配置属性、获取监听器,发布应用开始启动事件初、始化输入参数、配置环境,输出banner、创建上下文、预处理上下文、刷新上下文(加载tomcat容器)、再刷新上下文、发布应用已经启动事件、发布应用启动完成事件。在Spr...

springboot环境配置(配置springboot的环境)

1、在配置文件中指定spring.profiles.active=dev 2、在命令行: java-jarspring-boot-02-config.jar--spring.profiles.active=dev; 可以直接在测试的时候,配置传入命令行参数 3.虚拟机参数 -Dspring.profiles.active=dev springboot启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认...

idea设置springboot启动jvm参数

idea设置springboot启动jvm参数,设置方式,通过ldea设置,编辑配置文件。参数说明参数说明-Xms初始化堆内存大小,eg.-Xms1G-Xmx堆内存最大值,eg.-Xms1G,通常与-Xms设置相同的值-XX:ReservedCodeCacheSize代码缓存,它是用来存储已编译方法生成的本地代码。代码缓存确实很少引起性能问题,但是一旦发生其...

springboot配置信息(springboot配置jndi)

SpringBoot提供properties文件、YAML文件、环境变量(environmentvariables)和命令行参数的方式进行外部化配置,可以在不同的环境,使用不同的配置信息。 应用可以通过@Value注入到bean,也可以通过@ConfigurationProperties进行对象的绑定配置。 SpringBoot提供的默认通配符路径(wildcardlocation)在jar包路径的config/*/目录下。 可...

springboot启动运行特定代码

在Spring Boot中,我们可以通过使用ApplicationRunner或者CommandLineRunner接口来实现在Spring Boot启动时运行特定代码。一、背景与需求说明 在Spring Boot应用中,有时我们需要在应用启动时运行一些特定的代码,比如进行数据初始化、预加载缓存等操作。为了满足这种需求,Spring Boot提供了两个接口:ApplicationRunner...

springboot启动流程是什么?

SpringBoot的启动主要是通过实例化SpringApplication来启动的。启动过程主要做了以下几件事情:配置属性、获取监听器,发布应用开始启动事件初、始化输入参数、配置环境,输出banner、创建上下文、预处理上下文、刷新上下文(加载tomcat容器)、再刷新上下文、发布应用已经启动事件、发布应用启动完成事件。在SpringBoot...

SpringBoot中事务的配置与使用

SpringBootApplication@EnableTransactionManagement(显式开启事务,SpringBoot默认开启,可省略)publicclassEmosWxApiApplication{publicstaticvoidmain(String[]args){SpringApplication.run(EmosWxApiApplication.class,args);}}2.配置事务隔离等级(isolation参数)2.1什么是事务隔离等级?有什么作用?事务的隔离...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
云南省公安厅相关措施 ...am ( ). A.droped , angry B.droped , happy C.dropped ,angry... 个人怎么做工伤鉴定 ...寄一封从上海到无锡的信,邮票要多少,除了邮票还要注意什么,还有贴完... 因投诉导致财付通)账户冻结,怎么才能解冻? 财付通被冻结 原因是交易纠纷 怎么可以解冻 武松打虎中的打虎指的是什么 中考政治题目 2、请从可持续发展的角度,说说我国政府为什么如此重视“节 ... 如果房子提前交房给(业主),那么提前的这段时间物业费谁支付? 哪里能下载音乐《竹林听箫》? Spring 配置的@Scheduled(cron = "0 1/5 5-21 * *?")任务,在同一时刻重 ... 谁用过摩的丰胸喷雾这个产怎样 暗黑破坏神奖励属性点 大篷车是什么意思? 2022年中国空军和海军航空兵现役战机数量统计概况 泰国空军概况 2022年中国空军和海军航空兵现役战机数量统计概况 航空兵中国概况 大麦草是什么草 紫大麦草栽培要点 航空兵概况 大麦草种子多少钱一斤 《化性谈》 ...什么属相孩子好,属马和属羊的要什么属相的孩子好 微信注销后还能解绑手机号吗? 请问不锈钢型号SS316与SS316L有什么不同?谢谢~ 魅族4移动网络如何解禁 有朋友告诉我,做期货最好是做短线,但我没时间,听说“福星在线”可以,是... 安徽省明光市潘村镇算老明东吗? 我在安徽省明光市潘村镇买房办不到房产证(全镇都办不到房产证)为什么... @Scheduled(cron = "0/5 * * * * *")将时间改为配置 JAVA spring+quertz 定时任务每17秒执行一次 闺蜜生日想给她一个惊喜,她的房间应该怎么布置呢?闺蜜生日适合放什么... component注解的用法? Spring注解(spring注解自动装配) 眼睛4.54.6是多少度数 运满满开普通票流程 暗黑2圣骑士的 人工股骨头置换术术中注意事项 全髋关节置换术术中注意事项 股骨头置换术安放股骨头应注意 谁知道东方神起<<我相信>>韩文歌的中文发音? 谁翻唱了东方神起的“我相信”呀。。踊跃回答!! 上大学可以做什么运动 我是女生 除了跑步 还有跑步什么时候跑最好_百... 联想Y471A无法启动,开机后背景是黑的,中间有一个windows的四色标志... 我的电脑是y471a。 我的电脑型号是联想Y471A。看电影用暴风影音不会出现断层的画面。但是用... 我的联想笔记本Y471A 屏幕上原来有的大小写提示没有了 怎么才能弄出来... 广州市瀚潮环保科技有限公司业务介绍 挂帘填料到底是不是新产品?