为了账号安全,请及时绑定邮箱和手机立即绑定

如果未提供标志,如何关闭/不启动 Spring 应用程序?

如果未提供标志,如何关闭/不启动 Spring 应用程序?

眼眸繁星 2023-07-19 16:41:35
我使用注入一个标志@Value("${FOO}"),如果没有提供(即FOO是一个强制标志),我根本不希望我的 spring 应用程序启动。这是我的主要课程:@SpringBootApplicationpublic class Application {  public static void main(String[] args) {    SpringApplication.run(Application.class, args);  }}我注入FOO其中一项服务。我该怎么做?
查看完整描述

3 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

属性占位符的解析由PlaceholderConfigurerSupport控制。默认情况下,如果无法解析占位符,它应该抛出异常:

如果配置器无法解析占位符,则会抛出BeanDefinitionStoreException 。

@Value但是,当我尝试将 a与不存在的属性一起使用时,它抛出了异常,但并没有停止 JVM。

要强制其停止,您可以执行InitializingBean并检查方法中的属性afterPropertiesSet()

@Service

public class YourService implements InitializingBean {


    @Value("${foo:#{null}}") // set the default value to null

    private String foo;


    public void afterPropertiesSet() {

        if (foo == null) {

            throw new IllegalArgumentException("foo flag must be provided");

        }

    }

}


查看完整回答
反对 回复 2023-07-19
?
狐的传说

TA贡献1804条经验 获得超3个赞

如果你想注入 Foo 你需要启动你的应用程序。这可能不是正确的方法,但它会起作用。你能做的就是创建一个像这样的bean。在 bean 中,您可以添加自己的条件来关闭应用程序。这将阻止创建 bean 时应用程序的启动。


@SpringBootApplication

public class SampleApplication {


    @Value("${foo}")

    private String foo;


    @Bean

    public String preventStart() {

        if("no".equals(foo) ) {

            System.exit(0);

        }

        return "started";

    }


    public static void main(String[] args) {

        SpringApplication.run(SampleApplication.class, args);

    }

}


查看完整回答
反对 回复 2023-07-19
?
达令说

TA贡献1821条经验 获得超6个赞

您可以使用 SpringBoot 运行程序在应用程序启动之前执行此操作。

查看完整回答
反对 回复 2023-07-19
  • 3 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信