springboot启动参数?

如题所述

第1个回答  2024-09-18
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使用@Schedule启动、停止服务

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

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

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

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

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

2、在配置文件中定义定时任务是否启动的配置项,Schedule中先判断该参数是否为启动。假设默认配置为启动状态,需要对定时任务进行关闭,那么可以在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

logo设计

创造品牌价值

¥500元起

APP开发

量身定制,源码交付

¥2000元起

商标注册

一个好品牌从商标开始

¥1480元起

公司注册

注册公司全程代办

¥0元起

    官方电话官方服务
      官方网站八戒财税知识产权八戒服务商企业需求数字市场

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);然而,在日常使...

Spring Boot 3系列之-启动类详解
启动类上 @SpringBootApplication 注解,组合了三个注解:@SpringBootConfiguration, @EnableAutoConfiguration 和 @ComponentScan。@SpringBootConfiguration 是配置类注解,@EnableAutoConfiguration 自动配置组件,@ComponentScan 扫描并注册组件。源码展示:@SpringBootConfiguration 与 @Configuration 类似,用于标注...

springboot怎么运行(springboot怎么运行html)
SpringBootRun方法是一个静态方法,它可以接受一个参数,该参数是一个字符串数组,其中包含要传递给应用程序的参数。在项目中,SpringBoot启动后,需要初始化一些业务,要在服务启动后自动执行,不用人去手动操作,即把一些业务放到某方法中,服务启动后可自动执行。org.springframework.boot.CommandLineRunner...

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

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的默认...

springboot常用配置?
:##@SpringBootApplication标识该类为SpringBoot项目启动类。springboot三大核心注解是Configuration,EnableAuto,ComponentScan。SpringBoot最大的特点是无需XML配置文件,能自动扫描包路径装载并注入对象,并能做到根据classpath下的jar包自动配置。SpringBoot的Controller中经常会用到注解@Controller、@...

idea springboot 启动参数设置问题
你直接调试如果能调试成功的话 。进入你这个程序的文件夹进入那个bin文件夹 里面有个exe文件 就是调试生成的如果你没有使用dll文件引用那么把这个exe文件可以直接复制出来使用

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

相似回答
大家正在搜