您好,欢迎访问一九零五行业门户网

Springboot启动后怎么执行

一、注解@postconstruct使用注解@postconstruct是最常见的一种方式,存在的问题是如果执行的方法耗时过长,会导致项目在方法执行期间无法提供服务。
@componentpublic class startinit {//// @autowired 可以注入bean// isysuserservice userservice; @postconstruct public void init() throws interruptedexception { thread.sleep(10*1000);//这里如果方法执行过长会导致项目一直无法提供服务 system.out.println(123456); }}
二、commandlinerunner接口实现commandlinerunner接口 然后在run方法里面调用需要调用的方法即可,好处是方法执行时,项目已经初始化完毕,是可以正常提供服务的。
同时该方法也可以接受参数,可以根据项目启动时: java -jar demo.jar arg1 arg2 arg3 传入的参数进行一些处理。
@componentpublic class commandlinerunnerimpl implements commandlinerunner { @override public void run(string... args) throws exception { system.out.println(arrays.tostring(args)); }}
三、实现applicationrunner接口applicationrunner和commandlinerunner的实现方式基本相似。
唯一的不同是启动时传参的格式,commandlinerunner对于参数格式没有任何限制,applicationrunner接口参数格式必须是:–key=value
@componentpublic class applicationrunnerimpl implements applicationrunner { @override public void run(applicationarguments args) throws exception { set<string> optionnames = args.getoptionnames(); for (string optionname : optionnames) { list<string> values = args.getoptionvalues(optionname); system.out.println(values.tostring()); } }}
四、实现applicationlistener实现接口applicationlistener方式和实现applicationrunner,commandlinerunner接口都不影响服务,都可以正常提供服务,注意监听的事件,通常是applicationstartedevent 或者applicationreadyevent,其他的事件可能无法注入bean。
@componentpublic class applicationlistenerimpl implements applicationlistener<applicationstartedevent> { @override public void onapplicationevent(applicationstartedevent event) { system.out.println("listener"); }}
五、四种方式的执行顺序注解方式@postconstruct 始终最先执行
如果监听的是applicationstartedevent 事件,则一定会在commandlinerunner和applicationrunner 之前执行。
如果监听的是applicationreadyevent 事件,则一定会在commandlinerunner和applicationrunner 之后执行。
commandlinerunner和applicationrunner 默认是applicationrunner先执行,如果双方指定了@order 则按照@order的大小顺序执行,大的先执行。
以上就是springboot启动后怎么执行的详细内容。
其它类似信息

推荐信息