1.Spring项目启动时,加载相关初始化配置

Posted caoweixiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.Spring项目启动时,加载相关初始化配置相关的知识,希望对你有一定的参考价值。

 

Spring项目启动时,会加载一些常用的配置:

1、加载spring上下文

SpringApplicationContextUtils.initApplicationContext(event.getServletContext());

 

2、加载属性文件

EsbCommsUtils.initComms(event.getServletContext());
 1 public class EsbCommsUtils {
 2     
 3     private static Log logger = LogFactory.getLog(EsbCommsUtils.class);
 4     
 5     public static final Properties properties = new Properties();
 6         
 7     public static void initComms(ServletContext sct){
 8         try{
 9             properties.load(sct.getResourceAsStream("/WEB-INF/conf/comms.properties"));
10         }catch(Exception e){
11             logger.error("加载comms.properties文件异常,cause:"+e.getMessage());
12         }
13     }
14     
15     public static String getCommsValue(String key){
16         return properties.getProperty(key, null);
17     }
18     
19 }

 

3、加载本地緩存,定时轮询刷新(定义定时线程池,1个线程)

cacheManager = (CacheManager)SpringApplicationContextUtils.getBean(EsbUtils.CACHEMANAGER);
cacheManager.loadAllCache();
 1 package com.zat.mesb.base;
 2 
 3 import com.zat.mesb.util.EsbCommsUtils;
 4 import com.zat.sproxy.thread.NamedThreadFactory;
 5 import org.springframework.stereotype.Controller;
 6 
 7 import java.util.List;
 8 import java.util.concurrent.Executors;
 9 import java.util.concurrent.ScheduledExecutorService;
10 import java.util.concurrent.TimeUnit;
11 
12 
13 @Controller
14 public class CacheManager {
15     
16     private List<AbstractCache> listCaches;
17     
// 定义定时线程池,1个线程 18 private final ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(1, new NamedThreadFactory("reloadcache", true)); 19 20 public List<AbstractCache> getListCaches() { 21 return listCaches; 22 } 23 24 public void setListCaches(List<AbstractCache> listCaches) { 25 this.listCaches = listCaches; 26 } 27
    // 定时查询参数 28 public void loadAllCache() { 29 //loadCache(); 30 this.scheduled.scheduleWithFixedDelay(new Runnable() { 31 32 @Override 33 public void run() { 34 loadCache(); 35 } 36 }, 1L, Long.valueOf(EsbCommsUtils.getCommsValue("flush.cache.data")), TimeUnit.SECONDS); 37 } 38 39 private void loadCache() { 40 if(this.listCaches != null){ 41 for(AbstractCache cache : listCaches) { 42 cache.loadCache(); 43 } 44 } 45 } 46 47 public Object getCacheBySimpleClassName(String className){ 48 if(this.listCaches != null){ 49 for(AbstractCache cache : listCaches){ 50 if(cache.getClass().getSimpleName().equalsIgnoreCase(className)){ 51 return cache.getCacheList(); 52 } 53 } 54 } 55 return null; 56 } 57 58 public Object getCacheValueByKey(String className, String key){ 59 if(this.listCaches != null){ 60 for(AbstractCache cache : listCaches){ 61 if(cache.getClass().getSimpleName().equalsIgnoreCase(className)){ 62 return cache.cacheMaps.get(key); 63 } 64 } 65 } 66 return null; 67 } 68 69 public Object getCacheValueByKey(String className, String key, String type){ 70 if(this.listCaches != null){ 71 for(AbstractCache cache : listCaches){ 72 if(cache.getClass().getSimpleName().equalsIgnoreCase(className)){ 73 return cache.getCacheMaps().get(key); 74 } 75 } 76 } 77 return null; 78 } 79 80 public void clearCache(){ 81 if(this.listCaches != null){ 82 for(AbstractCache cache : listCaches){ 83 cache.clearCache(); 84 } 85 } 86 } 87 88 }

 

 

完整示例代码:

 1 package com.zat.mesb.listener;
 2 
 3 
 4 import com.zat.mesb.base.CacheManager;
 5 import com.zat.mesb.stage.processor.StageProcessorManager;
 6 import com.zat.mesb.util.*;
 7 import org.apache.commons.logging.Log;
 8 import org.apache.commons.logging.LogFactory;
 9 import org.springframework.web.context.ContextLoaderListener;
10 
11 import javax.servlet.ServletContextEvent;
12 
13 public class EsbListener extends ContextLoaderListener {
14     
15     private static Log logger = LogFactory.getLog(EsbListener.class);
16     private CacheManager cacheManager;
17 
18     @Override
19     public void contextDestroyed(ServletContextEvent sce) {
20         super.contextDestroyed(sce);
21     }
22 
23     @Override
24     public void contextInitialized(ServletContextEvent event) {
25         super.contextInitialized(event);
26         logger.info("1.开始加载spring上下文...");
27         SpringApplicationContextUtils.initApplicationContext(event.getServletContext());
28         EsbCommsUtils.initComms(event.getServletContext());
29         logger.info("1.加载spring上下文完成...");    
30 
31         logger.info("2.开始加载本地緩存...");
32         cacheManager = (CacheManager)SpringApplicationContextUtils.getBean(EsbUtils.CACHEMANAGER);
33         cacheManager.loadAllCache();
34         logger.info("2.加载本地緩存完成...");
35         
36         logger.info("3.开始加載BusHandlers配置信息...");
37         BusHandlerUtils.initBusHandlers(event.getServletContext());
38         logger.info("3.加載BusHandlers配置信息完成...");
39 
40         logger.info("4.开始加載ApiHandlers配置信息...");
41         ApiHandlerUtils.initApiHandlers(event.getServletContext());
42         logger.info("4.加載ApiHandlers配置信息完成...");
43 
44         logger.info("5.开始加載ApiAlipayHandlers配置信息...");
45         ApiAlipayHandlerUtils.initApiAlipayHandlers(event.getServletContext());
46         logger.info("5.加載ApiAlipayHandlers配置信息完成...");
47 
48         logger.info("6.開始初始化業務階段流程...");
49         Thread thread = StageProcessorManager.getInstance();
50         thread.setPriority(Thread.MAX_PRIORITY);
51         thread.start();
52         if(thread != null && thread.isAlive()){
53             try {
54                 thread.join();
55             } catch (InterruptedException e) {
56                 logger.error("Init stage process error,cause:"+e.getMessage());
57             }
58         }
59         logger.info("6.初始化業務階段流程完成...");
60     }
61 
62 }

 

以上是关于1.Spring项目启动时,加载相关初始化配置的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat启动时项目重复加载,导致资源初始化两次!

java web项目启动时自动加载自定义properties文件

tomcat加载两次项目,事务初始化多次

无标题

java 静态相关内容

在运行时延迟初始化 Spring Security + 重新加载 Spring Security 配置