需求:对比规则表和累计表,符合条件的进行写入文件。
程序结构
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
<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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
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(主程序)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?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..