Spring Boot启动及退出加载项的方法

 更新时间:2019年04月29日 11:35:59   作者:如期而至  
这篇文章主要介绍了Spring Boot启动及退出加载项的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在一个初春的下午,甲跟我说,要在Spring Boot启动服务的时候,设置表自增的起始值。

于是我用屁股想了一下,不就是在main方法里折腾嘛。

后来实际操作了一把,发现屁股被打了。

于是乎,找到官方文档(以2.1.4为例),找到这一段:

如果你需要在启动SpringApplication后执行一些具体的代码,你可以实现ApplicaitonRunner或者CommandLineRunner接口。两个接口都实现了一个工作方式相同的run方法,该方法仅会在SpringApplication.run(...)前执行。

唯一不同的是实现CommandLineRunner接口的run方法参数为String类型,而实现ApplicaitonRunnerrun方法的参数则是需要ApplicationArguments。官方文档中有个例子供参考。

如果有多个ApplicaitonRunner或者CommandLineRunner接口的实现存在启动顺序,则可以使用org.springframework.core.Ordered接口或者org.springframework.core.annotation.Order注解的形式来给他们排序。

由于我没有参数类型等的限制,所以用哪个接口都一样,写个跟官方不一样的,于是代码大概长这样:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

@Component
public class InstructionStart implements ApplicationRunner {

  private Logger logger = LoggerFactory.getLogger(this.getClass());

  @Autowired
  private JdbcTemplate template;

  @Override
  public void run(ApplicationArguments applicationArguments) throws Exception {
    String increment = "0";
    logger.info("初始化递增起始值为:{}", increment);
    template.execute("ALTER TABLE `table` AUTO_INCREMENT = " + increment);
  }
}

深刻的意识到脑子和屁股一样重要。

写完启动项,那么再把退出也说一下:

每一个SpringApplication都应该向JVM注册一个钩子函数来确保ApplicationContext能优雅地关闭。使所有的标准Spring生命周期回调(例如DisposableBean接口和@PreDestroy注解)都可用。

此外,如果你希望beans在调用SpringApplication.exit()时返回特定的退出代码,则可以实现org.springframework.boot.ExitCodeGenerator接口,这些退出代码会被传给System.exit()作为返回的状态码。官方还给了个例子,就是下面这个。

@SpringBootApplication
public class ExitCodeApplication {

  @Bean
  public ExitCodeGenerator exitCodeGenerator() {
    return () -> 42;
  }

  public static void main(String[] args) {
    System.exit(SpringApplication
        .exit(SpringApplication.run(ExitCodeApplication.class, args)));
  }
}

当然,ExitCodeGenerator也可以由异常来实现,当遇到一个这样的异常时,Sprin Boot会返回实现了getExitCode()方法的退出代码。

后面退出部分翻译地磕磕碰碰的,有不对的地方欢迎指正。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • SpringMVC与前端交互案例教程

    SpringMVC与前端交互案例教程

    本篇文章主要介绍了SpringMVC前端和后端数据交互总结,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。希望能给你带来帮助
    2021-07-07
  • idea中maven项目模块变成灰色原因及解决方案

    idea中maven项目模块变成灰色原因及解决方案

    这篇文章主要介绍了idea中maven项目模块变成灰色原因及解决方案,文中通过图文结合的方式给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • 详解Java从工厂方法模式到 IOC/DI思想

    详解Java从工厂方法模式到 IOC/DI思想

    工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口。本文将详细介绍Java从工厂方法模式到 IOC/DI思想。
    2021-06-06
  • Struts2中图片以base64方式上传至数据库

    Struts2中图片以base64方式上传至数据库

    这篇文章主要介绍了Struts2中图片以base64方式上传至数据库的实现代码,代码分为前台和后台两段,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • java web服务器实现跨域访问

    java web服务器实现跨域访问

    这篇文章主要为大家详细介绍了java web服务器实现跨域访问,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Java中CountDownLatch工具类详细解析

    Java中CountDownLatch工具类详细解析

    这篇文章主要介绍了Java中CountDownLatch工具类详细解析,创建CountDownLatch对象时,会传入一个count数值,该对象每次调用countDown()方法会使count -- ,就是count每次减1,需要的朋友可以参考下
    2023-11-11
  • 使用Spring Boot Maven插件的详细方法

    使用Spring Boot Maven插件的详细方法

    这篇文章主要介绍了如何使用Spring Boot Maven插件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Java 入门图形用户界面设计之复选框

    Java 入门图形用户界面设计之复选框

    图形界面(简称GUI)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受,本篇精讲Java语言中关于图形用户界面的复选框
    2022-02-02
  • Spring Boot中使用Redis和Lua脚本实现延时队列的方案

    Spring Boot中使用Redis和Lua脚本实现延时队列的方案

    通过使用Redis和Lua脚本,可以在Spring Boot环境中实现一个高效且可靠的延时队列系统,这种方法利用了Redis的有序集合数据结构和Lua脚本的原子性操作来确保任务的正确性和一致性,这篇文章主要介绍了Spring Boot中使用Redis和Lua脚本实现延时队列,需要的朋友可以参考下
    2024-05-05
  • Java计算器核心算法代码实现

    Java计算器核心算法代码实现

    今天小编就为大家分享一篇关于Java计算器核心算法代码实现,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01

最新评论