Spring Boot啓動後初始化相關數據

Spring Boot如何在啓動後訪問數據庫並將數據庫中的數據作爲全局應用程序共享對象存儲到ServletContext中。

使用Spring Boot的監聽器

查看Spring Boot的官方文檔,其內容有如下一段:

If you want those listeners to be registered automatically, regardless of the way the application is created, you can add a META-INF/spring.factories file to your project and reference your listener(s) by using the org.springframework.context.ApplicationListener key, as shown in the following example:

org.springframework.context.ApplicationListener=com.example.project.MyListener

由上述可以知道,實現自動註冊的監聽器,可以通過實現ApplicationListener接口,實現其中的方法完成監聽器的註冊。

在進行監聽器註冊時選擇的觸發事件類型是:ApplicationStartedEvent,在官方文檔中的解釋如下 :

An ApplicationReadyEvent is sent after any application and command-line runners have been called. It indicates that the application is ready to service requests.

可以知道事件觸發的時機是在Spring Boot啓動後,而用戶請求發送之前觸發。

程序如下:

其中BlogSetting 爲實體類,BlogSettingService爲MVC模式中的Service層(這兩點不必深究,僅僅爲了寫個示例程序)

@Componentpublic 
class BlogSettingInit implements ApplicationListener {    		
	@Autowired    
	private BlogSettingService blogSettingService;    
	
	public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {        
		ServletContext servletContext = ((WebApplicationContext) applicationReadyEvent.getApplicationContext()).getServletContext();        
		List blogSettings = blogSettingService.findBlogSetting();        
		if (blogSettings.isEmpty() || blogSettings == null) {            
			BlogSetting blogSetting = new BlogSetting();            
			BlogSetting blogSetting1 = blogSettingService.BlogSettingSaveOrUpdate(blogSetting);
            blogSetting.setId(blogSetting1.getId());
            servletContext.setAttribute("setting", blogSetting);        
		}  else {            
			servletContext.setAttribute("setting", blogSettings.get(0));        
		}    
	}
}

實現方式除上述一種外 ,亦可以使用註解的方式:

@Component 
public class BlogSettingInit { 
	@Autowired 
	private BlogSettingService blogSettingService; 
	
	@EventListener 
	public void init(ApplicationReadyEvent applicationReadyEvent) {
		ServletContext servletContext = ((WebApplicationContext)applicationReadyEvent.getApplicationContext()).getServletContext();
		List blogSettings = blogSettingService.findBlogSetting();
		if (blogSettings.isEmpty() || blogSettings == null) {
			BlogSetting blogSetting = new BlogSetting();
			BlogSetting blogSetting1 = blogSettingService.BlogSettingSaveOrUpdate(blogSetting);
			blogSetting.setId(blogSetting1.getId());
			servletContext.setAttribute("setting", blogSetting);
		} else {         
			servletContext.setAttribute("setting", blogSettings.get(0));     
		} 
	} 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章