java对比入库小程序

/ 0评 / 0

需求:对比规则表和累计表,符合条件的进行写入文件。

程序结构

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..


发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注