欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2021-04-28 08:07:01|栏目:JAVA代码|点击:

在一个初春的下午,甲跟我说,要在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()方法的退出代码。

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

上一篇:Java8 用Lambda表达式给List集合排序的实现

栏    目:JAVA代码

下一篇:idea鼠标控制放大缩小的操作

本文标题:Spring Boot启动及退出加载项的方法

本文地址:http://www.codeinn.net/misctech/110559.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有