浏览代码

@IPU_REQ_2021@添加ipu-spring-nacos示例代码

weihf 3 年之前
父节点
当前提交
2b2bddd940

+ 19 - 0
ipu-rest-demo/src/main/java/com/ai/ipu/server/demo/control/nacos/IpuSpringNacosController.java

@ -34,6 +34,7 @@ import com.ai.ipu.nosql.INoSql;
34 34
import com.ai.ipu.nosql.config.IpuNoSQLConfig;
35 35
import com.ai.ipu.nosql.mongodb.MongoCacheFactory;
36 36
import com.ai.ipu.server.demo.config.IpuSpringNacosConfig;
37
import com.ai.ipu.server.demo.listener.IpuCacheListener;
37 38
import com.github.pagehelper.util.StringUtil;
38 39
/**
39 40
 * 基于ipu-spring-nacos组件对ipu-cache/ipu-nacos/ipu-s3/ipu-database动态刷新配置范例。
@ -341,4 +342,22 @@ public class IpuSpringNacosController {
341 342
        }
342 343
        return dbsMap;
343 344
    }
345
    
346
	@ResponseBody
347
    @RequestMapping("/scheduleIpuConfigUsingIpuCache")
348
    public JMap scheduleIpuConfigUsingIpuCache(JMap param) throws Exception {
349
		JMap result = new JsonMap();	
350
		try {		
351
			//监听配置中心里ipu-cache.xml的配置
352
			service.addListener(nacosConfig.getIpuCacheDataid(), nacosConfig.getIpuCacheGroup(), new IpuCacheListener());
353

354
			result.put("result", "监听配置中心:" + IpuNacosConfig.getNacosServerAddr() + "ipu-cache.xml的配置" + nacosConfig.getIpuCacheDataid() + "成功");		
355
		} catch (Exception e)
356
		{
357
			String errorMsg = "监听配置中心:" + IpuNacosConfig.getNacosServerAddr() + "ipu-cache.xml的配置" + nacosConfig.getIpuCacheDataid() + "错误:" + e.toString();
358
			LOGGER.error(errorMsg);
359
			result.put("result", errorMsg);
360
		}
361
		return result;
362
	}
344 363
}

+ 44 - 0
ipu-rest-demo/src/main/java/com/ai/ipu/server/demo/listener/IpuCacheListener.java

@ -0,0 +1,44 @@
1
package com.ai.ipu.server.demo.listener;
2
3
4
import java.util.Calendar;
5
6
import org.springframework.beans.factory.annotation.Autowired;
7
import org.springframework.stereotype.Component;
8
9
import com.ai.ipu.basic.log.ILogger;
10
import com.ai.ipu.basic.log.IpuLoggerFactory;
11
import com.ai.ipu.common.date.TimeUtil;
12
import com.ai.ipu.restful.spring.SpringBeanUtil;
13
import com.ai.ipu.server.demo.config.IpuSpringNacosConfig;
14
import com.ai.ipu.server.demo.schedule.ScheduledTask;
15
import com.alibaba.nacos.api.config.listener.AbstractListener;
16
17
public class IpuCacheListener extends AbstractListener {
18
	private static final ILogger log = IpuLoggerFactory.createLogger(IpuCacheListener.class);
19
	
20
	@Override
21
	public void receiveConfigInfo(String configInfo) {
22
		
23
		try {
24
			log.debug(">>>>>>>>>>>>>>>>>>>new config from nacos:" + configInfo);
25
			IpuSpringNacosConfig config = SpringBeanUtil.getBean(IpuSpringNacosConfig.class);
26
			//新配置第二天0点0分1秒生效
27
			StringBuffer cron = new StringBuffer();
28
			cron.append("1").append(" 0").append(" 0 ");
29
			String day = TimeUtil.getSysDate(1, "dd");
30
			String month = TimeUtil.getSysDate(1, "MM");
31
			cron.append(day.startsWith("0")?day.substring(1):day).append(" ");
32
			cron.append(month.startsWith("0")?month.substring(1):month).append(" ");
33
			cron.append("? ");
34
			cron.append(TimeUtil.getSysDate(1, "yyyy"));
35
			//ScheduledTask.run("0 22 10 2 8 ? 2021", config.getIpuCacheDataid(), configInfo);
36
			ScheduledTask.run(cron.toString(), config.getIpuCacheDataid(), configInfo);
37
38
		} catch (Exception e) {
39
			log.error("receiveConfigInfo error:", e);
40
		}
41
	}
42
43
}
44

+ 44 - 0
ipu-rest-demo/src/main/java/com/ai/ipu/server/demo/schedule/ScheduleIpuCacheJob.java

@ -0,0 +1,44 @@
1
package com.ai.ipu.server.demo.schedule;
2
3
import org.quartz.Job;
4
import org.quartz.JobExecutionContext;
5
import org.quartz.JobExecutionException;
6
7
import java.util.Map;
8
import com.ai.ipu.basic.log.ILogger;
9
import com.ai.ipu.basic.log.IpuLoggerFactory;
10
import com.ai.ipu.restful.spring.SpringBeanUtil;
11
import com.ai.ipu.server.demo.config.IpuSpringNacosConfig;
12
import com.ai.ipu.server.demo.util.XmlUtil;
13
14
public class ScheduleIpuCacheJob implements Job {
15
	private static final ILogger logger = IpuLoggerFactory.createLogger(ScheduleIpuCacheJob.class);
16
17
	public void execute(JobExecutionContext context) throws JobExecutionException {
18
		try {
19
			Map xml = context.getMergedJobDataMap();
20
			new Thread(new Runnable() {
21
				@Override
22
				public void run() {
23
					try {
24
						IpuSpringNacosConfig config = SpringBeanUtil.getBean(IpuSpringNacosConfig.class);
25
						Map map = XmlUtil.ipuCacheXmlToMap((String) xml.get(config.getIpuCacheDataid()), "utf-8");
26
						logger.debug("map:" + map);
27
						logger.debug("为ipu-cache添加配置成功");
28
					} catch (Exception e) {
29
						failed();
30
					}
31
				}
32
			}).start();
33
34
		} catch (Exception e) {
35
			logger.error("为ipu-cache添加配置异常:" + e.getMessage());
36
		}
37
38
	}
39
40
	private void failed() {
41
		logger.error("error");
42
	}
43
44
}

+ 62 - 0
ipu-rest-demo/src/main/java/com/ai/ipu/server/demo/schedule/ScheduledTask.java

@ -0,0 +1,62 @@
1
package com.ai.ipu.server.demo.schedule;
2
3
import java.util.concurrent.ConcurrentHashMap;
4
import java.util.concurrent.ConcurrentMap;
5
6
import org.quartz.CronScheduleBuilder;  
7
import org.quartz.JobBuilder;
8
import org.quartz.JobDataMap;
9
import org.quartz.JobDetail;  
10
import org.quartz.Scheduler;
11
import org.quartz.SchedulerException;
12
import org.quartz.SchedulerFactory;  
13
import org.quartz.Trigger;  
14
import org.quartz.TriggerBuilder;  
15
import org.quartz.impl.StdSchedulerFactory;
16
import com.ai.ipu.basic.log.ILogger;
17
import com.ai.ipu.basic.log.IpuLoggerFactory;
18
  
19
public class ScheduledTask{  
20
	private static final ILogger logger = IpuLoggerFactory.createLogger(ScheduledTask.class);
21
	private static final ConcurrentMap<String, Scheduler> task = new ConcurrentHashMap<String, Scheduler>();
22
	
23
	public static void run(String cron, String dataId, String xml) 
24
    {	  
25
        // Define scheduler  
26
        SchedulerFactory sf = new StdSchedulerFactory();  
27
        Scheduler sched;
28
		try {
29
			if (task.containsKey(dataId))
30
			{
31
				sched = task.get(dataId);
32
				sched.clear();
33
			}
34
			else
35
			{
36
				sched = sf.getScheduler();
37
				task.put(dataId, sched);
38
			}
39
			// Define job  
40
			JobDataMap newJobDataMap = new JobDataMap();
41
			newJobDataMap.put(dataId, xml);
42
	        JobDetail job = JobBuilder.newJob(ScheduleIpuCacheJob.class)  
43
	                .withIdentity("update ipu-cache configaration", "group1")
44
	                .setJobData(newJobDataMap)
45
	                .build();  
46
	  
47
	        // Define trigger strategy  
48
	        Trigger trigger = TriggerBuilder.newTrigger()  
49
	                .withIdentity("trigger1", "group1")  
50
	                .withSchedule(CronScheduleBuilder.cronSchedule(cron))  
51
	                .build();  
52
	        sched.scheduleJob(job, trigger);  
53
	        
54
	        // Start the job  
55
	        sched.start();  
56
	        
57
		} catch (SchedulerException e) {
58
			logger.error(e.getMessage());
59
		}  
60
        
61
    } 
62
}  

+ 110 - 0
ipu-rest-demo/src/main/java/com/ai/ipu/server/demo/util/XmlUtil.java

@ -0,0 +1,110 @@
1
package com.ai.ipu.server.demo.util;
2
3
import java.util.ArrayList;
4
import java.util.HashMap;
5
6
import java.util.List;
7
import java.util.Map;
8
9
import com.ai.ipu.basic.string.StringUtil;
10
import com.ai.ipu.cache.config.IpuCacheConfig;
11
import com.ai.ipu.common.xml.Dom4jHelper;
12
import com.ai.ipu.dfs.s3.conf.IpuDfsConfig;
13
import com.ai.ipu.nosql.config.IpuNoSQLConfig;
14
import com.ai.ipu.nosql.util.MongoConstant;
15
16
public class XmlUtil {
17
18
	/**
19
     * @description 将ipu-s3的xml字符串转换成map
20
     * @param xml
21
     * @return Map
22
     * @throws Exception 
23
     */
24
    public static Map ipuS3XmlToMap(String xml, String charsetName) throws Exception {
25
        Dom4jHelper dh = new Dom4jHelper(xml, charsetName);
26
        
27
        return IpuDfsConfig.parseIpuConfig((HashMap<String, ?>) dh.getAll(), "nacos");
28
    }
29
    
30
    /**
31
     * @description 将ipu-cache的xml字符串转换成map
32
     * @param xml
33
     * @return Map
34
     * @throws Exception 
35
     */
36
    public static Map ipuCacheXmlToMap(String xml, String charsetName) throws Exception {
37
        Dom4jHelper dh = new Dom4jHelper(xml, charsetName);
38
        
39
        return IpuCacheConfig.parseIpuConfig((HashMap<String, ?>) dh.getAll(), "nacos");
40
    }
41
42
    /**
43
     * @description 将ipu-nosql的xml字符串转换成map
44
     * @param xml
45
     * @return Map
46
     * @throws Exception 
47
     */
48
    public static List<Map> ipuNosqlXmlToMap(String xml, String charsetName) throws Exception {
49
        Dom4jHelper dh = new Dom4jHelper(xml, charsetName);
50
        
51
        return IpuNoSQLConfig.parseIpuConfig((HashMap<String, ?>) dh.getAll(), "nacos");
52
    }
53
    
54
    /**
55
     * @description 将ipu-database的xml字符串转换成map
56
     * @param xml
57
     * @return Map
58
     * @throws Exception 
59
     */
60
    public static Map ipuDatabaseXmlToMap(String xml, String charsetName) throws Exception {
61
        Dom4jHelper dh = new Dom4jHelper(xml, charsetName);
62
        Map<String, ?> originData = dh.getAll();
63
        List<Map<String, Object>> configs = (List<Map<String, Object>>) originData.get("environments");
64
        Map cachesMap = new HashMap<String, Object>();
65
        Map<String, Object> cacheMap;
66
        List<Map<String, String>> cacheServer;
67
        Map<String, String> configAttr;
68
        /*循环缓存实例*/
69
        for (Map<String, Object> config : configs) {
70
            cacheMap = new HashMap<String, Object>();
71
            cacheServer = new ArrayList<Map<String, String>>();
72
            configAttr = new HashMap<String, String>();
73
            
74
            Map<String, String> cacheAttrMap = (Map<String, String>) config.get("environment" + Dom4jHelper.SUFFIX_ATTR);
75
            String datdbaseName = cacheAttrMap.get("id");
76
            List<Map<String, Object>> cacheList = (List<Map<String, Object>>)config.get("environment");
77
            String type = "";
78
            String driver = "";
79
            for(Map<String, Object> map : cacheList){
80
            	if(map.get("transactionManager_attr")!=null){
81
                    /*解析缓存实例的服务列表*/
82
                    Map<String, Object> serverMap = (Map<String, Object>)map.get("transactionManager_attr");
83
                    type = (String)serverMap.get("type");
84
                }
85
            	if(map.get("dataSource_attr")!=null){
86
                    /*解析缓存实例的服务列表*/
87
                    Map<String, Object> serverMap = (Map<String, Object>)map.get("dataSource_attr");
88
                    driver = (String)serverMap.get("type");
89
                }
90
            	if(map.get("dataSource")!=null){
91
                    /*解析缓存实例的服务列表*/
92
            		List<Map<String, Object>> serverList = (List<Map<String, Object>>)map.get("dataSource");
93
//                    List<Map<String, Object>> serverList = (List<Map<String, Object>>)serverMap.get("property_attr");
94
                    for(Map<String, Object> configValue : serverList){
95
                    	Map<String, Object> configMap = (Map<String, Object>)configValue.get("property_attr");
96
                    	configAttr.put((String)configMap.get("name"), (String)configMap.get("value"));
97
                    }
98
                                        
99
                }
100
                
101
            }            
102
            cacheMap.put("databaseName", datdbaseName+"1.0");
103
            cacheMap.put("type", type);
104
            cacheMap.put("property", configAttr);
105
            cacheMap.put("dataSource_driver", driver);
106
            cachesMap.put(datdbaseName, cacheMap);
107
        }
108
        return cachesMap;
109
    }
110
}