Spring Boot启动及退出加载项的方法
在一个初春的下午,甲跟我说,要在spring boot启动服务的时候,设置表自增的起始值。
于是我用屁股想了一下,不就是在main方法里折腾嘛。
后来实际操作了一把,发现屁股被打了。
于是乎,找到官方文档(以2.1.4为例),找到这一段:
如果你需要在启动springapplication后执行一些具体的代码,你可以实现applicaitonrunner
或者commandlinerunner
接口。两个接口都实现了一个工作方式相同的run
方法,该方法仅会在springapplication.run(...)前执行。
唯一不同的是实现commandlinerunner
接口的run
方法参数为string
类型,而实现applicaitonrunner
的run
方法的参数则是需要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()
方法的退出代码。
后面退出部分翻译地磕磕碰碰的,有不对的地方欢迎指正。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
Spring Boot启动及退出加载项的方法
-
Spring Boot的应用启动与关闭的方法
-
spring boot设置过滤器、监听器及拦截器的方法
-
spring boot设置过滤器、监听器及拦截器的方法
-
spring-boot通过@Scheduled配置定时任务及定时任务@Scheduled注解的方法
-
spring boot中controller的使用及url参数的获取方法
-
Spring Boot解决项目启动时初始化资源的方法
-
spring boot中controller的使用及url参数的获取方法
-
spring boot 本地图片不能加载(图片路径)的问题及解决方法
-
Spring Boot启动及退出加载项的方法