如何停止启动春季启动应用程序?

时间:2015-09-15 12:08:57

标签: java spring spring-boot

是否可以在弹簧启动应用程序旋转时停止它?

我的软件需要在启动时验证许可证。如果许可证不存在或无效,应用程序将关闭。实际验证发生在@PostConstruct的{​​{1}}。

我目前的方式是:

@Service

但是这个解决方案感觉很糟糕。有没有解决方案我可以在不调用REST端点的情况下停止Spring启动应用程序?

2 个答案:

答案 0 :(得分:4)

假设您的代码位于组件中(或者Spring检测到的bean)。您可以简单地注入ApplicationContext,然后退出调用close

public class LicenseChecker {

    @Autowired
    private ApplicationContext ctx;

    public void check() {
        if (!exist || !valid) {
            ((ConfigurableApplicationContext) ctx).close();
            System.exit(1);
        }
    }

}

答案 1 :(得分:-2)

您可以使用"关闭"端点关闭您的应用程序。

@Component
public class LicenseChecker implements CommandLineRunner{

  @Autowired
  ShutdownEndpoint shutdownEndpoint;

  @Override
  public void run(String... strings) throws Exception {
    System.out.println("Checking License ");

    if(!checkLicense()){
      System.out.println("Shutting down application");
      shutdownEndpoint.invoke();
    }
  }

  private boolean checkLicense(){
    // check license
    return false;
  }
}