diff --git a/src/main/java/com/nis/domain/MaatXmlConfig.java b/src/main/java/com/nis/domain/MaatXmlConfig.java new file mode 100644 index 0000000..af34b9d --- /dev/null +++ b/src/main/java/com/nis/domain/MaatXmlConfig.java @@ -0,0 +1,37 @@ +package com.nis.domain; + +import java.io.Serializable; +import java.util.List; + +public class MaatXmlConfig implements Serializable { + + private static final long serialVersionUID = 1L; + private Integer service; + private List sequenceList; + private List expressionList; + + public Integer getService() { + return service; + } + + public void setService(Integer service) { + this.service = service; + } + + public List getSequenceList() { + return sequenceList; + } + + public void setSequenceList(List sequenceList) { + this.sequenceList = sequenceList; + } + + public List getExpressionList() { + return expressionList; + } + + public void setExpressionList(List expressionList) { + this.expressionList = expressionList; + } + +} diff --git a/src/main/java/com/nis/domain/MaatXmlExpr.java b/src/main/java/com/nis/domain/MaatXmlExpr.java new file mode 100644 index 0000000..545d99f --- /dev/null +++ b/src/main/java/com/nis/domain/MaatXmlExpr.java @@ -0,0 +1,36 @@ +package com.nis.domain; + +import java.io.Serializable; + +public class MaatXmlExpr implements Serializable { + + private static final long serialVersionUID = 1L; + private String keyExpression; + private String valueExpression; + private Integer redisDB; + + public String getKeyExpression() { + return keyExpression; + } + + public void setKeyExpression(String keyExpression) { + this.keyExpression = keyExpression; + } + + public String getValueExpression() { + return valueExpression; + } + + public void setValueExpression(String valueExpression) { + this.valueExpression = valueExpression; + } + + public Integer getRedisDB() { + return redisDB; + } + + public void setRedisDB(Integer redisDB) { + this.redisDB = redisDB; + } + +} diff --git a/src/main/java/com/nis/domain/MaatXmlSeq.java b/src/main/java/com/nis/domain/MaatXmlSeq.java new file mode 100644 index 0000000..e2c024a --- /dev/null +++ b/src/main/java/com/nis/domain/MaatXmlSeq.java @@ -0,0 +1,37 @@ +package com.nis.domain; + +import java.io.Serializable; + +public class MaatXmlSeq implements Serializable { + + private static final long serialVersionUID = 1L; + + private String sequenceKey; + private Integer operation; + private Integer redisDB; + + public String getSequenceKey() { + return sequenceKey; + } + + public void setSequenceKey(String sequenceKey) { + this.sequenceKey = sequenceKey; + } + + public Integer getOperation() { + return operation; + } + + public void setOperation(Integer operation) { + this.operation = operation; + } + + public Integer getRedisDB() { + return redisDB; + } + + public void setRedisDB(Integer redisDB) { + this.redisDB = redisDB; + } + +} diff --git a/src/main/java/com/nis/util/MaatXmlUtil.java b/src/main/java/com/nis/util/MaatXmlUtil.java new file mode 100644 index 0000000..eb9ff3b --- /dev/null +++ b/src/main/java/com/nis/util/MaatXmlUtil.java @@ -0,0 +1,5 @@ +package com.nis.util; + +public class MaatXmlUtil { + +} diff --git a/src/main/java/com/nis/util/ReadMaatXmlUtil.java b/src/main/java/com/nis/util/ReadMaatXmlUtil.java new file mode 100644 index 0000000..1f75a68 --- /dev/null +++ b/src/main/java/com/nis/util/ReadMaatXmlUtil.java @@ -0,0 +1,171 @@ +package com.nis.util; + +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.xml.transform.Source; +import javax.xml.transform.stream.StreamSource; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; +import javax.xml.validation.Validator; + +import org.dom4j.Document; +import org.dom4j.Element; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.SAXReader; +import org.dom4j.io.XMLWriter; +import org.dom4j.util.XMLErrorHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.nis.domain.MaatXmlConfig; +import com.nis.domain.MaatXmlExpr; +import com.nis.domain.MaatXmlSeq; + +/** + * + *

Title: ReadMaatXmlUtil

+ *

Description: 根据xml定义的规则来读取,目前每次加载都重新加载一次xml,后面稳定后会放到listener中,项目启动的时候加载一次

+ *

Company: IIE

+ * @author rkg + * @date 2018年5月17日 + * + */ +public class ReadMaatXmlUtil { + private static Logger logger = LoggerFactory.getLogger(ReadMaatXmlUtil.class); + private static String XMLPATH = "/maatXml/maat.xml"; + private static String XSDPATH = "/maatXml/maat.xsd"; + public static Map map = new HashMap(); + + static { + readXml(); + } + + private static List maatXmlConfigList = new ArrayList(); + + public static void main(String[] args) { + try { + // validateXmlByXSD(); + readXml(); + Set keySet = map.keySet(); + for (Integer key : keySet) { + MaatXmlConfig maatXmlConfig = map.get(key); + List expressionList = maatXmlConfig.getExpressionList(); + for (MaatXmlExpr maatXmlExpr : expressionList) { + System.out.println("service=" + key + " redisDB=" + maatXmlExpr.getRedisDB() + " key=" + + maatXmlExpr.getKeyExpression() + " value=" + maatXmlExpr.getValueExpression()); + } + List sequenceList = maatXmlConfig.getSequenceList(); + for (MaatXmlSeq maatXmlSeq : sequenceList) { + System.out.println("service=" + key + " redisDB=" + maatXmlSeq.getRedisDB() + " key=" + + maatXmlSeq.getSequenceKey() + " operation=" + maatXmlSeq.getOperation()); + } + } + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private static void readXml() { + try { + + InputStream resourceAsStream = ReadMaatXmlUtil.class.getResourceAsStream(XMLPATH); + SAXReader reader = new SAXReader(); + Document read = reader.read(resourceAsStream); + Element rootElement = read.getRootElement(); + if (rootElement != null && rootElement.elements().size() > 0) { + List elements = rootElement.elements(); + for (Element element : elements) { + String serviceStr = element.attribute("service").getValue(); + if (serviceStr != null && !serviceStr.trim().equals("")) { + String[] split = serviceStr.split(";"); + for (String service : split) { + if (serviceStr != null && !serviceStr.trim().equals("")) { + List seqList = new ArrayList(); + List sequencesEle = element.elements("sequences"); + for (Element seqEle : sequencesEle) { + MaatXmlSeq maatXmlSeq = new MaatXmlSeq(); + List eleList = seqEle.elements(); + for (Element ele : eleList) { + if (ele.getName().toLowerCase().equals("operation")) { + maatXmlSeq.setOperation(Integer.parseInt(ele.getTextTrim())); + } + if (ele.getName().toLowerCase().equals("redisdb")) { + maatXmlSeq.setRedisDB(Integer.parseInt(ele.getTextTrim())); + } + if (ele.getName().toLowerCase().equals("sequencekey")) { + maatXmlSeq.setSequenceKey(ele.getTextTrim()); + } + } + seqList.add(maatXmlSeq); + } + List exprList = new ArrayList(); + List expressionsEle = element.elements("expressions"); + for (Element exprEle : expressionsEle) { + MaatXmlExpr maatXmlExpr = new MaatXmlExpr(); + List eleList = exprEle.elements(); + for (Element ele : eleList) { + if (ele.getName().toLowerCase().equals("keyexpression")) { + maatXmlExpr.setKeyExpression(ele.getTextTrim()); + } + if (ele.getName().toLowerCase().equals("valueexpression")) { + maatXmlExpr.setValueExpression(ele.getTextTrim()); + } + if (ele.getName().toLowerCase().equals("redisdb")) { + maatXmlExpr.setRedisDB(Integer.parseInt(ele.getTextTrim())); + } + } + exprList.add(maatXmlExpr); + } + MaatXmlConfig maatXmlConfig = new MaatXmlConfig(); + maatXmlConfig.setService(Integer.parseInt(service)); + maatXmlConfig.setExpressionList(exprList); + maatXmlConfig.setSequenceList(seqList); + map.put(Integer.parseInt(service.trim()), maatXmlConfig); + } + + } + + } + } + } + } catch (Exception e) { + logger.error("加载maat.xml失败", e); + } + } + + public static MaatXmlConfig getMaatConfigByService(int service) { + return map.get(service); + } + + private static void validateXmlByXSD() throws Exception { + SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); + + URL resource = ReadMaatXmlUtil.class.getResource(XSDPATH); + Schema xsdSchema = schemaFactory.newSchema(resource); + Validator newValidator = xsdSchema.newValidator(); + + XMLErrorHandler xmlErrorHandler = new XMLErrorHandler(); + newValidator.setErrorHandler(xmlErrorHandler); + InputStream resourceAsStream = ReadMaatXmlUtil.class.getResourceAsStream(XMLPATH); + + Source source = new StreamSource(resourceAsStream); + newValidator.validate(source); + XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint()); + if (xmlErrorHandler.getErrors().hasContent()) { + System.out.println("校验xml失败"); + writer.write(xmlErrorHandler.getErrors()); + } else { + System.out.println("校验xml成功"); + } + + } + +} diff --git a/src/main/java/com/nis/web/controller/restful/ConfigSourcesController.java b/src/main/java/com/nis/web/controller/restful/ConfigSourcesController.java index 0287c6e..7a01598 100644 --- a/src/main/java/com/nis/web/controller/restful/ConfigSourcesController.java +++ b/src/main/java/com/nis/web/controller/restful/ConfigSourcesController.java @@ -2,6 +2,7 @@ package com.nis.web.controller.restful; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -26,7 +27,7 @@ import com.nis.util.StringUtils; import com.nis.web.controller.BaseRestController; import com.nis.web.service.SaveRequestLogThread; import com.nis.web.service.ServicesRequestLogService; -import com.nis.web.service.restful.TestRedisService; +import com.nis.web.service.restful.ConfigRedisService; import com.nis.web.service.restful.ConfigSourcesService; import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.ApiOperation; @@ -50,14 +51,22 @@ public class ConfigSourcesController extends BaseRestController { protected ServicesRequestLogService servicesRequestLogService; @Autowired - TestRedisService testRedisServiceimpl; + ConfigRedisService configRedisServiceimpl; @RequestMapping(value = "/save", method = RequestMethod.GET) @ApiOperation(value = "test redis", httpMethod = "GET", response = Map.class, notes = "测试redis事务的crontroller") @ApiParam(value = "test redis", name = "测试redis事务的crontroller", required = true) - public String testRedis() { + public String testRedis(String id) { try { - testRedisServiceimpl.saveConfigCompile(); + Map map = new HashMap(); + map.put("cfg_id", id); + map.put("is_valid", "1"); + map.put("dst_file", "/home/1234/"); + map.put("dst_file_md5", "fasdfdasfsdafdsafadsf"); + map.put("time_stamp", new Date().getTime() + ""); + map.put("level", "20"); + map.put("file_id",id); + configRedisServiceimpl.saveConfigYSPDemoCompile(96,map); return "ok"; } catch (Exception e) { e.printStackTrace(); @@ -118,7 +127,7 @@ public class ConfigSourcesController extends BaseRestController { } return compileServiceResponse(thread, System.currentTimeMillis() - start, request, response, - "编译配置数据插入成功" + sb.toString(), Constants.IS_DEBUG?configSource:null); + "编译配置数据插入成功" + sb.toString(), Constants.IS_DEBUG ? configSource : null); } @RequestMapping(value = "/cfg/v1/configSources", method = RequestMethod.PUT) @@ -183,7 +192,7 @@ public class ConfigSourcesController extends BaseRestController { RestBusinessCode.missing_args.getValue()); } return compileServiceResponse(thread, System.currentTimeMillis() - start, request, response, - "编译配置修改成功" + sb.toString(), Constants.IS_DEBUG?configSource:null); + "编译配置修改成功" + sb.toString(), Constants.IS_DEBUG ? configSource : null); } @RequestMapping(value = "/cfg/v1/configModifySources", method = RequestMethod.PUT) @@ -303,7 +312,7 @@ public class ConfigSourcesController extends BaseRestController { } return compileServiceResponse(thread, System.currentTimeMillis() - start, request, response, - "修改编译配置数据成功" + sb.toString(), Constants.IS_DEBUG?configSource:null); + "修改编译配置数据成功" + sb.toString(), Constants.IS_DEBUG ? configSource : null); } private void validateConfigSource(SaveRequestLogThread thread, long start, ConfigSource configSource) { diff --git a/src/main/java/com/nis/web/service/restful/ConfigRedisService.java b/src/main/java/com/nis/web/service/restful/ConfigRedisService.java new file mode 100644 index 0000000..89e8c84 --- /dev/null +++ b/src/main/java/com/nis/web/service/restful/ConfigRedisService.java @@ -0,0 +1,16 @@ +package com.nis.web.service.restful; + +import java.util.Map; + +/** + * + *

Title: ConfigRedisService

+ *

Description: 保存配置到redis中

+ *

Company: IIE

+ * @author rkg + * @date 2018年5月17日 + * + */ +public interface ConfigRedisService { + public void saveConfigYSPDemoCompile(int service, Map map); +} diff --git a/src/main/java/com/nis/web/service/restful/ConfigRedisServiceimpl.java b/src/main/java/com/nis/web/service/restful/ConfigRedisServiceimpl.java new file mode 100644 index 0000000..42f3aed --- /dev/null +++ b/src/main/java/com/nis/web/service/restful/ConfigRedisServiceimpl.java @@ -0,0 +1,103 @@ +package com.nis.web.service.restful; + +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import com.nis.datasource.DynamicJedisDataBase; +import com.nis.domain.MaatXmlConfig; +import com.nis.domain.MaatXmlExpr; +import com.nis.domain.MaatXmlSeq; +import com.nis.util.ReadMaatXmlUtil; +import com.nis.web.dao.impl.BaseRedisDao; + +@Service("configRedisServiceimpl") +public class ConfigRedisServiceimpl extends BaseRedisDao implements ConfigRedisService { + @Transactional + public void saveConfigYSPDemoCompile(int service, Map map) { + if (map != null && map.size() > 0) { + MaatXmlConfig maatXmlConfig = ReadMaatXmlUtil.getMaatConfigByService(service); + if (maatXmlConfig != null) { + List expressionList = maatXmlConfig.getExpressionList(); + for (MaatXmlExpr maatXmlExpr : expressionList) { + StringBuffer keyBF = new StringBuffer(); + String[] keySplit = maatXmlExpr.getKeyExpression().split(";"); + for (String keyStr : keySplit) { + if (!StringUtils.isEmpty(keyStr) && keyStr.trim().startsWith("[")) { + keyStr = keyStr.trim().replace("[", "").replace("]", ""); + keyBF.append(map.get(keyStr)); + } else { + keyBF.append(keyStr.trim()); + } + } + StringBuffer valBF = new StringBuffer(); + //valBF.append("\""); + String[] valSplit = maatXmlExpr.getValueExpression().split(";"); + for (String valStr : valSplit) { + if (!StringUtils.isEmpty(valStr) && valStr.trim().startsWith("[")) { + valStr = valStr.trim().replace("[", "").replace("]", ""); + valBF.append(map.get(valStr)); + } else if (valStr.equals(" ")) { + valBF.append(" "); + } else { + valBF.append(valStr.trim()); + } + } + //valBF.append("\""); + DynamicJedisDataBase.setRedisDataBase(maatXmlExpr.getRedisDB(), redisTemplate); + // redisTemplate.boundValueOps(keyBF.toString()).append(valBF.toString()); + System.out.println(keyBF.toString()); + System.out.println(valBF.toString()); + redisTemplate.opsForValue().set(keyBF.toString(), valBF.toString()); + //redisTemplate.boundValueOps(keyBF.toString()).set(valBF.toString()); + + } + List seqList = maatXmlConfig.getSequenceList(); + for (MaatXmlSeq maatXmlSeq : seqList) { + DynamicJedisDataBase.setRedisDataBase(maatXmlSeq.getRedisDB(), redisTemplate); + String seqKey = maatXmlSeq.getSequenceKey(); + Integer operation = maatXmlSeq.getOperation(); + if (operation == 1) { + redisTemplate.boundValueOps(seqKey).increment(1); + } + } + } + } + } + + public static void main(String[] args) { + System.out.println("\\t"); + } + + + + public void test() { + + DynamicJedisDataBase.setRedisDataBase(2, redisTemplate); + for (int i = 0; i < 10; i++) { + redisTemplate.boundZSetOps("1").add("a" + i, i); + if (i == 5) { + // int a = 1 / 0; + } + } + // 切换redis数据库 + DynamicJedisDataBase.setRedisDataBase(3, redisTemplate); + for (int i = 10; i < 20; i++) { + redisTemplate.boundZSetOps("1").add("a" + i, i); + if (i == 5) { + // int a = 1 / 0; + } + } + DynamicJedisDataBase.setRedisDataBase(4, redisTemplate); + for (int i = 20; i < 30; i++) { + redisTemplate.boundZSetOps("1").add("a" + i, i); + if (i == 25) { + int a = 1 / 0; + } + } + } + +} diff --git a/src/main/java/com/nis/web/service/restful/TestRedisService.java b/src/main/java/com/nis/web/service/restful/TestRedisService.java deleted file mode 100644 index cbc5b28..0000000 --- a/src/main/java/com/nis/web/service/restful/TestRedisService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.nis.web.service.restful; - -/** - * - *

Title: TestRedisService

- *

Description: 测试redis事务

- *

Company: IIE

- * @author rkg - * @date 2018年5月17日 - * - */ -public interface TestRedisService { - public void saveConfigCompile(); -} diff --git a/src/main/java/com/nis/web/service/restful/TestRedisServiceimpl.java b/src/main/java/com/nis/web/service/restful/TestRedisServiceimpl.java deleted file mode 100644 index ccf221c..0000000 --- a/src/main/java/com/nis/web/service/restful/TestRedisServiceimpl.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.nis.web.service.restful; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.nis.datasource.DynamicJedisDataBase; -import com.nis.web.dao.impl.BaseRedisDao; - -@Service("testRedisServiceimpl") -public class TestRedisServiceimpl extends BaseRedisDao implements TestRedisService { - @Transactional - public void saveConfigCompile() { - DynamicJedisDataBase.setRedisDataBase(2, redisTemplate); - for (int i = 0; i < 10; i++) { - redisTemplate.boundZSetOps("1").add("a" + i, i); - if (i == 5) { - // int a = 1 / 0; - } - } - // 切换redis数据库 - DynamicJedisDataBase.setRedisDataBase(3, redisTemplate); - for (int i = 10; i < 20; i++) { - redisTemplate.boundZSetOps("1").add("a" + i, i); - if (i == 5) { - // int a = 1 / 0; - } - } - DynamicJedisDataBase.setRedisDataBase(4, redisTemplate); - for (int i = 20; i < 30; i++) { - redisTemplate.boundZSetOps("1").add("a" + i, i); - if (i == 25) { - int a = 1 / 0; - } - } - } -} diff --git a/src/main/resources/maatXml/maat.xml b/src/main/resources/maatXml/maat.xml index 7a72ce1..1e73f1f 100644 --- a/src/main/resources/maatXml/maat.xml +++ b/src/main/resources/maatXml/maat.xml @@ -1,12 +1,13 @@ - - + - file_index_info,[cfg_id] - [cfg_id],\t,[is_valid],\t,[dst_file],\t,[dst_file_md5],\t,[time_stamp],$nbsp,[level],\t,[file_id]\n + file_index_info;,;[cfg_id] + [cfg_id];\t;[is_valid];\t;[dst_file];\t;[dst_file_md5];\t;[time_stamp];&nbsp;[level];\t;[file_id];\n + 2 diff --git a/src/main/resources/maatXml/maat.xsd b/src/main/resources/maatXml/maat.xsd index 67c44ef..ba5be01 100644 --- a/src/main/resources/maatXml/maat.xsd +++ b/src/main/resources/maatXml/maat.xsd @@ -12,13 +12,6 @@ - - - - - - - @@ -77,7 +70,7 @@ + 每个属性间用分号分隔,空格用&nbsp表示]]> @@ -86,7 +79,7 @@ + 每个属性间用分号分隔,空格用&nbsp表示]]> @@ -107,6 +100,15 @@ + + + + + + + + + diff --git a/src/test/java/com/nis/test/RedisTest.java b/src/test/java/com/nis/test/RedisTest.java index 6a82a8e..4dcb01d 100644 --- a/src/test/java/com/nis/test/RedisTest.java +++ b/src/test/java/com/nis/test/RedisTest.java @@ -8,7 +8,7 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; -import com.nis.web.service.restful.TestRedisService; +import com.nis.web.service.restful.ConfigRedisService; @WebAppConfiguration @RunWith(SpringJUnit4ClassRunner.class) @@ -21,11 +21,11 @@ import com.nis.web.service.restful.TestRedisService; public class RedisTest { @Autowired - TestRedisService configService; + ConfigRedisService configService; @Test public void testTrans() { - configService.saveConfigCompile(); + //configService.saveConfigCompile(); } }