SpringBoot命令行启动时参数配置
一、配置方式
1. 参数配置
通过命令行参数来配置Spring Boot应用程序是一种常见的方式。在命令行中,可以使用--<property>=<value>
的形式来传递参数。这些参数会被Spring Boot解析并应用到应用程序的配置中。例如,可以使用以下命令启动Spring Boot应用程序:
java -jar application-name.jar --server.port=8080
2. 配置文件配置
Spring Boot应用程序可以使用默认的配置文件(如application.properties
或application.yml
),也可以通过自定义的配置文件进行配置。默认的配置文件位于类路径的根目录下,而自定义的配置文件可以通过--spring.config.location
命令行参数指定。例如:
java -jar application-name.jar --spring.config.location=classpath:/application-config.yml
通过参数配置和配置文件配置,可以在运行Spring Boot应用程序时动态地改变应用程序的行为,而无需重新打包应用程序。这使得在不同环境下部署和运行应用程序更加灵活和便捷。
二、配置顺序(由高到低)
在配置信息的加载过程中,若在高优先级配置中和低优先级配置中存在同样的配置信息,则加载高优先级的配置信息。
1. 命令行参数
命令行参数具有最高优先级,可以覆盖配置文件中的属性。例如,--server.port=8080
将会覆盖application.properties
或其他配置文件中的server.port
属性。
2. 操作系统环境变量
Spring Boot会加载操作系统环境变量中以SPRING_
为前缀的所有属性。例如,SPRING_PROFILES_ACTIVE=dev
将会设置spring.profiles.active
属性。
3. 自定义配置文件
可以通过--spring.config.location
命令行参数指定自定义的配置文件。这些自定义配置文件可以覆盖默认的配置文件中的属性。
4. 应用配置文件
application.properties或application.yml 这是常规配置文件,包含应用程序的所有默认配置。如果没有其他配置文件指定,这些属性将作为最后的默认值。
三、参数形式
在命令行中,常见的参数可以分为三类:选项参数、非选项参数和系统参数。
- 选项参数
Spring Boot应用程序可以在命令行中使用双短横线 --
作为前缀来传递选项参数。这些参数通常用于配置和控制应用程序的行为。使用选项参数时,参数在命令中是位于 xxx.jar 之后的。例如:
java -jar application-name.jar --server.port=8080
- 非选项参数
非选项参数直接跟随在Spring Boot应用程序的 xxx.jar 包后面,它们是应用程序的实际参数。这些参数可以根据应用程序的需要进行解析和处理。例如:
代码语言:shell复制java -jar application-name.jar arg1 arg2
- 系统参数
Spring Boot应用程序可以在命令行中使用-D
选项设置系统参数,用于配置Java虚拟机(JVM)的行为。这些参数是以-D<property>=<value>
的形式传递给JVM,可以在应用程序中通过System.getProperty()
方法获取。例如:
java -Dapp.env=dev -jar your-application.jar
代码语言:shell复制/**
* @Author: isabener
* @Date: 2023-08-04
*/
@RestController
@RequestMapping("/arg")
public class ArgumentsController {
@Autowired
private ApplicationArguments applicationArguments;
@Value("${server.port}")
private String serverPort;
@GetMapping("/getOptionArgs")
public void getOptionArgs() {
// 使用ApplicationArguments获取选项参数
Set<String> optionArgs = applicationArguments.getOptionNames();
System.out.print("选项参数:");
optionArgs.forEach(e -> {
System.out.print(e applicationArguments.getOptionValues(e) " ");
});
// 使用@value注解获取选项参数
System.out.println();
System.out.print("选项参数:" serverPort);
}
@GetMapping("/getNonOptionArgs")
public void getNonOptionArgs() {
// 获取非选项参数
List<String> nonOptionArgs = applicationArguments.getNonOptionArgs();
System.out.print("非选项参数:");
nonOptionArgs.forEach(e -> {
System.out.print(e " ");
});
}
@GetMapping("/getSystemArgs")
public void getSystemArgs() {
// 使用System.get获取系统参数
String property = System.getProperty("server.port");
System.out.println("系统参数:" property);
// 使用@value获取系统参数
System.out.println("系统参数:" serverPort);
}
}
四、IDEA中参数配置
- Program arguments(程序参数)
程序参数是在运行程序时,通过命令行传递给主类的参数,并在应用内进行处理,多个参数需要以空格隔开。例如:
代码语言:shell复制--arg1=value1 --arg2=value2
- VM options(VM选项)
VM选项是传递给Java虚拟机(JVM)的参数。JVM选项用于配置JVM的运行时行为,包括堆内存大小、垃圾回收策略等。这些参数通常用于调优和优化Java应用程序的性能。一般以-D 、-X 或者-XX 开头,存在多个参数以空格隔开。例如:
代码语言:shell复制-Dkey1=value1 -Dkey2=value2
- Environment variables(环境变量)
环境变量是在操作系统级别设置的一组键值对,在运行程序时可以被应用程序访问。例如:
代码语言:shell复制key1=value1;key2=value2