系统监听器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.lang.NonNull;
/**
* @author itning
* @date 2020/4/29 16:59
*/
public class FirstListener implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(@NonNull ApplicationStartedEvent event) {
System.out.println("FirstListener");
}
}
|
直接子类
1
2
3
4
5
6
| AbstractSubProtocolEvent,
ApplicationContextEvent,
BrokerAvailabilityEvent,
PayloadApplicationEvent,
RequestHandledEvent,
TestContextEvent
|
源码:
1
| setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
|
在spring.factories
文件中
1
2
3
4
5
6
7
8
9
10
11
| org.springframework.context.ApplicationListener=\
org.springframework.boot.ClearCachesApplicationListener,\
org.springframework.boot.builder.ParentContextCloserApplicationListener,\
org.springframework.boot.cloud.CloudFoundryVcapEnvironmentPostProcessor,\
org.springframework.boot.context.FileEncodingApplicationListener,\
org.springframework.boot.context.config.AnsiOutputApplicationListener,\
org.springframework.boot.context.config.ConfigFileApplicationListener,\
org.springframework.boot.context.config.DelegatingApplicationListener,\
org.springframework.boot.context.logging.ClasspathLoggingApplicationListener,\
org.springframework.boot.context.logging.LoggingApplicationListener,\
org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener
|
同样三种配置方式:
关键代码:springApplication.addListeners(new FirstListener(), new SecondListener());
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import top.itning.springboottest.config.FirstApplicationContextInitializer;
import top.itning.springboottest.listener.FirstListener;
import top.itning.springboottest.listener.SecondListener;
/**
* @author itning
*/
@SpringBootApplication
public class SpringbootTestApplication {
public static void main(String[] args) {
//SpringApplication.run(SpringbootTestApplication.class, args);
SpringApplication springApplication = new SpringApplication(SpringbootTestApplication.class);
springApplication.addInitializers(new FirstApplicationContextInitializer());
springApplication.addListeners(new FirstListener(), new SecondListener());
springApplication.run(args);
}
}
|
只需要在应用配置文件中application.yml
配置:context.initializer.classes=xxx.xxx.xxx.XX
查看原理:org.springframework.boot.context.config.DelegatingApplicationListener
1
2
3
| context:
listener:
classes: xxx.xxx.xxx.XX
|
resources
目录新建META-INF
文件夹并且新建文件:spring.factories
1
| org.springframework.context.ApplicationListener=xxx.xxx.xxx.XX
|
文章作者
itning
上次更新
2020年04月29日 17:44:31
许可协议
CC BY-NC-ND 4.0