SpringBoot程序启动后回调方法?——ApplicationRunner.run()
注:?CommandLineRunner同样也可以实现这个功能,区别是run()方法的参数不同
package org.springframework.boot;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
/**
?* Interface used to indicate that a bean should <em>run</em> when it is contained within
?* a {@link SpringApplication}. Multiple {@link ApplicationRunner} beans can be defined
?* within the same application context and can be ordered using the {@link Ordered}
?* interface or {@link Order @Order} annotation.
?*
?* @author Phillip Webb
?* @since 1.3.0
?* @see CommandLineRunner
?*/
@FunctionalInterface
public interface ApplicationRunner {
?? ?/**
?? ? * Callback used to run the bean.
?? ? * @param args incoming application arguments
?? ? * @throws Exception on error
?? ? */
?? ?void run(ApplicationArguments args) throws Exception;
}
使用
package com.example.config;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@Component
public class AfterRun implements ApplicationRunner {
? ? @Override
? ? public void run(ApplicationArguments args) throws Exception {
? ? ? ? System.out.println("----------SpringBoot启动完成之后再做一些自己的业务-------------");
? ? }
}
SpringBoot程序停止前销毁资源回调方法——DisposableBean.destroy()
package org.springframework.beans.factory;
/**
?* Interface to be implemented by beans that want to release resources on destruction.
?* A {@link BeanFactory} will invoke the destroy method on individual destruction of a
?* scoped bean. An {@link org.springframework.context.ApplicationContext} is supposed
?* to dispose all of its singletons on shutdown, driven by the application lifecycle.
?*
?* <p>A Spring-managed bean may also implement Java's {@link AutoCloseable} interface
?* for the same purpose. An alternative to implementing an interface is specifying a
?* custom destroy method, for example in an XML bean definition. For a list of all
?* bean lifecycle methods, see the {@link BeanFactory BeanFactory javadocs}.
?*
?* @author Juergen Hoeller
?* @since 12.08.2003
?* @see InitializingBean
?* @see org.springframework.beans.factory.support.RootBeanDefinition#getDestroyMethodName()
?* @see org.springframework.beans.factory.config.ConfigurableBeanFactory#destroySingletons()
?* @see org.springframework.context.ConfigurableApplicationContext#close()
?*/
public interface DisposableBean {
?? ?/**
?? ? * Invoked by the containing {@code BeanFactory} on destruction of a bean.
?? ? * @throws Exception in case of shutdown errors. Exceptions will get logged
?? ? * but not rethrown to allow other beans to release their resources as well.
?? ? */
?? ?void destroy() throws Exception;
}
使用
package com.example.config;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.stereotype.Component;
@Component
public class BeforeDestroy implements DisposableBean {
? ? @Override
? ? public void destroy() throws Exception {
? ? ? ? System.out.println("----------SpringBoot停止前释放资源-------------");
? ? }
}
测试:
java -jar test-1.0-SNAPSHOT.jar
? . ? ____ ? ? ? ? ?_ ? ? ? ? ? ?__ _ _
?/\\ / ___'_ __ _ _(_)_ __ ?__ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
?\\/ ?___)| |_)| | | | | || (_| | ?) ) ) )
? ' ?|____| .__|_| |_|_| |_\__, | / / / /
?=========|_|==============|___/=/_/_/_/
?:: Spring Boot :: ? ? ? ?(v2.2.6.RELEASE)
2022-02-12 16:12:09.293 ?INFO 18967 --- [ ? ? ? ? ? main] com.example.App ? ? ? ? ? ? ? ? ? ? ? ? ?: Starting App v1.0-SNAPSHOT on admin with PID 18967 (G:\workspace\test\
target\test-1.0-SNAPSHOT.jar started by admin in D:\workspace\test\target)
2022-02-12 16:12:09.300 ?INFO 18967 --- [ ? ? ? ? ? main] com.example.App ? ? ? ? ? ? ? ? ? ? ? ? ?: No active profile set, falling back to default profiles: default
2022-02-12 16:12:13.231 ?INFO 18967 --- [ ? ? ? ? ? main] o.s.b.w.embedded.tomcat.TomcatWebServer ?: Tomcat initialized with port(s): 8080 (http)
2022-02-12 16:12:13.262 ?INFO 18967 --- [ ? ? ? ? ? main] o.apache.catalina.core.StandardService ? : Starting service [Tomcat]
2022-02-12 16:12:13.262 ?INFO 18967 --- [ ? ? ? ? ? main] org.apache.catalina.core.StandardEngine ?: Starting Servlet engine: [Apache Tomcat/9.0.33]
2022-02-12 16:12:13.545 ?INFO 18967 --- [ ? ? ? ? ? main] o.a.c.c.C.[Tomcat].[localhost].[/] ? ? ? : Initializing Spring embedded WebApplicationContext
2022-02-12 16:12:13.545 ?INFO 18967 --- [ ? ? ? ? ? main] o.s.web.context.ContextLoader ? ? ? ? ? ?: Root WebApplicationContext: initialization completed in 4063 ms
2022-02-12 16:12:14.235 ?INFO 18967 --- [ ? ? ? ? ? main] o.s.s.concurrent.ThreadPoolTaskExecutor ?: Initializing ExecutorService 'applicationTaskExecutor'
2022-02-12 16:12:14.759 ?INFO 18967 --- [ ? ? ? ? ? main] o.s.b.w.embedded.tomcat.TomcatWebServer ?: Tomcat started on port(s): 8080 (http) with context path ''
2022-02-12 16:12:14.764 ?INFO 18967 --- [ ? ? ? ? ? main] com.example.App ? ? ? ? ? ? ? ? ? ? ? ? ?: Started App in 6.719 seconds (JVM running for 7.785)
----------SpringBoot启动完成之后再做一些自己的业务-------------
2022-02-12 16:12:30.264 ?INFO 18967 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] ? ? ? : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-02-12 16:12:30.265 ?INFO 18967 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet ? ? ? ?: Initializing Servlet 'dispatcherServlet'
2022-02-12 16:12:30.290 ?INFO 18967 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet ? ? ? ?: Completed initialization in 25 ms
----------do----------
----------do----------
//此处ctrl+c停止程序
2022-02-12 16:12:37.898 ?INFO 18967 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor ?: Shutting down ExecutorService 'applicationTaskExecutor'
----------SpringBoot停止前释放资源-------------
?
|