查看: 1285|回复: 0

[Java学习] 详解spring boot容器加载完后执行特定操作

发表于 2018-3-3 12:06:17

有时候我们需要在spring boot容器启动并加载完后,开一些线程或者一些程序来干某些事情。这时候我们需要配置ContextRefreshedEvent事件来实现我们要做的事情

1、ApplicationStartup类

  1. public class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent>{
  2. public void onApplicationEvent(ContextRefreshedEvent event)
  3. {
  4. //在容器加载完毕后获取dao层来操作数据库
  5. OSSVideoRepository ossVideoRepository = (OSSVideoRepository)event.getApplicationContext().getBean(OSSVideoRepository.class);
  6. //在容器加载完毕后获取配置文件中的配置
  7. ServerConfig serverConfig = (ServerConfig)event.getApplicationContext().getBean(ServerConfig.class);
  8. ServerFileScanner fileScanner = new ServerFileScanner(
  9. ossVideoRepository, serverConfig.getScanpath());
  10. //在容器加载完毕后启动线程
  11. Thread thread = new Thread(fileScanner);
  12. thread.start();
  13. }
  14. }
复制代码

2、ServerConfig 类

  1. @Component
  2. @ConfigurationProperties(prefix = "server")
  3. public class ServerConfig {
  4. private String aliyunossEndpoint;
  5. private String aliyunossAccessKeyId;
  6. private String aliyunossAccessKeySecret;
  7. private String aliyunossBucketName;
  8. private String scanpath;
  9. public String getAliyunossEndpoint() {
  10. return aliyunossEndpoint;
  11. }
  12. public void setAliyunossEndpoint(String aliyunossEndpoint) {
  13. this.aliyunossEndpoint = aliyunossEndpoint;
  14. }
  15. public String getAliyunossAccessKeyId() {
  16. return aliyunossAccessKeyId;
  17. }
  18. public void setAliyunossAccessKeyId(String aliyunossAccessKeyId) {
  19. this.aliyunossAccessKeyId = aliyunossAccessKeyId;
  20. }
  21. public String getAliyunossAccessKeySecret() {
  22. return aliyunossAccessKeySecret;
  23. }
  24. public void setAliyunossAccessKeySecret(String aliyunossAccessKeySecret) {
  25. this.aliyunossAccessKeySecret = aliyunossAccessKeySecret;
  26. }
  27. public String getAliyunossBucketName() {
  28. return aliyunossBucketName;
  29. }
  30. public void setAliyunossBucketName(String aliyunossBucketName) {
  31. this.aliyunossBucketName = aliyunossBucketName;
  32. }
  33. public String getScanpath() {
  34. return scanpath;
  35. }
  36. public void setScanpath(String scanpath) {
  37. this.scanpath = scanpath;
  38. }
  39. }
复制代码

PS:还有一些spring内置的事件

1、 ContextRefreshedEvent:ApplicationContext容器初始化或者刷新时触发该事件。
2、 ContextStartedEvent:当使用ConfigurableApplicationContext接口的start()方法启动ApplicationContext容器时触发该事件。
3、 ContextClosedEvent:当使用ConfigurableApplicationContext接口的close()方法关闭ApplicationContext容器时触发该事件。
4、 ContextStopedEvent: 当使用ConfigurableApplicationContext接口的stop()方法停止ApplicationContext容器时触发该事件。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员之家。



回复

使用道具 举报