Spring启动和参数验证

时间:2017-04-14 19:18:59

标签: spring-boot command-line-arguments

我正在编写一个Spring启动应用程序,我想验证在我的应用程序运行之前设置了所有预期的参数或外部化属性。什么时候能做到? 我找到了commons-cli或args4j库,但我不知道如何在Spring启动应用程序中使用它,如果它是一个很好的解决方案。感谢

3 个答案:

答案 0 :(得分:0)

将验证逻辑放在Spring引导主方法中。在Spring启动应用程序中没有单独的方法来使用这些库。你可以在main方法中添加验证代码,解析args并进行验证。你可以使用任何args解析器库。

@SpringBootApplication
public class MyApplication{
    public static void main(String[] args){
        validateArguments(args);
        SpringApplication.run(MyApplication.class);
    }
    private static validateArguments(args){
        // validation logic - If validation fails throw IllegalStateException(); 
    }
}

答案 1 :(得分:0)

有几个是这样做的。此链接解释了所有可用的https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

如果您只是检查not null,那么您可以{i}使用{/ 1}}

@Value

如果值为@Configuration public class ApplicationConfiguration { @Value("${name}") private String name; }

,那么应用程序将在启动时暂停

如果您有其他属性需要确保他们设置了特定值,您可以使用null

@ConfigurationProperties

答案 2 :(得分:0)

首先, 使用@Validated批注启用属性验证。 然后根据您要检查它们的方式配置适当的字段, 例如,使用正则表达式(@Pattern批注)。

示例配置bean,其中设置了两个字段:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;

@Data
@Validated
@Configuration
@ConfigurationProperties(prefix = "mail-service")
public class MailServiceConfiguration {

    @Min(1)
    @Max(20)
    private int numberOfThreads;

    @NotBlank
    @Pattern(regexp = "/^[A-Za-z0-9]{3,10}$/"
            , message = "No special characters"
    )
    private String clientType;

}

我来自aplpication.properties的无效配置:

mail-service.numberOfThreads=21
mail-service.clientType=***

...,并在尝试运行后生成消息弹簧:

Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'mail-service' to com.MailServiceConfiguration failed:

    Property: mail-service.numberOfThreads
    Value: 21
    Origin: class path resource [application.properties]:1:30
    Reason: must be less than or equal to 20

    Property: mail-service.clientType
    Value: ***
    Origin: class path resource [application.properties]:2:25
    Reason: No special characters