SpringBoot项目启动,传参有哪些方式?

SpringBoot项目启动,传参有哪些方式?

1.Spring级别的参数

直接在启动 Spring Boot 应用的命令行中使用 -- 后跟参数名和值的方式来传递参数。

记住:一般是对于Spring Boot应用特有的配置参数,确保它们遵循Spring Boot的配置属性命名规则,这样才能被正确解析。

2.程序(应用)参数Program arguments

在这里,arg1arg2 是直接传递给应用程序的简单参数,而 --spring.profile.active=dev--my.custom.param=value 则是Spring Boot应用特有的配置参数,它们会被Spring Boot解析并应用于相应的配置项。

而简单的命令行参数(非--开头的)通常需要你的应用代码通过 public static void main(String[] args) 方法中的 args 数组来手动处理。

3.JVM 系统属性 (-D)

JVM 系统属性 (-D) 在启动 Java 应用程序时设置 Java 虚拟机(JVM)系统级属性的方法。虽然通常用于设置 JVM 级别的属性,但在某些情况下,也可以用来传递应用程序需要的参数。这些属性可以在应用程序运行时通过 java.lang.System.getProperty(String key) 方法访问

### Spring Boot 中的参数传递方法 #### 方法级别参数校验 在Spring Boot中,可以通过方法级别的参数校验实现更灵活的数据验证。这种技术允许开发者在一个方法调用时逐个定义并校验参数,而不仅仅依赖于数据传输对象(DTO)。这种方法可以应用于任何Spring Bean的方法上,例如Controller或Service层中的方法[^1]。 下面是一个简单的例子展示如何通过方法注入的方式完成参数校验: ```java import org.springframework.stereotype.Service; import javax.validation.constraints.NotNull; @Service public class MyService { public void processData(@NotNull(message = "Input cannot be null") String input) { System.out.println("Processing data: " + input); } } ``` 在这个示例中,`processData`方法接受一个字符串类型的输入参数,并对其施加了一个`@NotNull`约束注解。如果传入null,则会抛出异常提示信息:"Input cannot be null"。 #### 使用 @Grab 注解加载第三方库 对于某些特定功能的需求,可能需要引入额外的依赖项。在Spring Boot项目里,可以直接利用Gradle或者Maven管理依赖关系;但如果希望简化配置过程,也可以采用Groovy风格的`@Grab`注解快速导入所需的外部Jar包文件[^2]。不过需要注意的是,在实际生产环境中推荐显式声明所有的依赖以保持项目的可维护性和透明度。 以下是使用Thymeleaf模板引擎的一个简单实例: ```groovy @Grab('org.springframework.boot:spring-boot-starter-thymeleaf') class ThymeleafExample {} ``` 此代码片段展示了如何无需修改build.gradle即可动态获取指定版本号范围内的thymeleaf starter组件。 #### 外部化配置支持命令行参数覆盖默认设置 当运行基于Spring Boot构建的应用程序时,通常希望能够根据不同环境调整一些基础属性值而不必频繁更改源码本身。为此目的设计了一套强大的外部化配置体系结构,它允许多种形式提供配置选项——包括但不限于properties/yaml文件、系统属性以及命令行参数等等[^3]。 假设存在两个不同优先级顺序的位置存储着相同的键名但具有各自独立含义的内容,默认情况下后者将会替代前者成为最终生效的那个。例如执行如下指令启动服务的同时指定了自定义位置作为补充资源路径之一: ```bash java -jar your-app.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties ``` 这里表明除了常规查找目录外还会依次尝试读取位于类路径下名为"default.properties" 和 "override.properties" 的两份文档内容用于初始化全局上下文中涉及的关键字映射表单。 #### 分组校验机制应对多变业务逻辑需求 考虑到现实世界里的应用场景往往更加错综复杂,单一维度上的规则设定难以适应所有情况的要求。于是乎提出了所谓“分组”的概念来区分对待同一实体的不同侧面特性检验标准[^4]。 举个例子来说吧,假设有这样一个注册流程既包含了基本身份认证又涉及到高级权限审核环节的话就可以分别创建相应的接口标记出来以便后续操作的时候能够明确知道当前处于哪一个阶段从而选取合适的策略组合加以处理: ```java // 定义不同的校验组 public interface BasicValidationGroup {}; public interface AdvancedValidationGroup {}; // DTO 类型定义 public class UserDto { @NotBlank(groups = {BasicValidationGroup.class}) private String username; @Email(groups = {AdvancedValidationGroup.class}) private String email; } // Controller 层控制流转方向 @PostMapping("/register") public ResponseEntity<?> registerUser( @Validated({BasicValidationGroup.class}) @RequestBody UserDto user){ ... } @PostMapping("/admin/register") public ResponseEntity<?> adminRegisterUser( @Validated({BasicValidationGroup.class, AdvancedValidationGroup.class}) @RequestBody UserDto user){ ... } ``` 上述代码块清晰地展现了怎样借助分组校验的思想去适配多样化的业务场景诉求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值