需求:对比规则表和累计表,符合条件的进行写入文件。
程序结构
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.htjf</groupId> <artifactId>iot_ana</artifactId> <version>0.0.1-SNAPSHOT</version> <name>iot_ana</name> <url>http://maven.apache.org</url> <repositories> <repository> <id>alimaven</id> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> </repository> <repository> <id>hortonworks</id> <url>http://repo.hortonworks.com/content/groups/public/</url> </repository> </repositories> <dependencies> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <!-- <scope>test</scope> --> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.1.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> </project>
ana包下的两个java文件(主类包)
AnalysisBean
package com.htjf.ana; public class AnalysisBean { private String iotId;//iot设备ID private String ruleId;//规则唯一id private String iotRule;//iot规则 private String matchType;//匹配规则0:完全匹配,1:模糊匹配 private String imei; private String iotType;//可能是host/ua/apn... private String dt;//相差时间(LT-FT) public AnalysisBean(String iotId, String ruleId, String iotRule, String matchType) { super(); this.iotId = iotId; this.ruleId = ruleId; this.iotRule = iotRule; this.matchType = matchType; } public void setData(String imei, String iotType, String dt) { this.imei = imei; this.iotType = iotType; this.dt = dt; } public AnalysisBean() { super(); } public String getIotId() { return iotId; } public void setIotId(String iotId) { this.iotId = iotId; } public String getRuleId() { return ruleId; } public void setRuleId(String ruleId) { this.ruleId = ruleId; } public String getIotRule() { return iotRule; } public void setIotRule(String iotRule) { this.iotRule = iotRule; } public String getMatchType() { return matchType; } public void setMatchType(String matchType) { this.matchType = matchType; } public String getImei() { return imei; } public void setImei(String imei) { this.imei = imei; } public String getIotType() { return iotType; } public void setIotType(String iotType) { this.iotType = iotType; } public String getDt() { return dt; } public void setDt(String dt) { this.dt = dt; } @Override public String toString() { return iotId + "," + ruleId + "," +matchType+ "," + imei + "," + dt+ ""; } }
IotAllAnalysis(主程序)
package com.htjf.ana; import java.io.File; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; import com.htjf.util.ConfigUtil; import com.htjf.util.DBHiberUtil; import com.htjf.util.DateUtil; import com.htjf.util.FileUtil; public class IotAllAnalysis { private static Logger logger = Logger.getLogger(IotAllAnalysis.class); private Map<String ,AnalysisBean>actuMap=new HashMap<String,AnalysisBean>(); private Map<String ,AnalysisBean>likeMap=new HashMap<String,AnalysisBean>(); private long maxFileSize = ConfigUtil.getMaxFileSise();//限制文件大小 private int maxCountRow = ConfigUtil.getMaxCountRow();//限制行数大小 private String initFileEndName = ConfigUtil.getInitFileEndName();//文件的后缀名(.temp) private String fileEndName = ConfigUtil.getFileEndName();//文件的后缀名(.csv) public IotAllAnalysis(){ super(); } public void doAction(){ String[] dataList = ConfigUtil.getDataType().split(","); for(int i =0;i<dataList.length;i++){ String dataType = dataList[i].toString(); loadRule(dataType); readAllData(dataType); } } /** * 匹配规则 * 精准优先(当精确匹配到不再匹配模糊) * 模糊之后 * @param iotType * @return */ public AnalysisBean matchIotType(String iotType){ if(null==iotType||"".equals(iotType)){ return null; } iotType = iotType.toUpperCase();//转化为大写 AnalysisBean analysisBean = null; for (String actuMapStr : actuMap.keySet()) { if(iotType.equals(actuMapStr)){ analysisBean = actuMap.get(actuMapStr); break; } } if(null!=analysisBean){ return analysisBean; } for(String likeMapStr : likeMap.keySet()) { if(iotType.contains(likeMapStr)){ return likeMap.get(iotType); } } return null; } /** * 读取累计表的数据 */ public void readAllData(String dataType){ Connection conn = null; Statement stmt = null; ResultSet rs = null; List<AnalysisBean> list = new ArrayList<>(); File writeFile = null; String sql = ConfigUtil.getQueryDataType(dataType); logger.info("查询的sql语句"+sql); try { conn = DBHiberUtil.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); String initFilePathName = ConfigUtil.getFilePath()+File.separator+dataType+File.separator+dataType+"_"+ DateUtil.nowTime()+"_"+ConfigUtil.getRandomNum()+initFileEndName; writeFile = new File(initFilePathName); //文件路径名 logger.info("===>生成文件"+writeFile.getName()); long start = System.currentTimeMillis(); long countTime = 0; long countrow = 0; while(rs.next()){ countrow++; String imei = rs.getString("imei"); String iotType = rs.getString("iotType");//如果接入多个这里需要修改 String dt = rs.getString("dt"); //获取每一行数据-匹配规则 AnalysisBean analysisBean = matchIotType(iotType); if(null!=analysisBean){ //匹配到数据 analysisBean.setData(imei, iotType, dt); list.add(analysisBean); try { if(list.size()%maxCountRow==0){ countTime++; if(ConfigUtil.isAddFile()){ if(writeFile.length()>maxFileSize){ //从.termp临时文件转为.csv后缀文件 writeFile = FileUtil.rename(writeFile, initFileEndName, fileEndName); logger.info(writeFile.getName()+",大于maxFileSize限制的"+(maxFileSize/1024/1024)+"M,需重新创建文件"); long end = System.currentTimeMillis(); logger.info("生成一个文件耗时:" + ((end - start)/1000) +" 秒"); start = end; initFilePathName = ConfigUtil.getFilePath()+File.separator+dataType+File.separator+dataType+"_"+ DateUtil.nowTime()+"_"+ConfigUtil.getRandomNum()+initFileEndName; writeFile = new File(initFilePathName); //文件路径名 logger.info("===>生成文件"+writeFile.getName()); } FileUtils.writeLines(writeFile, list,true); logger.info("第"+countrow+"个,第"+countTime+"批次===>匹配到数据大于"+maxCountRow+"条了,并且写入了-->"+writeFile.getName()); }else{ initFilePathName = ConfigUtil.getFilePath()+File.separator+dataType+File.separator+dataType+"_"+ DateUtil.nowTime()+"_"+ConfigUtil.getRandomNum()+initFileEndName; File file = new File(initFilePathName); FileUtils.writeLines(file, list); file = FileUtil.rename(file, initFileEndName, fileEndName); } list = new ArrayList<>();////清空数据 } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } try { if(ConfigUtil.isAddFile()){ logger.info("===>最后数据:"+list.size()+",并且写入了文件-->."+writeFile.getName()); FileUtils.writeLines(writeFile, list,true); }else{ initFilePathName = ConfigUtil.getFilePath()+File.separator+dataType+File.separator+dataType+"_"+ DateUtil.nowTime()+"_"+ConfigUtil.getRandomNum()+initFileEndName; File file = new File(initFilePathName); FileUtils.writeLines(file, list); file = FileUtil.rename(file, initFileEndName, fileEndName); } list = new ArrayList<>();////清空数据 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //最后不符合限制大小文件也需要转换后缀名 writeFile = FileUtil.rename(writeFile, initFileEndName, fileEndName); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); logger.error("查询读取累计表的数据sql语句出错!请检查"+e); }finally{ try { DBHiberUtil.close(rs, stmt, conn); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 读取规则表数据 */ public void loadRule(String dataType){ logger.info("准备载入"+dataType+"规则数据!!!"); Connection conn = null; Statement stmt = null; ResultSet rs = null; String sql = ConfigUtil.getQueryRule(dataType); logger.info("查询的sql语句"+sql); try { conn = DBHiberUtil.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); while (rs.next()) { String iot_id = rs.getString("iot_id"); String rule_id = rs.getString("rule_id"); String iot_rule = rs.getString("iot_rule"); String use_way = rs.getString("use_way"); iot_rule = iot_rule.toUpperCase();//转化为大写 if("0".equals(use_way)){ //精确匹配规则 AnalysisBean analysisBean = new AnalysisBean(iot_id, rule_id, iot_rule, use_way); actuMap.put(iot_rule, analysisBean); }else if("1".equals(use_way)){ iot_rule = iot_rule.replace("%", ""); //模糊匹配规则 AnalysisBean analysisBean = new AnalysisBean(iot_id, rule_id, iot_rule, use_way); likeMap.put(iot_rule, analysisBean); } } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); logger.error("查询载入规则sql语句出错!请检查"+e); }finally{ try { DBHiberUtil.close(rs, stmt, conn); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) { IotAllAnalysis allAnalysis = new IotAllAnalysis(); allAnalysis.doAction(); } }
util包(工具包)
ConfigureUtil
package com.htjf.util; import java.util.Map; import org.apache.log4j.Logger; /** * 系统配置类 * @author Jiomer * */ public class ConfigureUtil { private static Logger logger = Logger.getLogger(ConfigureUtil.class); public static ConfigureUtil instance = null; @SuppressWarnings("rawtypes") private Map configureMap = null; public ConfigureUtil() { String file = ClassLoader.getSystemResource("").getPath()+"cfg.xml";//正式环境 // String file = this.getClass().getResource("/").getPath()+"cfg.xml";//测试环境 // String file = ConfigureUtil.class.getClassLoader().getResource("cfg1.xml").getPath();//测试环境 System.out.println(file); logger.info("获取了cfg.xml路径:"+file); try { configureMap = new XmlSupportImpl().readDocument(file); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public ConfigureUtil(String isHiber) { String file = this.getClass().getResource("/").getPath()+"cfghiber.xml"; try { configureMap = new XmlSupportImpl().readDocument(file); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /* * (non-Javadoc) * @see proc.gmcc.sso.config.Configure#getValue(java.lang.String) */ public String getValue(String key) { return (String) configureMap.get(key); } public static ConfigureUtil getInstance(){ if(null== instance ){ synchronized(ConfigureUtil.class){ if(null== instance){ instance = new ConfigureUtil (); } } } return instance; } public static void main(String[] args) { System.out.println(new ConfigureUtil().getValue("driverURL")); } }
ConfigUtil
package com.htjf.util; import java.io.File; import org.apache.log4j.Logger; public class ConfigUtil { private static Logger logger = Logger.getLogger(ConfigUtil.class); public static String getXMLConfigValueBYName(String name) { return ConfigureUtil.getInstance().getValue(name); } /** * 获取 * @return */ public static boolean isAddFile(){ String isAddFile = getXMLConfigValueBYName("IS_ADD"); return "true".equals(isAddFile); } /** * 获取 * @return */ public static int getMaxCountRow(){ String maxCountRow = getXMLConfigValueBYName("MAX_COUNT_ROW"); int intMaxCountRow = Integer.parseInt(maxCountRow); return intMaxCountRow; } /** * 初始生成文件的后缀名(.temp) * @return */ public static String getInitFileEndName(){ String initFileEndName = getXMLConfigValueBYName("INIT_FILE_ENDNAME"); return initFileEndName; } /** * 最终生成文件的后缀名(.csv) * @return */ public static String getFileEndName(){ String fileEndName = getXMLConfigValueBYName("FILE_ENDNAME"); return fileEndName; } /** * 获取存放生成文件的本地路径 * @return */ public static String getFilePath(){ String filePath = getXMLConfigValueBYName("FILE_BASE_PATH"); File file = new File(filePath); if(!file.exists()&&!file .isDirectory()){ file.mkdir(); return filePath; } // logger.info("获取filePath:"+filePath); return filePath; } /** * 获取限制文件大小 * @return */ public static long getMaxFileSise(){ String strMaxFileSise = getXMLConfigValueBYName("MAX_FILE_SIZE"); long longMaxFileSise = Long.parseLong(strMaxFileSise)*1024*1024; logger.info("获取文件限制大小:"+strMaxFileSise+"(MB)"); return longMaxFileSise; } /** * 生成5位随机数 * @return */ public static int getRandomNum(){ int randomNum = (int)((Math.random()*9+1)*10000); return randomNum; } /** * 获取需要分析的类型 * @return */ public static String getDataType(){ String dataType = getXMLConfigValueBYName("DATA_TYPE"); //全部转成大写 dataType = dataType.toUpperCase(); return dataType; } /** * 获取累计表的sql * @return */ public static String getQueryDataType(String dataType){ String sql = getXMLConfigValueBYName("QUERY_"+dataType+"_DATA"); return sql; } /** * 获取规则表的sql * @return */ public static String getQueryRule(String dataType){ String sql = getXMLConfigValueBYName("QUERY_"+dataType+"_RULE"); return sql; } public static void main(String[] args) { System.out.println(getMaxFileSise()); } }
DateUtil
package com.htjf.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateUtil { /** * 获取当前天的前一天 * @return */ public static String proFormatDay(){ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); Date today = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(today); calendar.add(Calendar.DAY_OF_MONTH, -1); String proDay = simpleDateFormat.format(calendar.getTime()).toString(); return proDay; } /** * 获取当天 yyyymmdd * @return */ public static String formatDay(){ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); Date date = new Date(); String today = simpleDateFormat.format(date).toString(); return today; } /** * 获取当前时间yyyyMMddHHmmss * @return */ public static String nowTime(){ SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat("yyyyMMddHHmmss"); Date currentTime1 = new java.util.Date(); String nowTime = simpleDateFormat.format(currentTime1).toString(); return nowTime; } }
DBHiberUtil
package com.htjf.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; /** * 数据库连接相关操作类 * @author Jiomer * */ public class DBHiberUtil { //private static final transient Log log = LogFactory.getLog(DBHiberUtil.class); private static Logger logger = Logger.getLogger(DBHiberUtil.class); /** * 获取数据库链接 * @return */ public static Connection getConnection() { Connection conn = null; ConfigureUtil configUtil = new ConfigureUtil(); String driverURL = configUtil.getValue("driverURL").trim(); String dataBaseAccount = configUtil.getValue("dataBaseAccount").trim(); String dataBasePassWord = configUtil.getValue("dataBasePassWord").trim();; //System.out.println("getConnection-----"+driverURL+"--"+dataBaseAccount+"--"+dataBasePassWord); try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection(driverURL, dataBaseAccount, dataBasePassWord); //System.out.println("Connection 开启!"); logger.info("Connection 开启!"); } catch (Exception e) { logger.error("Connection 失败"+e); e.printStackTrace(); } return conn; } /** * 断开数据库连接 * @param conn * @throws SQLException */ public static void close(Connection conn) throws SQLException { if (conn != null) { conn.close(); } } /** * 断开数据库连接 * @param conn */ public static void closeQuiet(Connection conn) { try { close(conn); } catch (Exception e) { e.printStackTrace(); } } /** * 关闭查询结果集对象 * @param rs */ public static void closeQuiet(ResultSet rs) { try { close(rs); } catch (Exception e) { e.printStackTrace(); } } /** * 关闭查询结果集对象 * @param rs * @throws SQLException */ public static void close(ResultSet rs) throws SQLException { if (rs != null) { rs.close(); } } /** * 关闭指定Statement对象 * @param stmt */ public static void closeQuiet(Statement stmt) { try { close(stmt); } catch (Exception e) { e.printStackTrace(); } } /** * 关闭指定Statement对象 * @param stmt * @throws SQLException */ public static void close(Statement stmt) throws SQLException { if (stmt != null) { stmt.close(); } } /** * 关闭指定Statement对象和ResultSet对象 * @param rs * @param stmt */ public static void closeQuiet(ResultSet rs, Statement stmt) { closeQuiet(rs); closeQuiet(stmt); } /** * 关闭指定Statement对象和ResultSet对象 * @param rs * @param stmt * @throws SQLException */ public static void close(ResultSet rs, Statement stmt) throws SQLException { close(rs); close(stmt); } /** * 关闭指定Statement对象和断开数据库连接 * @param stmt * @param conn */ public static void closeQuiet(Statement stmt, Connection conn) { closeQuiet(stmt); closeQuiet(conn); } /** * 关闭指定Statement对象和断开数据库链接 * @param stmt * @param conn * @throws SQLException */ public static void close(Statement stmt, Connection conn) throws SQLException { close(stmt); close(conn); } /** * 关闭指定ResultSet、Statement对象和断开数据库链接 * @param rs * @param stmt * @param conn */ public static void closeQuiet(ResultSet rs, Statement stmt, Connection conn) { closeQuiet(rs); closeQuiet(stmt, conn); } /** * 关闭指定ResultSet、Statement对象和断开数据库链接 * @param rs * @param stmt * @param conn * @throws SQLException */ public static void close(ResultSet rs, Statement stmt, Connection conn) throws SQLException { close(rs); close(stmt, conn); logger.info("Connection 关闭!"); } /** * 获取表中所有字段名称 * @param tableName 表名 * @return */ public static List<String> getColumnNames(String tableName){ List<String> columnNames = new ArrayList<>(); Connection connection = null; PreparedStatement ps = null; ResultSet rs = null; ResultSetMetaData rsmd = null; String sql = "select * from "+tableName; try { connection = DBHiberUtil.getConnection(); ps = connection.prepareStatement(sql); rs = ps.executeQuery(sql); rsmd = rs.getMetaData(); for (int i = 1; i <=rsmd.getColumnCount() ; i++) { columnNames.add(rsmd.getColumnName(i)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { connection.close(); ps.close(); rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return columnNames; } }
FileUtil
package com.htjf.util; import java.io.File; public class FileUtil { /** * 文件处理前重命名(以扩展名替换的形式) * @param srcFile 需要重命名的文件 * @param tar 重命名目标字符串 * @param rep 替换字符串 * @return 重命名后文件 */ public static File rename(File srcFile, String tar, String rep) { String perMatchFileName = srcFile.getPath().replace(tar, rep); File newNameFile = new File(perMatchFileName); srcFile.renameTo(newNameFile); return newNameFile; } }
ParseXmlUtil
package com.htjf.util; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * * @author Jiomer * */ public class ParseXmlUtil { private static Logger logger = Logger.getLogger(ParseXmlUtil.class); private static ParseXmlUtil instance = null; private Map<String,String> configureMap = null; private Document doc=null; private String path= ClassLoader.getSystemResource("").getPath() + "cfg.xml"; // private String path2 = this.getClass().getResource("/").getPath()+"cfg.xml"; // private String path3 = ConfigureUtil.class.getClassLoader().getResource("cfg.xml").getPath();//测试环境 private ParseXmlUtil (){ try { //打包成jar包,直接读取jar包同级目录的包外配置文件 // path= "cfg.xml"; reLoadData(); } catch (Exception e) { e.printStackTrace(); } } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public Document getDoc() { return doc; } public void setDoc(Document doc) { this.doc = doc; } public void reLoadData(){ try { logger.info("加载配置文件"+getPath()); doc = new SAXReader().read(new File(getPath())); configureMap=initLoadConfig(); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static ParseXmlUtil getInstance(){ if(null== instance ){ synchronized(ParseXmlUtil.class){ if(null== instance){ instance = new ParseXmlUtil (); } } } return instance; } /** * 指定配置文件目录初始化文件加 * @param path * @return */ private Map<String,String> initLoadConfig(){ Map<String,String> map =new HashMap<String,String>(); try { Element root = doc.getRootElement(); @SuppressWarnings("unchecked") List<Element> list = root.elements(); for(Element actionNode : list) { map.put(actionNode.getName(),actionNode.getTextTrim()); } return map; } catch (Exception e) { e.printStackTrace(); return null; } } /** * @param name * @return */ public String getConfigValueBYName(String name){ return configureMap.get(name); } }
XmlSupport
package com.htjf.util; import java.util.Map; import org.dom4j.Document; /** * @author Jiomer */ public interface XmlSupport { /** * 创建xml文件 * @return */ public Document createDocument(); /** * 读xml文件 * @param file * @return * @throws Exception */ public Map readDocument(String file)throws Exception; /** * 写xml文件 * @throws Exception */ public void writerDocument() throws Exception; /** * 更新xml文件 */ public void updateDocument() ; }
XmlSupportImpl
package com.htjf.util; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** * * @author Jiomer * */ public class XmlSupportImpl implements XmlSupport{ @Override public Document createDocument() { // TODO Auto-generated method stub Document document = DocumentHelper.createDocument(); Element rootElement = document.addElement("root"); Element uploadFileElement = rootElement.addElement("uploadFile"); Element path = uploadFileElement.addElement("path"); path.setText("/hjtInfoUpload/"); Element size = uploadFileElement.addElement("size"); size.setText("10240"); Element type = uploadFileElement.addElement("type"); type.setText("zip,rar,png,jpg,gif"); return document; } @Override public Map readDocument(String file) throws Exception { // TODO Auto-generated method stub Map map = new HashMap(); SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new FileInputStream(new File(file))); Element root = document.getRootElement(); List list = root.elements(); for(int i=0;i<list.size();i++){ Element ele = (Element) list.get(i); map.put(ele.getName(), ele.getText()); } return map; } @Override public void writerDocument() throws Exception { // TODO Auto-generated method stub OutputFormat of = new OutputFormat(" ", true); XMLWriter xmlWriter = new XMLWriter(new FileWriter("hjt_info.xml"), of); //LoggerUtil.info("XmlSupportImpl",new File("hjt_info.xml").getAbsolutePath()); xmlWriter.write(this.createDocument()); xmlWriter.close(); } @Override public void updateDocument() { // TODO Auto-generated method stub } }
log4j.properties
log4j.rootLogger=stdout,ERROR,logfile #\u8f93\u51fa\u5230\u63a7\u5236\u53f0# log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Threshold=INFO log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %d %-5p [%-8t] [%-17c{1}]-%m%n #\u8f93\u51fa\u5230\u9879\u76ee\u6587\u4ef6\u4e0b# log4j.appender.logfile = org.apache.log4j.DailyRollingFileAppender log4j.appender.logfile.File = ./logs/info_log.log log4j.appender.logfile.Append = true log4j.appender.logfile.Threshold = INFO log4j.appender.logfile.layout = org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n ##log4j.appender.logfile.layout.ConversionPattern= %d %-5p [%-8t] [%-17c{1}]-%m%n #\u9519\u8bef\u4fe1\u606f\u8f93\u51fa\u5230\u9879\u76ee\u5b50\u6587\u4ef6\u5939\u4e0b# log4j.appender.ERROR=org.apache.log4j.DailyRollingFileAppender log4j.appender.ERROR.File = ./logs/err_log.log log4j.appenile.ERROR.Append = true log4j.appender.ERROR.Threshold = ERROR log4j.appender.ERROR.layout = org.apache.log4j.PatternLayout log4j.appender.ERROR.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
cfg.xml
<?xml version="1.0" encoding="utf-8"?> <cfgs> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <!-- 本地测试环境 --> <driverURL> jdbc:oracle:thin:@192.168.20.201:1521:mmdsdb </driverURL> <dataBaseAccount>T_MMDS</dataBaseAccount> <dataBasePassWord>testmmds</dataBasePassWord> <!-- 基础配置项 --> <INIT_FILE_ENDNAME>.temp</INIT_FILE_ENDNAME><!-- 初始化文件后缀名 --> <FILE_ENDNAME>.csv</FILE_ENDNAME><!-- 生成文件的后缀名 .csv/.txt --> <MAX_FILE_SIZE>10</MAX_FILE_SIZE><!-- 生成文件大小限制多大 单位MB --> <MAX_COUNT_ROW>10000</MAX_COUNT_ROW><!-- 设置多少行,生成/写入 --> <IS_ADD>true</IS_ADD><!-- 是否追加在源文件 --> <DATA_TYPE>host</DATA_TYPE> <FILE_BASE_PATH>G:/test12</FILE_BASE_PATH> <!-- 生成文件存放的父路径 <FILE_BASE_PATH>/export/a5duser/iot_ana/file</FILE_BASE_PATH> --> <QUERY_HOST_DATA>select imei,host iotType,(lt-ft)dt from IOT_DIG_HOST_COUNT</QUERY_HOST_DATA> <QUERY_HOST_RULE>select iot_id,rule_id,iot_rule,use_way from iot_base_hreg_info where enable = 0</QUERY_HOST_RULE> <QUERY_UA_DATA>select imei,ua iotType,(lt-ft)dt from IOT_DIG_UA_COUNT</QUERY_UA_DATA> <QUERY_UA_RULE>select iot_id,rule_id,iot_rule,use_way from iot_base_ureg_info where enable = 0</QUERY_UA_RULE> </cfgs>
end..