Java常用公共工具记录
来源:互联网 发布:软件著作权登记日期 编辑:程序博客网 时间:2024/05/16 16:23
1、日期处理工具
import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;/** * 日期常用格式转换 */public class DateTimeUtil { static { ymdhmsFormat = new SimpleDateFormat("yyyyMMddHHmmss"); ymdhmsFormat2 = new SimpleDateFormat("yyyyMMdd HH:mm:ss"); ymdFormat = new SimpleDateFormat("yyyyMMdd"); ymdFormat2 = new SimpleDateFormat("yyyy-MM-dd"); hmsFormat = new SimpleDateFormat("HHmmss"); ymFormat = new SimpleDateFormat("yyyyMM"); c = Calendar.getInstance(); } private static SimpleDateFormat ymdhmsFormat; private static SimpleDateFormat ymdhmsFormat2; private static SimpleDateFormat ymdFormat; private static SimpleDateFormat ymdFormat2; private static SimpleDateFormat hmsFormat; private static SimpleDateFormat ymFormat;//年月 private static Calendar c; public static Date dateOnly(Date date) { return yyyyMMddToDate(parseToyyyyMMdd(date)); } /** * 转换为 yyyyMMddHHmmss格式 */ public static String parseToyyyyMMddHHmmss(Date date) { if (date == null) { return null; } return ymdhmsFormat.format(date); } /** * 转换为 yyyyMMdd HH:mm:ss格式 */ public static String parseToyyyyMMddHHmmss2(Date date) { if (date == null) { return null; } return ymdhmsFormat2.format(date); } /** * 转换为HHmmss格式 */ public static String parseToHHmmss(Date date) { if (date == null) { return null; } return hmsFormat.format(date); } /** * 转换为yyyyMMdd格式 */ public static String parseToyyyyMMdd(Date date) { if (date == null) { return null; } return ymdFormat.format(date); } /** * 转换为yyyyMM格式 */ public static int parseToyyyyMM(Date date) { if (date == null) { return 0; } return Integer.valueOf(ymFormat.format(date)); } public static Date yyyyMMddHHmmssToDate(String yyyyMMddHHmmss) { try { return ymdhmsFormat.parse(yyyyMMddHHmmss); } catch (Exception e) { return null; } } public static Date yyyyMMddToDate(String yyyyMMdd) { try { return ymdFormat.parse(yyyyMMdd); } catch (Exception e) { return null; } } public static Date yyyyMMToDate(String yyyyMM) { try { return ymFormat.parse(yyyyMM); } catch (Exception e) { return null; } } /** * yyyy-MM-dd转换成date * @author linbingwen * @since 2016年4月14日 * @param yyyyMMdd2 * @return */ public static Date yyyyMMddToDate2(String yyyyMMdd2) { try { return ymdFormat2.parse(yyyyMMdd2); } catch (Exception e) { return null; } } public static Date HHmmssToDate(String HHmmss) { try { return hmsFormat.parse(HHmmss); } catch (Exception e) { return null; } } public static Date getDate(Date srcDate, Integer daysToAdd) { c.setTime(srcDate); c.add(Calendar.DATE, daysToAdd); // number of days to add return c.getTime(); } public static Date yyyyMMddHHmmssToDate2(String yyyyMMddHHmmss) { try { return ymdhmsFormat2.parse(yyyyMMddHHmmss); } catch (Exception e) { return null; } } public static final int daysBetween(Date early, Date late) { java.util.Calendar calst = java.util.Calendar.getInstance(); java.util.Calendar caled = java.util.Calendar.getInstance(); calst.setTime(early); caled.setTime(late); // 设置时间为0时 calst.set(java.util.Calendar.HOUR_OF_DAY, 0); calst.set(java.util.Calendar.MINUTE, 0); calst.set(java.util.Calendar.SECOND, 0); caled.set(java.util.Calendar.HOUR_OF_DAY, 0); caled.set(java.util.Calendar.MINUTE, 0); caled.set(java.util.Calendar.SECOND, 0); // 得到两个日期相差的天数 int days = ((int) (caled.getTime().getTime() / 1000) - (int) (calst.getTime().getTime() / 1000)) / 3600 / 24; return days; } public static Date getNextDayOfWeek(Date date, int dayOfWeek) { if (dayOfWeek == 0) { dayOfWeek = 7; } if (dayOfWeek > 7 || dayOfWeek < 1) { throw new RuntimeException("星期:" + dayOfWeek + "不存在"); } Calendar cal = Calendar.getInstance(); cal.setTime(date); while (true) { int day = cal.get(Calendar.DAY_OF_WEEK); if (preWeekDay(day) == dayOfWeek) { return cal.getTime(); } cal.add(Calendar.DATE, 1); } } public static Date getNextMonthDate(Date date, int nextMonthDate) { Calendar cal = Calendar.getInstance(); cal.setTime(date); int day = cal.get(Calendar.DATE); if (day <= nextMonthDate) { cal.set(Calendar.DATE, nextMonthDate); } else { cal.set(Calendar.DATE, 1); cal.add(Calendar.MONTH, 1); cal.set(Calendar.DATE, nextMonthDate); } return cal.getTime(); } public static int nextWeekDay(int day) { if (day == 7) { return 1; } else { return day++; } } public static int preWeekDay(int day) { if (day == 1) { return 7; } else { return day - 1; } } /** * 计算两个日期相差的天数 * @param beginDate 【YYYYMMDD】 * @param endDate 【YYYYMMDD】 * @return Integer * @author linbingwen * @since 2015年7月21日 */public static long diffDate(Date beginDate,Date endDate){Calendar theCa1= Calendar.getInstance(); Calendar theCa2= Calendar.getInstance(); theCa1.setTime(beginDate); theCa2.setTime(endDate); long between_days=(theCa2.getTimeInMillis()-theCa1.getTimeInMillis())/(1000*3600*24); return between_days;}/** * 分钟差* @Title: diffMinute * @Description: TODO* @author : liuqiuyun* @param @param beginDate* @param @param endDate* @param @return 设定文件 * @return long 返回类型 * @throws */public static long diffMinute(Date beginDate,Date endDate){Calendar theCa1= Calendar.getInstance(); Calendar theCa2= Calendar.getInstance(); theCa1.setTime(beginDate); theCa2.setTime(endDate); long between_minutes=(theCa2.getTimeInMillis()-theCa1.getTimeInMillis())/(1000*60); return between_minutes;}/** * 获取月份差第一天* @Title: getMonthFirstDate * @Description: TODO* @author : liuqiuyun* @param @param date* @param @param monthToAdd* @param @param minOrMax 月初还是月末* @param @return 设定文件 * @return Date 返回类型 * @throws */public static Date getMonthFirstDate(Date date,int monthToAdd, String minOrMax) {Calendar calendar = Calendar.getInstance(); calendar.setTime(date);calendar.add(Calendar.MONTH, monthToAdd);if(minOrMax.equals("min")){calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));}else if(minOrMax.equals("max")){calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));}return calendar.getTime();}public static long getLastMonth(Date date) {Date lastDate = getMonthFirstDate(date,-1,"min");long lastMonth = parseToyyyyMM(lastDate);return lastMonth;} public static void main(String[] args) throws InterruptedException {// Calendar cal = Calendar.getInstance();// System.out.println(" cal.get(Calendar.DAY_OF_WEEK);:" + cal.get(Calendar.DAY_OF_WEEK));// System.out.println(" cal.get(Calendar.DAY_OF_WEEK_IN_MONTH);:" + cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));//// System.out.println(getNextDayOfWeek(cal.getTime(), 0));// System.out.println(getNextDayOfWeek(cal.getTime(), 7));// System.out.println(getNextDayOfWeek(cal.getTime(), 1));// System.out.println(getNextDayOfWeek(cal.getTime(), 2));//// System.out.println(getNextMonthDate(cal.getTime(), 0));// System.out.println(parseToyyyyMMdd(getNextMonthDate(cal.getTime(), 15))); System.out.println(parseToyyyyMMdd(getMonthFirstDate(yyyyMMddToDate("20160618"),-1,"max"))); // System.out.println(yyyyMMddToDate2("2012-09-01"));//// Date start = new Date();// System.out.println(start);// Thread.sleep(60*1000*5+1000);// Date end = new Date();// System.out.println(end);// System.out.println(diffMinute(start,end)); }}2、http请求处理工具
import java.io.ByteArrayInputStream;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.Proxy;import java.net.URL;import java.security.SecureRandom;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import java.util.Map;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.KeyManager;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import org.slf4j.Logger;import org.slf4j.LoggerFactory;//import com.lz.common.util.http.FileItem;public class HttpClientUtil {private static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);public static void main(String[] args) {HttpURLConnection conn = null;InputStream ins = null;try {//String boundary = System.currentTimeMillis() + "";//String ctype = "multipart/form-data;boundary=" + boundary;//conn = HttpClientUtil//.getConnection(//null,//new URL(//"http://10.75.201.68:8888/cfile/file/image?imageId=group2/M00/05/64/CkvJo1cQVPyATVbKACIyO0-AKoo7735712"),//"GET", ctype, null);//conn.setConnectTimeout(1000);//conn.setReadTimeout(5000);byte[] bytes = downLoadFile("http://10.75.201.68:8888/cfile/file/image?imageId=group2/M00/05/64/CkvJo1cQVPyATVbKACIyO0-AKoo7735712"); InputStream inputStream =new ByteArrayInputStream(bytes);// ins = conn.getInputStream();File file = new File("D:/6.docx");FileOutputStream fot = new FileOutputStream(file);com.slob.util.io.IOUtil.inputStreamToOutputStream(inputStream, fot);} catch (Exception e) {}}public static byte[] downLoadFile(String url) throws IOException {HttpURLConnection conn = null;InputStream ins = null;byte[] bytes = null;try {String boundary = System.currentTimeMillis() + "";String ctype = "multipart/form-data;boundary=" + boundary;conn = HttpClientUtil.getConnection(null,new URL(url),"GET", ctype, null);conn.setConnectTimeout(1000);conn.setReadTimeout(5000);ins = conn.getInputStream();bytes = readBytes(ins);return bytes;} catch (Exception e) {throw new RuntimeException(e);} finally {if (ins != null) {ins.close();}if (conn != null) {conn.disconnect();}}}public static String uploadFile(String url, String fieldName,String fileName, InputStream ips, ResponseProcess respProcess)throws IOException {HttpURLConnection conn = null;OutputStream out = null;try {String boundary = System.currentTimeMillis() + "";String ctype = "multipart/form-data;boundary=" + boundary;conn = HttpClientUtil.getConnection(null, new URL(url), "POST",ctype, null);conn.setConnectTimeout(1000);conn.setReadTimeout(5000);out = conn.getOutputStream();byte[] entryBoundaryBytes = ("\r\n--" + boundary + "\r\n").getBytes("UTF-8");out.write(entryBoundaryBytes);byte[] data = new byte[1024 * 1024];int size = ips.read(data);byte[] fileBytes = getFileEntry(fieldName, fileName,getMimeType(data), "UTF-8");out.write(fileBytes);while (size > 0) {out.write(data, 0, size);size = ips.read(data);}byte[] endBoundaryBytes = ("\r\n--" + boundary + "--\r\n").getBytes("UTF-8");out.write(endBoundaryBytes);return respProcess.processResponse(conn);} catch (Exception e) {throw new RuntimeException(e);} finally {if (out != null) {out.close();}if (conn != null) {conn.disconnect();}}}// public static String doPost(Proxy proxy, String url, String requestType,// Map<String, String> params,// Map<String, FileItem> fileParams, String charset, int connectTimeout, int// readTimeout,// Map<String, String> headerMap, ResponseProcess respProcess) throws// IOException {//// String boundary = System.currentTimeMillis() + "";// HttpURLConnection conn = null;// OutputStream out = null;// String rsp = null;// try {// try {// String ctype = "multipart/form-data;boundary=" + boundary;// conn = getConnection(proxy, new URL(url), requestType, ctype, headerMap);// conn.setConnectTimeout(connectTimeout);// conn.setReadTimeout(readTimeout);// }// catch (IOException e) {// logger.error(url, e);// throw e;// }//// try {// out = conn.getOutputStream();//// byte[] entryBoundaryBytes = ("\r\n--" + boundary +// "\r\n").getBytes(charset);//// if (params != null) {// // 文本// Set<Entry<String, String>> textEntrySet = params.entrySet();// for (Entry<String, String> textEntry : textEntrySet) {// byte[] textBytes = getTextEntry(textEntry.getKey(), textEntry.getValue(),// charset);// out.write(entryBoundaryBytes);// out.write(textBytes);// }// }//// // 文件// if (fileParams != null) {// Set<Entry<String, FileItem>> fileEntrySet = fileParams.entrySet();// for (Entry<String, FileItem> fileEntry : fileEntrySet) {// FileItem fileItem = fileEntry.getValue();// if (fileItem.getContent() == null) {// continue;// }// byte[] fileBytes = getFileEntry(fileEntry.getKey(),// fileItem.getFileName(),// fileItem.getMimeType(), charset);// out.write(entryBoundaryBytes);// out.write(fileBytes);// out.write(fileItem.getContent());// }// }//// byte[] endBoundaryBytes = ("\r\n--" + boundary +// "--\r\n").getBytes(charset);// out.write(endBoundaryBytes);// rsp = respProcess.processResponse(conn);// }// catch (IOException e) {// logger.error(url, e);// throw e;// }// }// finally {// if (out != null) {// out.close();// }// if (conn != null) {// conn.disconnect();// }// }//// return rsp;// }public static String doGet(Proxy proxy, String url, String charset,ResponseProcess respProcess) throws IOException {if (url == null) {return "";}HttpURLConnection conn = null;String rsp = null;try {String ctype = "application/x-www-form-urlencoded;charset="+ charset;conn = getConnection(proxy, new URL(url), "GET", ctype, null);rsp = respProcess.processResponse(conn);} catch (IOException e) {logger.error(url, e);throw e;} finally {if (conn != null) {conn.disconnect();}}return rsp;}private static class DefaultTrustManager implements X509TrustManager {public X509Certificate[] getAcceptedIssuers() {return null;}public void checkClientTrusted(X509Certificate[] chain, String authType)throws CertificateException {}public void checkServerTrusted(X509Certificate[] chain, String authType)throws CertificateException {}}public static HttpURLConnection getConnection(Proxy proxy, URL url,String method, String ctype, Map<String, String> headerMap)throws IOException {HttpURLConnection conn = null;if ("https".equals(url.getProtocol())) {SSLContext ctx = null;try {ctx = SSLContext.getInstance("TLS");ctx.init(new KeyManager[0],new TrustManager[] { new DefaultTrustManager() },new SecureRandom());} catch (Exception e) {throw new IOException(e);}HttpsURLConnection connHttps;if (proxy != null) {connHttps = (HttpsURLConnection) url.openConnection(proxy);} else {connHttps = (HttpsURLConnection) url.openConnection();}connHttps.setSSLSocketFactory(ctx.getSocketFactory());connHttps.setHostnameVerifier(new HostnameVerifier() {public boolean verify(String hostname, SSLSession session) {return true;}});conn = connHttps;} else {if (proxy != null) {conn = (HttpURLConnection) url.openConnection(proxy);} else {conn = (HttpURLConnection) url.openConnection();}}conn.setRequestMethod(method);conn.setDoInput(true);conn.setDoOutput(true);conn.setRequestProperty("Accept","text/xml,text/javascript,text/html,application/json");conn.setRequestProperty("User-Agent", "java");conn.setRequestProperty("Content-Type", ctype);if (headerMap != null) {for (Map.Entry<String, String> entry : headerMap.entrySet()) {conn.setRequestProperty(entry.getKey(), entry.getValue());}}return conn;}private static byte[] getTextEntry(String fieldName, String fieldValue,String charset) throws IOException {StringBuilder entry = new StringBuilder();entry.append("Content-Disposition:form-data;name=\"");entry.append(fieldName);entry.append("\"\r\nContent-Type:text/plain\r\n\r\n");entry.append(fieldValue);return entry.toString().getBytes(charset);}private static byte[] getFileEntry(String fieldName, String fileName,String mimeType, String charset) throws IOException {StringBuilder entry = new StringBuilder();entry.append("Content-Disposition:form-data;name=\"");entry.append(fieldName);entry.append("\";filename=\"");entry.append(fileName);entry.append("\"\r\nContent-Type:");entry.append(mimeType);entry.append("\r\n\r\n");return entry.toString().getBytes(charset);}public static interface ResponseProcess {String processResponse(HttpURLConnection conn);};public static String getMimeType(byte[] bytes) {String suffix = getFileSuffix(bytes);String mimeType;if ("JPG".equals(suffix)) {mimeType = "image/jpeg";} else if ("GIF".equals(suffix)) {mimeType = "image/gif";} else if ("PNG".equals(suffix)) {mimeType = "image/png";} else if ("BMP".equals(suffix)) {mimeType = "image/bmp";} else {mimeType = "application/octet-stream";}return mimeType;}/** * 获取文件的真实后缀名。目前只支持JPG, GIF, PNG, BMP四种图片文件。 * * @param bytes * 文件字节流 * @return JPG, GIF, PNG or null */public static String getFileSuffix(byte[] bytes) {if (bytes == null || bytes.length < 10) {return null;}if (bytes[0] == 'G' && bytes[1] == 'I' && bytes[2] == 'F') {return "GIF";} else if (bytes[1] == 'P' && bytes[2] == 'N' && bytes[3] == 'G') {return "PNG";} else if (bytes[6] == 'J' && bytes[7] == 'F' && bytes[8] == 'I'&& bytes[9] == 'F') {return "JPG";} else if (bytes[0] == 'B' && bytes[1] == 'M') {return "BMP";} else {return null;}}public static byte[] readBytes(InputStream in) throws IOException { byte[] temp = new byte[in.available()]; byte[] result = new byte[0]; int size = 0; while ((size = in.read(temp)) != -1) { byte[] readBytes = new byte[size]; System.arraycopy(temp, 0, readBytes, 0, size); result = mergeArray(result,readBytes); } return result; } public static byte[] mergeArray(byte[]... a) { // 合并完之后数组的总长度 int index = 0; int sum = 0; for (int i = 0; i < a.length; i++) { sum = sum + a[i].length; } byte[] result = new byte[sum]; for (int i = 0; i < a.length; i++) { int lengthOne = a[i].length; if(lengthOne==0){ continue; } // 拷贝数组 System.arraycopy(a[i], 0, result, index, lengthOne); index = index + lengthOne; } return result; } }
3、图像处理工具
import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.MalformedURLException;import java.net.URL;import javax.imageio.ImageIO;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;/** * * 功能概要:图片处理工具类 * * @author linbingwen * @since 2016年3月30日 */public class ImageUtil {/** * 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 * * @author linbingwen * @since 2016年3月30日 * @param imgFilePath 图片路径 * @return base64编码的字符串 * @throws IOException */public static String imageToBase64(String imgFilePath) throws IOException {byte[] data = null;InputStream in = null;try {in = new FileInputStream(imgFilePath);data = new byte[in.available()];// 读取图片字节数组in.read(data);} catch (IOException e) {e.printStackTrace();} finally {if (in != null) {in.close();}}BASE64Encoder encoder = new BASE64Encoder();// 对字节数组Base64编码return encoder.encode(data);// 返回Base64编码过的字节数组字符串}/** * 对字节数组字符串进行Base64解码并生成图片 * * @author linbingwen * @since 2016年3月30日 * @param imgStr base64编码的数据 * @param imgFilePath 要保存的图片路径 * @param imgFileName 要保存的图片名 * @return * @throws IOException */public static Boolean base64ToImage(String base64, String imgFilePath,String imgFileName) throws IOException {if (base64 == null) {return null;}BASE64Decoder decoder = new BASE64Decoder();OutputStream out = null;try {byte[] bytes = decoder.decodeBuffer(base64);// Base64解码for (int i = 0; i < bytes.length; ++i) {if (bytes[i] < 0) {// 调整异常数据bytes[i] += 256;}}InputStream input = new ByteArrayInputStream(bytes);out = new FileOutputStream(imgFilePath + imgFileName);// 生成jpeg图片out.write(bytes);out.flush();return true;} catch (Exception e) {return false;} finally {if (out != null) { out.close();}}}/** * 将base64编码的字符串转成InputStream * @author linbingwen * @since 2016年3月30日 * @param base64 * @return InputStream */public static InputStream base64ToInputStream(String base64) {if (base64 == null) {return null;}BASE64Decoder decoder = new BASE64Decoder();try {byte[] bytes = decoder.decodeBuffer(base64);// Base64解码for (int i = 0; i < bytes.length; ++i) {if (bytes[i] < 0) {// 调整异常数据bytes[i] += 256;}}InputStream input = new ByteArrayInputStream(bytes);return input;} catch (Exception e) {return null;}}/** * 将网络图片进行Base64位编码 * @author linbingwen * @since 2016年3月30日 * @param imageUrl 图片的url路径,如http://.....xx.jpg * @return 返回Base64编码过的字节数组字符串 * @throws IOException */public static String imageUrlToBase64(String imageUrl) throws IOException {ByteArrayOutputStream outputStream = null;try {URL url = new URL(imageUrl);BufferedImage bufferedImage = ImageIO.read(url);outputStream = new ByteArrayOutputStream();ImageIO.write(bufferedImage, "jpg", outputStream);} catch (MalformedURLException e1) {e1.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (outputStream != null) { outputStream.close();}}BASE64Encoder encoder = new BASE64Encoder();// 对字节数组Base64编码return encoder.encode(outputStream.toByteArray());}/** * * @author linbingwen * @since 2016年4月13日 * @param imageUrl 图片url * @param imageType 图片格式 如 jpg/bmp/png * @return * @throws IOException */public static byte[] imageUrlToBytes(String imageUrl,String imageType) throws IOException {ByteArrayOutputStream outputStream = null;byte[] bytes = null;try {URL url = new URL(imageUrl);BufferedImage bufferedImage = ImageIO.read(url);outputStream = new ByteArrayOutputStream();ImageIO.write(bufferedImage, imageType, outputStream);bytes = outputStream.toByteArray();} catch (MalformedURLException e1) {e1.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (outputStream != null) { outputStream.close();}}return bytes;}public static void main(String[] args) throws IOException {String imgFilePath = "D:\\"; String ttString = imageUrlToBase64("http://10.75.201.68:8888/cfile/file/image?imageId=group2/M00/05/25/CkvJolb5nIOAcHMZAADU5zn6AlI7014866"); base64ToImage(ttString, imgFilePath, "44.bmp"); urlBase64ToFile("http://10.75.201.68:8888/cfile/file/image?imageId=group2/M00/05/97/CkvJo1dxbqKAEBqzAARHjfpHsPk7518600");}/** * @author linbingwen * @since 2016年6月28日 * @param string */private static void urlBase64ToFile(String string) {}}
4、JSON转换处理工具
/** * 功能概要:java与json转换工具类 * * @author linbingwen * @since 2016年4月20日 */import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import net.sf.ezmorph.MorpherRegistry; import net.sf.ezmorph.object.DateMorpher; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; import net.sf.json.util.JSONUtils; import net.sf.json.xml.XMLSerializer; public class JsonUtil { private static String YYYY_MM_DD = "yyyy-MM-dd";private static String YYYY_MM_DD_HH_MM_ss = "yyyy-MM-dd HH:mm:ss";private static String HH_MM_ss = "HH-mm-ss";private static String YYYYMMDD = "yyyyMMdd";private static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";private static String HHMMss = "HHmmss"; /** * 设置日期转换格式 */ static { //注册器 MorpherRegistry mr = JSONUtils.getMorpherRegistry(); //可转换的日期格式,即Json串中可以出现以下格式的日期与时间 DateMorpher dm = new DateMorpher(new String[] { YYYY_MM_DD, YYYY_MM_DD_HH_MM_ss, HH_MM_ss, YYYYMMDD, YYYYMMDDHHMMSS, HHMMss}); mr.registerMorpher(dm); } /** * 从json串转换成实体对象 * @param jsonObjStr e.g. {'name':'get','dateAttr':'2009-11-12'} * @param clazz Person.class * @return */ public static Object getDtoFromJsonObjStr(String jsonObjStr, Class clazz) { return JSONObject.toBean(JSONObject.fromObject(jsonObjStr), clazz); } /** * 从json串转换成实体对象,并且实体集合属性存有另外实体Bean * @param jsonObjStr e.g. {'data':[{'name':'get'},{'name':'set'}]} * @param clazz e.g. MyBean.class * @param classMap e.g. classMap.put("data", Person.class) * @return Object */ public static Object getDtoFromJsonObjStr(String jsonObjStr, Class clazz, Map classMap) { return JSONObject.toBean(JSONObject.fromObject(jsonObjStr), clazz, classMap); } /** * 把一个json数组串转换成普通数组 * @param jsonArrStr e.g. ['get',1,true,null] * @return Object[] */ public static Object[] getArrFromJsonArrStr(String jsonArrStr) { return JSONArray.fromObject(jsonArrStr).toArray(); } /** * 把一个json数组串转换成实体数组 * @param jsonArrStr e.g. [{'name':'get'},{'name':'set'}] * @param clazz e.g. Person.class * @return Object[] */ public static Object[] getDtoArrFromJsonArrStr(String jsonArrStr, Class clazz) { JSONArray jsonArr = JSONArray.fromObject(jsonArrStr); Object[] objArr = new Object[jsonArr.size()]; for (int i = 0; i < jsonArr.size(); i++) { objArr[i] = JSONObject.toBean(jsonArr.getJSONObject(i), clazz); } return objArr; } /** * 把一个json数组串转换成实体数组,且数组元素的属性含有另外实例Bean * @param jsonArrStr e.g. [{'data':[{'name':'get'}]},{'data':[{'name':'set'}]}] * @param clazz e.g. MyBean.class * @param classMap e.g. classMap.put("data", Person.class) * @return Object[] */ public static Object[] getDtoArrFromJsonArrStr(String jsonArrStr, Class clazz, Map classMap) { JSONArray array = JSONArray.fromObject(jsonArrStr); Object[] obj = new Object[array.size()]; for (int i = 0; i < array.size(); i++) { JSONObject jsonObject = array.getJSONObject(i); obj[i] = JSONObject.toBean(jsonObject, clazz, classMap); } return obj; } /** * 把一个json数组串转换成存放普通类型元素的集合 * @param jsonArrStr e.g. ['get',1,true,null] * @return List */ public static List getListFromJsonArrStr(String jsonArrStr) { JSONArray jsonArr = JSONArray.fromObject(jsonArrStr); List list = new ArrayList(); for (int i = 0; i < jsonArr.size(); i++) { list.add(jsonArr.get(i)); } return list; } /** * 把一个json数组串转换成集合,且集合里存放的为实例Bean * @param jsonArrStr e.g. [{'name':'get'},{'name':'set'}] * @param clazz * @return List */ public static List getListFromJsonArrStr(String jsonArrStr, Class clazz) { JSONArray jsonArr = JSONArray.fromObject(jsonArrStr); List list = new ArrayList(); for (int i = 0; i < jsonArr.size(); i++) { list.add(JSONObject.toBean(jsonArr.getJSONObject(i), clazz)); } return list; } /** * 把一个json数组串转换成集合,且集合里的对象的属性含有另外实例Bean * @param jsonArrStr e.g. [{'data':[{'name':'get'}]},{'data':[{'name':'set'}]}] * @param clazz e.g. MyBean.class * @param classMap e.g. classMap.put("data", Person.class) * @return List */ public static List getListFromJsonArrStr(String jsonArrStr, Class clazz, Map classMap) { JSONArray jsonArr = JSONArray.fromObject(jsonArrStr); List list = new ArrayList(); for (int i = 0; i < jsonArr.size(); i++) { list.add(JSONObject.toBean(jsonArr.getJSONObject(i), clazz, classMap)); } return list; } /** * 把json对象串转换成map对象 * @param jsonObjStr e.g. {'name':'get','int':1,'double',1.1,'null':null} * @return Map */ public static Map getMapFromJsonObjStr(String jsonObjStr) { JSONObject jsonObject = JSONObject.fromObject(jsonObjStr); Map map = new HashMap(); for (Iterator iter = jsonObject.keys(); iter.hasNext();) { String key = (String) iter.next(); map.put(key, jsonObject.get(key)); } return map; } /** * 把json对象串转换成map对象,且map对象里存放的为其他实体Bean * @param jsonObjStr e.g. {'data1':{'name':'get'},'data2':{'name':'set'}} * @param clazz e.g. Person.class * @return Map */ public static Map getMapFromJsonObjStr(String jsonObjStr, Class clazz) { JSONObject jsonObject = JSONObject.fromObject(jsonObjStr); Map map = new HashMap(); for (Iterator iter = jsonObject.keys(); iter.hasNext();) { String key = (String) iter.next(); map.put(key, JSONObject.toBean(jsonObject.getJSONObject(key), clazz)); } return map; } /** * 把json对象串转换成map对象,且map对象里存放的其他实体Bean还含有另外实体Bean * @param jsonObjStr e.g. {'mybean':{'data':[{'name':'get'}]}} * @param clazz e.g. MyBean.class * @param classMap e.g. classMap.put("data", Person.class) * @return Map */ public static Map getMapFromJsonObjStr(String jsonObjStr, Class clazz, Map classMap) { JSONObject jsonObject = JSONObject.fromObject(jsonObjStr); Map map = new HashMap(); for (Iterator iter = jsonObject.keys(); iter.hasNext();) { String key = (String) iter.next(); map.put(key, JSONObject .toBean(jsonObject.getJSONObject(key), clazz, classMap)); } return map; } /** * 把实体Bean、Map对象、数组、列表集合转换成Json串 * @param obj * @return * @throws Exception String */ public static String getJsonStr(Object obj) { String jsonStr = null; //Json配置 // JsonConfig jsonCfg = new JsonConfig(); // // //注册日期处理器 // jsonCfg.registerJsonValueProcessor(java.util.Date.class, // new JsonDateValueProcessor(YYYY_MM_DD_HH_MM_ss)); if (obj == null) { return "{}"; } if (obj instanceof Collection || obj instanceof Object[]) { jsonStr = JSONArray.fromObject(obj).toString(); } else { jsonStr = JSONObject.fromObject(obj).toString(); } return jsonStr; } /** * 把json串、数组、集合(collection map)、实体Bean转换成XML * XMLSerializer API: * http://json-lib.sourceforge.net/apidocs/net/sf/json/xml/XMLSerializer.html * 具体实例请参考: * http://json-lib.sourceforge.net/xref-test/net/sf/json/xml/TestXMLSerializer_writes.html * http://json-lib.sourceforge.net/xref-test/net/sf/json/xml/TestXMLSerializer_writes.html * @param obj * @return * @throws Exception String */ public static String getXMLFromObj(Object obj) { XMLSerializer xmlSerial = new XMLSerializer(); //Json配置 JsonConfig jsonCfg = new JsonConfig(); //注册日期处理器 jsonCfg.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor(YYYY_MM_DD_HH_MM_ss)); if ((String.class.isInstance(obj) && String.valueOf(obj).startsWith("[")) || obj.getClass().isArray() || Collection.class.isInstance(obj)) { JSONArray jsonArr = JSONArray.fromObject(obj, jsonCfg); return xmlSerial.write(jsonArr); } else { JSONObject jsonObj = JSONObject.fromObject(obj, jsonCfg); return xmlSerial.write(jsonObj); } } /** * 从XML转json串 * @param xml * @return String */ public static String getJsonStrFromXML(String xml) { XMLSerializer xmlSerial = new XMLSerializer(); return String.valueOf(xmlSerial.read(xml)); } } /** * * 功能概要:json日期值处理器实现 * * @author linbingwen * @since 2016年4月20日 */class JsonDateValueProcessor implements JsonValueProcessor { private String format ="yyyy-MM-dd HH-mm-ss"; public JsonDateValueProcessor() { } public JsonDateValueProcessor(String format) { this.format = format; } public Object processArrayValue(Object value, JsonConfig jsonConfig) { return process(value, jsonConfig); } public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { return process(value, jsonConfig); } private Object process(Object value, JsonConfig jsonConfig) { if (value instanceof Date) { String str = new SimpleDateFormat(format).format((Date) value); return str; } return value == null ? null : value.toString(); } public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } }
5、邮件发送处理工具
import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.Multipart;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import javax.mail.internet.MimeUtility;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class MailSendUtil { private static Logger logger = LoggerFactory.getLogger(MailSendUtil.class); private MimeMessage mimeMsg; // MIME邮件对象 private Session session; // 邮件会话对象 private Properties props; // 系统属性 private boolean needAuth = false; // smtp是否需要认证 private String username; // smtp认证用户名 private String password; // smtp认证用户密码 private Multipart mp; // 含标题,邮件内容,附件 /** * Constructor * * @param smtp * 邮件发送服务器 */ public MailSendUtil(String smtp) { setSmtpHost(smtp); createMimeMessage(); } /** * 设置邮件发送服务器 * * @param hostName * String */ public void setSmtpHost(String hostName) { logger.info("设置系统属性:mail.smtp.host = " + hostName); if (props == null) props = System.getProperties(); // 获得系统属性对象 props.put("mail.smtp.host", hostName); // 设置SMTP主机 } /** * 创建MIME邮件对象 * * @return */ public boolean createMimeMessage() { try { logger.info("准备获取邮件会话对象!"); session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } });// 获得邮件会话对象 } catch (Exception e) { logger.error("获取邮件会话对象时发生错误!" + e); return false; } logger.info("准备创建MIME邮件对象!"); try { mimeMsg = new MimeMessage(session); // 创建MIME邮件对象 mp = new MimeMultipart(); return true; } catch (Exception e) { logger.error("创建MIME邮件对象失败!" + e); return false; } } /** * 设置SMTP是否需要验证 * * @param need */ public void setNeedAuth(boolean need) { logger.info("设置smtp身份认证:mail.smtp.auth = " + need); if (props == null) props = System.getProperties(); if (need) { props.put("mail.smtp.auth", "true"); } else { props.put("mail.smtp.auth", "false"); } } /** * 设置用户名和密码 * * @param name * @param pass */ public void setNamePass(String name, String pass) { username = name; password = pass; } /** * 设置邮件主题 * * @param mailSubject * @return */ public boolean setSubject(String mailSubject) { logger.info("设置邮件主题!"); try { mimeMsg.setSubject(mailSubject); return true; } catch (Exception e) { logger.error("设置邮件主题发生错误!"); return false; } } /** * 设置邮件正文 * * @param mailBody * String */ public boolean setBody(String mailBody) { try { BodyPart bp = new MimeBodyPart(); bp.setContent("" + mailBody, "text/html;charset=GBK"); mp.addBodyPart(bp); return true; } catch (Exception e) { logger.error("设置邮件正文时发生错误!" + e); return false; } } /** * 添加附件 * * @param filename * String */ public boolean addFileAffix(String filename) { if (filename == null) { return true; } logger.info("增加邮件附件:" + filename); try { BodyPart bp = new MimeBodyPart(); FileDataSource fileds = new FileDataSource(filename); bp.setDataHandler(new DataHandler(fileds)); bp.setFileName(MimeUtility.encodeText(fileds.getName())); mp.addBodyPart(bp); return true; } catch (Exception e) { logger.error("增加邮件附件:" + filename + "发生错误!" + e); return false; } } /** * 设置发信人 * * @param from * String */ public boolean setFrom(String from) { logger.info("设置发信人!"); try { mimeMsg.setFrom(new InternetAddress(from)); // 设置发信人 return true; } catch (Exception e) { return false; } } /** * 设置收信人 * * @param to * String */ public boolean setTo(String to) { logger.info("设置收件人:" + to); if (to == null) return false; try { mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); return true; } catch (Exception e) { return false; } } /** * 设置抄送人 * * @param copyto * String */ public boolean setCopyTo(String copyto) { if (copyto == null) return false; try { mimeMsg.setRecipients(Message.RecipientType.CC, (Address[]) InternetAddress.parse(copyto)); return true; } catch (Exception e) { return false; } } /** * 发送邮件 */ public boolean sendOut() { try { mimeMsg.setContent(mp); mimeMsg.saveChanges(); logger.info("正在发送邮件...."); Transport transport = session.getTransport("smtp"); transport.connect((String) props.get("mail.smtp.host"), username, password); transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));// transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC));// Transport.send(mimeMsg); logger.info("发送邮件成功!"); transport.close(); return true; } catch (Exception e) { logger.error("邮件发送失败!" + e); return false; } } /** * 调用sendOut方法完成邮件发送 * * @param smtp * @param from * @param to * @param subject * @param content * @param username * @param password * @return boolean */ public static boolean send(String smtp, String from, String to, String subject, String content, String username, String password) { MailSendUtil theMail = new MailSendUtil(smtp); theMail.setNeedAuth(true); // 需要验证 if (!theMail.setSubject(subject)) return false; if (!theMail.setBody(content)) return false; if (!theMail.setTo(to)) return false; if (!theMail.setFrom(from)) return false; theMail.setNamePass(username, password); if (!theMail.sendOut()) return false; return true; } /** * 调用sendOut方法完成邮件发送,带抄送 * * @param smtp * @param from * @param to * @param copyto * @param subject * @param content * @param username * @param password * @return boolean */ public static boolean sendAndCc(String smtp, String from, String to, String copyto, String subject, String content, String username, String password) { MailSendUtil theMail = new MailSendUtil(smtp); theMail.setNeedAuth(true); // 需要验证 if (!theMail.setSubject(subject)) return false; if (!theMail.setBody(content)) return false; if (!theMail.setTo(to)) return false; if (!theMail.setCopyTo(copyto)) return false; if (!theMail.setFrom(from)) return false; theMail.setNamePass(username, password); if (!theMail.sendOut()) return false; return true; } /** * 调用sendOut方法完成邮件发送,带附件 * * @param smtp * @param from * @param to * @param subject * @param content * @param username * @param password * @param filename * 附件路径 * @return */ public static boolean send(String smtp, String from, String to, String subject, String content, String username, String password, String filename) { MailSendUtil theMail = new MailSendUtil(smtp); theMail.setNeedAuth(true); // 需要验证 logger.info("发送邮件至:{} " + to); if (!theMail.setSubject(subject)) return false; if (!theMail.setBody(content)) return false; if (!theMail.addFileAffix(filename)) return false; if (!theMail.setTo(to)) return false; if (!theMail.setFrom(from)) return false; theMail.setNamePass(username, password); if (!theMail.sendOut()) return false; return true; } /** * 调用sendOut方法完成邮件发送,带附件和抄送 * * @param smtp * @param from * @param to * @param copyto * @param subject * @param content * @param username * @param password * @param filename * @return */ public static boolean sendAndCc(String smtp, String from, String to, String copyto, String subject, String content, String username, String password, String filename) { MailSendUtil theMail = new MailSendUtil(smtp); theMail.setNeedAuth(true); // 需要验证 if (!theMail.setSubject(subject)) return false; if (!theMail.setBody(content)) return false; if (!theMail.addFileAffix(filename)) return false; if (!theMail.setTo(to)) return false; if (!theMail.setCopyTo(copyto)) return false; if (!theMail.setFrom(from)) return false; theMail.setNamePass(username, password); if (!theMail.sendOut()) return false; return true; } public static void main(String[] args) { String smtp = "10.75.210.10"; String from = "test1@xxxxx"; String to = "liuqiuyun@xxxx"; String subject = "管理系统"; String content = "邮件内容"; String username = "test1"; String password = "Password1"; String filename = "D:\\file\\ces\\INT_MMS_SETTLE_20150211_0001.DATA"; try { MailSendUtil.send(smtp, from, to, subject, content, username, password, filename); } catch (Exception e) { e.printStackTrace(); } }}
6、SFTP处理工具
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.util.List;import java.util.Vector;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.jcraft.jsch.Channel;import com.jcraft.jsch.ChannelSftp;import com.jcraft.jsch.ChannelSftp.LsEntry;import com.jcraft.jsch.JSch;import com.jcraft.jsch.JSchException;import com.jcraft.jsch.Session;import com.jcraft.jsch.SftpException;import com.lz.lsf.exception.BusinessException;/** * * 功能概要:SFTP客户端 * * @author linbingwen * @since 2015年8月5日 */public class SftpClient { private String m_host = "127.0.0.1"; private int m_port = 22; private String m_username = "ctsUser"; private String m_password = "ctsUser"; private Logger logger = LoggerFactory.getLogger(this.getClass()); private Channel m_channel = null; public SftpClient(String host, int Port, String userName, String password) { this.m_host = host; this.m_port = Port; this.m_username = userName; this.m_password = password; } public void reConnect() { try { this.connect(); } catch (Exception e) { logger.warn("m_channel disconnect fail!", e); } } public void connect() { JSch jsch = new JSch(); try { jsch.getSession(m_username, m_host, m_port); Session sshSession = jsch.getSession(m_username, m_host, m_port); logger.info("username:" + m_username + ", host:" + m_host + ",port:" + m_port); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); sshSession.setConfig(config); logger.debug("StrictHostKeyChecking", "no"); sshSession.setPassword(m_password); sshSession.connect(); logger.debug("Session connected."); m_channel = sshSession.openChannel("sftp"); logger.debug("Opening Channel."); m_channel.connect(); logger.info("Connected to {} success! ", m_host); } catch (JSchException e) { logger.error("connected to " + m_host + "Fail! "); throw new BusinessException(CommonErrorCode.ERROR_CONNECT_SFTP_FAIL, e, "connected to " + m_host + "Fail! "); } } public void disConnect() { try { if (m_channel == null) return; synchronized (m_channel) { if (m_channel.getSession().isConnected()) m_channel.getSession().disconnect(); } m_channel.disconnect(); } catch (JSchException e) { logger.warn("m_channel disconnect fail!", e); } finally { if (m_channel != null) m_channel = null; } } public boolean isTryConnect() { int tryConnectCount = 0; try { while (true) { tryConnectCount++; if (m_channel.getSession().isConnected()) return true; else { if (tryConnectCount >= 3) return false; else { this.reConnect(); } } } } catch (JSchException e) { logger.warn("m_channel isConnected fail!", e); return false; } } /** * 上传文件 * * @param directoryName * 上传的目录 * @param uploadFileName * 要上传的文件 * @param sftp * @throws SftpException * @throws FileNotFoundException * @throws JSchException */ public void upload(String remotePathDirName, String uploadFileName) { ChannelSftp sftp = (ChannelSftp) m_channel; if (!this.isTryConnect()) { logger.error("尝试连接SFTP服务器失败!"); throw new BusinessException(CommonErrorCode.ERROR_CONNECT_SFTP_FAIL); } try { sftp.cd(remotePathDirName); File uploadFile = new File(uploadFileName); sftp.put(new FileInputStream(uploadFile), uploadFile.getName()); logger.debug("Upload file:{} to remote dir:{}", uploadFileName, remotePathDirName); } catch (FileNotFoundException e) { logger.error("download remote path({})FileNotFound{}", remotePathDirName, uploadFileName); throw new BusinessException(CommonErrorCode.NOT_EXISTS_PATH_SFTP_REMOTE, e, "FileNotFound:" + uploadFileName); } catch (SftpException e) { logger.error("download remote path({}) not exists!{}", remotePathDirName, e); throw new BusinessException(CommonErrorCode.NOT_EXISTS_PATH_SFTP_REMOTE, e, "remote path:" + remotePathDirName); } } public void uploadBatch(String directoryName, List<String> fileNameList) { for (String fileName : fileNameList) { this.upload(directoryName, fileName); } } /** * 下载文件 * * @param directoryName * 下载目录 * @param downloadFileName * 下载的文件 * @param saveFileName * 存在本地的路径 * @param sftp * @throws SftpException * @throws FileNotFoundException * @throws JSchException */ public void download(String remotePathDirName, String localPathDirName, String downloadFileName) { ChannelSftp sftp = (ChannelSftp) m_channel; if (!this.isTryConnect()) { logger.error("尝试连接SFTP服务器失败!"); // throw new BusinessException(ActErrorCode.ERROR_CONNECT_SFTP_FAIL); } try { sftp.cd(remotePathDirName); File saveFile = new File(localPathDirName + "//" + downloadFileName); sftp.get(downloadFileName, new FileOutputStream(saveFile)); logger.debug("Download file:{} save as {}", downloadFileName, localPathDirName + "//" + downloadFileName); } catch (FileNotFoundException e) { e.printStackTrace(); logger.error("download remote path{}//{}", remotePathDirName, downloadFileName); throw new BusinessException(CommonErrorCode.NOT_FINDFIELS_REMOTE_PATH, e, "FileNotFound:" + downloadFileName); } catch (SftpException e) { logger.error("download remote path({}) fail!{}", remotePathDirName + downloadFileName, e); throw new BusinessException(CommonErrorCode.NOT_EXISTS_PATH_SFTP_REMOTE, e, "remote path:" + remotePathDirName); } } public void downloadBatch(String directoryName, String localPathDirName, List<String> downloadFileNameList) { for (String fileName : downloadFileNameList) { this.download(directoryName, localPathDirName, fileName); } } public boolean isFileExists(String remotePathDirName) { ChannelSftp sftp = (ChannelSftp) m_channel; if (!this.isTryConnect()) { logger.error("尝试连接SFTP服务器失败!"); throw new BusinessException(CommonErrorCode.ERROR_CONNECT_SFTP_FAIL); } try { Vector<LsEntry> filesName = sftp.ls(remotePathDirName); return filesName.size() > 0; } catch (SftpException e) { logger.warn("download remote path({}) not exists!{}", remotePathDirName, e); return false; } } /** * 删除文件 * * @param directory * 要删除文件所在目录 * @param deleteFileName * 要删除的文件 * @param sftp * @throws SftpException * @throws JSchException */ public void delete(String directory, String deleteFileName) throws SftpException, JSchException { ChannelSftp sftp = (ChannelSftp) m_channel; if (!this.isTryConnect()) { logger.error("尝试连接SFTP服务器失败!"); throw new BusinessException(CommonErrorCode.ERROR_CONNECT_SFTP_FAIL); } sftp.cd(directory); sftp.rm(deleteFileName); logger.info("Delete file:{} from remote dir:{}", deleteFileName, directory); } /** * 列出目录下的文件 * * @param directoryName * 要列出的目录 * @param sftp * @return * @throws SftpException * @throws JSchException */ @SuppressWarnings("unchecked") public Vector<LsEntry> listFiles(String directoryName) throws SftpException, JSchException { ChannelSftp sftp = (ChannelSftp) m_channel; if (!this.isTryConnect()) { logger.error("尝试连接SFTP服务器失败!"); throw new BusinessException(CommonErrorCode.ERROR_CONNECT_SFTP_FAIL); } Vector<LsEntry> filesName = sftp.ls(directoryName); return filesName; } /** * 列出目录下符合要求的文件 * * @param directoryName * 要列出的目录 * @param reg * 文件名前缀 * @param postfix * 文件名后缀(格式) * @return * @throws SftpException * @throws JSchException */ @SuppressWarnings("unchecked") public Vector<LsEntry> listFiles(String remotePathDirName, String reg, String postfix) { ChannelSftp sftp = (ChannelSftp) m_channel; if (!this.isTryConnect()) { logger.error("尝试连接SFTP服务器失败!"); throw new BusinessException(CommonErrorCode.ERROR_CONNECT_SFTP_FAIL); } Vector<LsEntry> filesName; try { filesName = sftp.ls(remotePathDirName); Vector<LsEntry> filterFilesName = new Vector<LsEntry>(); for (LsEntry lsEntry : filesName) { if (lsEntry.getFilename().indexOf(reg) > -1 && lsEntry.getFilename().endsWith(postfix)) { filterFilesName.add(lsEntry); } } return filterFilesName; } catch (SftpException e) { logger.error("download remote path({}) not exists!{}", remotePathDirName, e); throw new BusinessException(CommonErrorCode.NOT_EXISTS_PATH_SFTP_REMOTE, e, "remote path" + remotePathDirName); } }}
7、class工具
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.math.BigDecimal;import java.util.Date;import java.util.HashSet;import java.util.Set;import org.apache.commons.beanutils.BeanUtils;import com.lz.lsf.util.StringUtil;public class ClassUtil { static Set<Class> privateTypes = new HashSet<Class>(); static { privateTypes.add(int.class); privateTypes.add(double.class); privateTypes.add(long.class); privateTypes.add(float.class); privateTypes.add(boolean.class); privateTypes.add(Integer.class); privateTypes.add(Double.class); privateTypes.add(Long.class); privateTypes.add(Float.class); privateTypes.add(String.class); privateTypes.add(Date.class); privateTypes.add(Boolean.class); } public static Class<?> getFieldGenricType(Field field, int index) { String signature = field.toGenericString(); return getGenericeType(signature, index); } private static Class<?> getGenericeType(String signature, int index) { String genericStr = signature.substring(signature.indexOf("<") + 1, signature.indexOf(">")); String[] types = genericStr.split(","); if (types.length > 0 && types.length > index) { try { return Class.forName(types[index]); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } else { return null; } } /** * 通过反射, 获得定义Class时声明的父类的泛型参数的类型. 如无法找到, 返回Object.class. * * @param clazz * clazz The class to introspect * @param index * the Index of the generic ddeclaration,start from 0. * @return the index generic declaration, or Object.class if cannot be determined */ @SuppressWarnings("unchecked") public static Class<?> getSuperClassGenricType(final Class clazz, final int index) { Class<?> ret = null; // 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。 Type genType = clazz.getGenericSuperclass(); ret = getGenericType(genType, index); if (ret == null) { for (Type t : clazz.getGenericInterfaces()) { ret = getGenericType(t, index); if (ret != null) { break; } } } return ret; } private static Class<?> getGenericType(Type type, int index) { if (!(type instanceof ParameterizedType)) { return null; } // 返回表示此类型实际类型参数的 Type 对象的数组。 Type[] params = ((ParameterizedType) type).getActualTypeArguments(); if (index >= params.length || index < 0) { return null; } if (!(params[index] instanceof Class)) { return null; } return (Class) params[index]; } public static String getSetterMethod(String attrName) { String fst = attrName.substring(0, 1).toUpperCase(); attrName = fst + attrName.substring(1); return "set" + attrName; } public static void setObjectValue(Object obj, String fieldName, Object value) { try { String methodName = getSetterMethod(fieldName); Method method = findMethod(obj.getClass(), methodName, String.class); if (method != null) { method.invoke(obj, value); } else { Field field = obj.getClass().getDeclaredField(fieldName); if (field != null) { field.setAccessible(true); field.set(obj, value); } else { throw new RuntimeException("no field or set method found for field:" + fieldName); } } } catch (Exception e) { throw new RuntimeException(e); } } public static boolean isPriovateType(Class type) { return privateTypes.contains(type); } public static Object getPrivateTypeValue(Class type, String value) { if (String.class == type) { return value; } else if (int.class == type) { return StringUtil.isEmpty(value) ? 0 : Integer.parseInt(value); } else if (double.class == type) { return StringUtil.isEmpty(value) ? 0 : Double.parseDouble(value); } else if (long.class == type) { return StringUtil.isEmpty(value) ? 0 : Long.parseLong(value); } else if (float.class == type) { return StringUtil.isEmpty(value) ? 0 : Float.parseFloat(value); } else if (Integer.class == type) { return StringUtil.isEmpty(value) ? 0 : Integer.valueOf(value); } else if (Double.class == type) { return StringUtil.isEmpty(value) ? 0 : Double.valueOf(value); } else if (Long.class == type) { return StringUtil.isEmpty(value) ? 0 : Long.valueOf(value); } else if (Float.class == type) { return StringUtil.isEmpty(value) ? 0 : Float.valueOf(value); } else if (BigDecimal.class == type) { return StringUtil.isEmpty(value) ? BigDecimal.ZERO : BigDecimal.valueOf(Double.valueOf(value)); } else if (boolean.class == type || Boolean.class == type) { return StringUtil.isEmpty(value) ? false : Boolean.valueOf(value); } else { return null; } } public static void main(String[] args) {System.out.println( Boolean.valueOf("true"));System.out.println( Boolean.valueOf("false"));String[] sp = "|1|2|||| ".split("\\|");System.out.println(sp);System.out.println("|1|2||||".endsWith("|"));} public static Method findMethod(Class<?> clazz, String methodName, Class<?> paramType) { Method ret = null; try { ret = clazz.getMethod(methodName, paramType); } catch (Exception e) { if (paramType.getSuperclass() != null) { ret = findMethod(clazz, methodName, paramType.getSuperclass()); } if (ret == null) { for (Class _clazz : paramType.getInterfaces()) { ret = findMethod(clazz, methodName, _clazz); if (ret != null) { break; } } } } return ret; } @SuppressWarnings("unchecked") public static <T> T cloneInstance(T obj) { T ret; try { ret = (T) BeanUtils.cloneBean(obj); } catch (Exception e) { throw new RuntimeException("clone instance failed!", e); } return ret; }}
8、GET/POST请求工具
import java.io.IOException;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.lang3.StringUtils;import org.apache.http.Consts;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.CookieStore;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.BasicCookieStore;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.cookie.BasicClientCookie;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class HttpClientUtil {static CookieStore cookieStore = null;private static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);public static void main(String[] args) {Map<String, String> map = new HashMap<String, String>();map.put("pageIndex", "1");map.put("pageSize", "20");String result = HttpClientUtil.post("http://xxxxx/xxx/operator/menu/findByPage.json", map);logger.info("post result:" + result);map = new HashMap<String, String>();map.put("pageNumber", "1");map.put("pageSize", "20");result = HttpClientUtil.get("http://xxx/ftc-ump-mid/xxx/dict/condition.json", map);logger.info("get result:" + result);}@Testpublic void postTest() {Map<String, String> map = new HashMap<String, String>();map.put("pageIndex", "1");map.put("pageSize", "20");String result = HttpClientUtil.post("http:/xxxxx/findByPage.json", map);logger.info("result:" + result);}@Testpublic void getTest() {Map<String, String> map = new HashMap<String, String>();map.put("pageNumber", "1");map.put("pageSize", "20");String result = HttpClientUtil.get("http://xxxxor/dict/condition.json", map);logger.info("result:" + result);}/** * 获取cookie的内容 * * @param ck * @param name * @return */public static String retriveCkValue(String ck, String name) {if (StringUtils.isBlank(ck) || StringUtils.isBlank(name)) {return "";}final String delimChar = name + "=";int delimBegin = ck.indexOf(delimChar);if (delimBegin < 0) {return "";}String val = null;int delimEnd = ck.indexOf(';', delimBegin);if (delimEnd < 0) {val = ck.substring(delimBegin + delimChar.length()).trim();} else {val = ck.substring(delimBegin + delimChar.length(), delimEnd).trim();}int idx = val.indexOf('?');if (idx > 0) {val = val.substring(0, idx);}return val;}/** * 将cookie保存到静态变量中供后续调用 * * @param httpResponse */public static void setCookieStore(HttpResponse httpResponse) {logger.info("-------setCookieStore---------");if (httpResponse.getFirstHeader("Set-Cookie") != null) {cookieStore = new BasicCookieStore();org.apache.http.Header[] cookies = httpResponse.getHeaders("Set-Cookie");// Expires=Fri, 14-Apr-2017 09:42:26 GMT;for (int j = 0; j < cookies.length; j++) {String content = cookies[j].getValue();String cookName = content.substring(0, content.indexOf("="));String cookNameContent = retriveCkValue(content, cookName);String domain = retriveCkValue(content, "Domain");String path = retriveCkValue(content, "Path");String time = retriveCkValue(content, "Expires");Date expires = new Date(time);BasicClientCookie cookie = new BasicClientCookie(cookName, cookNameContent);cookie.setDomain(domain);cookie.setPath(path);cookie.setExpiryDate(expires);cookieStore.addCookie(cookie);logger.info(cookName + ":{},domain:{},path:{},expires", cookNameContent, domain, path, expires);}}}/** * 模拟登陆 * * @param client * @return */private static String login(CloseableHttpClient client) {String path = "http://xxxxxx/operator.json";Map<String, String> params = new HashMap<String, String>();params.put("userId", "ITADMIN2");params.put("password", "123456");List<NameValuePair> list = new ArrayList<NameValuePair>();if (params != null && !params.isEmpty()) {for (Map.Entry<String, String> entry : params.entrySet()) {list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}}HttpResponse httpResponse = null;try {// 实现将请求的参数封装到表单中,即请求体中UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, Consts.UTF_8);// 使用post方式提交数据HttpPost httpPost = new HttpPost(path);int connectionTimeout = 15000;int soTimeout = 15000;RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(connectionTimeout).setSocketTimeout(soTimeout).build();httpPost.setConfig(requestConfig);httpPost.setEntity(entity);httpResponse = client.execute(httpPost);// 获取服务器端返回的状态码和输入流,将输入流转换成字符串if (httpResponse.getStatusLine().getStatusCode() == 200) {// setCookieStore(httpResponse); // 设置cookiereturn EntityUtils.toString(httpResponse.getEntity(), Consts.UTF_8);}} catch (Exception e) {e.printStackTrace();} finally {if (httpResponse != null) {try {EntityUtils.consume(httpResponse.getEntity());} catch (IOException e) {e.printStackTrace();}}}return "";}/** * 模拟get * * @param path * @param params * @param encode * @return */public static String get(String path, Map<String, String> params) {List<NameValuePair> list = new ArrayList<NameValuePair>();if (params != null && !params.isEmpty()) {for (Map.Entry<String, String> entry : params.entrySet()) {list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}}HttpResponse httpResponse = null;CloseableHttpClient client = null;try {// 实现将请求的参数封装到表单中,即请求体中UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, Consts.UTF_8);// 转换为键值对String str = EntityUtils.toString(entity);// 使用get方式提交数据HttpGet httpGet = new HttpGet(path + "?" + str);int connectionTimeout = 15000;int soTimeout = 15000;RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(connectionTimeout).setSocketTimeout(soTimeout).build();httpGet.setConfig(requestConfig);// 执行get请求,并获取服务器端的响应HttpResponseclient = HttpClients.createDefault();// if (cookieStore != null) {// client =// HttpClients.custom().setDefaultCookieStore(cookieStore).build();// } else {// client = HttpClients.createDefault();// login(client);// }login(client);httpResponse = client.execute(httpGet);// 获取服务器端返回的状态码和输入流,将输入流转换成字符串if (httpResponse.getStatusLine().getStatusCode() == 200) {return EntityUtils.toString(httpResponse.getEntity(), Consts.UTF_8);}} catch (Exception e) {e.printStackTrace();} finally {if (httpResponse != null) {try {EntityUtils.consume(httpResponse.getEntity());} catch (IOException e) {logger.error("", e);}}if (client != null) {try {client.close();} catch (IOException e) {logger.error("", e);}}}return "";}/** * 模拟post * * @param path * @param params * @param encode * @return */public static String post(String path, Map<String, String> params) {List<NameValuePair> list = new ArrayList<NameValuePair>();if (params != null && !params.isEmpty()) {for (Map.Entry<String, String> entry : params.entrySet()) {list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}}HttpResponse httpResponse = null;CloseableHttpClient client = null;try {// 实现将请求的参数封装到表单中,即请求体中UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "utf-8");// 使用post方式提交数据HttpPost httpPost = new HttpPost(path);int connectionTimeout = 15000;int soTimeout = 15000;RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(connectionTimeout).setSocketTimeout(soTimeout).build();httpPost.setConfig(requestConfig);httpPost.setEntity(entity);// 执行post请求,并获取服务器端的响应HttpResponseHttpClients.createDefault();login(client);// if (cookieStore != null) {// client =// HttpClients.custom().setDefaultCookieStore(cookieStore).build();// } else {// client = HttpClients.createDefault();// login(client);// }httpResponse = client.execute(httpPost);// 获取服务器端返回的状态码和输入流,将输入流转换成字符串if (httpResponse.getStatusLine().getStatusCode() == 200) {return EntityUtils.toString(httpResponse.getEntity(), "utf-8");}} catch (Exception e) {logger.error("", e);} finally {if (httpResponse != null) {try {EntityUtils.consume(httpResponse.getEntity());} catch (IOException e) {logger.error("", e);}}if (client != null) {try {client.close();} catch (IOException e) {logger.error("", e);}}}return "";}}
9、ES处理工具
import com.alibaba.fastjson.JSONObject;import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;import org.elasticsearch.action.bulk.BulkRequestBuilder;import org.elasticsearch.action.bulk.BulkResponse;import org.elasticsearch.action.count.CountRequestBuilder;import org.elasticsearch.action.count.CountResponse;import org.elasticsearch.action.delete.DeleteRequestBuilder;import org.elasticsearch.action.delete.DeleteResponse;import org.elasticsearch.action.get.GetResponse;import org.elasticsearch.action.index.IndexRequest;import org.elasticsearch.action.index.IndexRequestBuilder;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.action.search.SearchRequestBuilder;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.action.search.SearchType;import org.elasticsearch.action.update.UpdateRequest;import org.elasticsearch.action.update.UpdateResponse;import org.elasticsearch.client.Requests;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.lang3.StringUtils;import org.elasticsearch.common.settings.ImmutableSettings;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.transport.InetSocketTransportAddress;import org.elasticsearch.common.xcontent.XContentBuilder;import org.elasticsearch.index.query.FilterBuilder;import org.elasticsearch.index.query.QueryBuilder;import org.elasticsearch.search.SearchHit;import org.elasticsearch.search.SearchHits;import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class ESClient { private static final Logger log = LoggerFactory.getLogger(ESClient.class); private TransportClient client; public ESClient() { this.init(); } private void close() { if (this.client != null) { this.client.close(); } } @Override public void finalize() throws Throwable { this.close(); super.finalize(); } private void init() { try { Settings settings = ImmutableSettings.settingsBuilder().loadFromClasspath("elasticsearch.yml") .put("client.transport.sniff", true).build(); this.client = new TransportClient(settings); int port = settings.getAsInt("client.transport.port", 9900); String[] ips = settings.getAsArray("client.transport.ip"); for (String ip : ips) { log.info("the ip is:" + ip); client.addTransportAddress(new InetSocketTransportAddress(ip, port)); } log.info("es连接成功:{},{}", client, JSONObject.toJSONString(client.listedNodes())); } catch (Exception e) { if (client != null) { client.close(); } log.error("连接es失败!", e); } } public void createIndex(String index) throws Exception { client.admin().indices().prepareCreate(index).execute().actionGet(); } /** * 为一种类型建立mapping * * @param index 索引名,相当于关系型数据库的库名 * @param type 文档类型,相当于关系型数据库的表名 * @param builder mapping内容, 格式 { "properties": { "fieldName1": { "type": * "string", "analyzer": "ik" }, "fieldName2": { "type": * "string", "index": "not_analyzed" } } } */ public void mappingDoc(String index, String type, XContentBuilder builder) throws Exception { // XContentBuilder builder = XContentFactory.jsonBuilder() // .startObject() // .startObject("properties") // .startObject("province") // .field("type", "string") // //.field("store", "yes") // .field("analyzer","ik") // .field("index","analyzed") // //.field("indexAnalyzer", "ik") // //.field("searchAnalyzer", "ik") // .endObject() // .endObject() // .endObject(); PutMappingRequest mapping = Requests.putMappingRequest(index) .type(type).source(builder); client.admin().indices().putMapping(mapping).actionGet(); } /** * 为一份文档建立索引,采用自生成id * * @param index 索引名,相当于关系型数据库的库名 * @param type 文档类型,相当于关系型数据库的表名 * @param json json格式的数据集 * @return */ public IndexResponse indexDoc(String index, String type, String json) throws Exception { IndexRequestBuilder builder = client.prepareIndex(index, type); IndexResponse response = builder.setSource(json) .execute() .actionGet(); return response; } /** * 为一份文档建立索引,采用自生成id * * @param index 索引名,相当于关系型数据库的库名 * @param type 文档类型,相当于关系型数据库的表名 * @param kvMap 键值对形式的数据集 * @return */ public IndexResponse indexDoc(String index, String type, Map<String, Object> kvMap) throws Exception { IndexRequestBuilder builder = client.prepareIndex(index, type); IndexResponse response = builder.setSource(kvMap) .execute() .actionGet(); return response; } /** * 为一份文档建立索引 * * @param index 索引名,相当于关系型数据库的库名 * @param type 文档类型,相当于关系型数据库的表名 * @param id 文档id * @param json json格式的数据集 * @return */ public IndexResponse indexDoc(String index, String type, String id, String json) throws Exception { IndexRequestBuilder builder = client.prepareIndex(index, type, id); IndexResponse response = builder.setSource(json) .execute() .actionGet(); return response; } /** * 为一份文档建立索引 * * @param index 索引名,相当于关系型数据库的库名 * @param type 文档类型,相当于关系型数据库的表名 * @param id 文档id * @param kvMap 键值对形式的数据集 * @return */ public IndexResponse indexDoc(String index, String type, String id, Map<String, Object> kvMap) throws Exception { IndexRequestBuilder builder = client.prepareIndex(index, type, id); IndexResponse response = builder.setSource(kvMap) .execute() .actionGet(); return response; } /** * 为多份文档建立索引,采用自生成id * * @param index 索引名,相当于关系型数据库的库名 * @param type 文档类型,相当于关系型数据库的表名 * @param jsonList json格式的文档数据: List<json> * @return */ public BulkResponse batchIndexDocsForJson(String index, String type, List<String> jsonList) throws Exception { if (jsonList.isEmpty()) { throw new Exception("批量创建索引时,传入的参数'jsonList'为空!"); } List<IndexRequest> requestList = new ArrayList<IndexRequest>(jsonList.size()); for (String json : jsonList) { IndexRequest request = client.prepareIndex(index, type) .setSource(json) .request(); requestList.add(request); } BulkRequestBuilder bulkRequest = client.prepareBulk(); for (IndexRequest request : requestList) { bulkRequest.add(request); } BulkResponse response = bulkRequest .execute() .actionGet(); return response; } /** * 为多份文档建立索引,采用自生成id * * @param index 索引名,相当于关系型数据库的库名 * @param type 文档类型,相当于关系型数据库的表名 * @param kvList 键值对形式的文档数据:List<Map<field, value>> * @return */ public BulkResponse batchIndexDocsForMap(String index, String type, List<Map<String, Object>> kvList) throws Exception { if (kvList.isEmpty()) { throw new Exception("批量创建索引时,传入的参数'kvList'为空!"); } List<String> jsonList = new ArrayList<String>(kvList.size()); for (Map<String, Object> kvMap : kvList) { jsonList.add(JSONObject.toJSONString(kvMap)); } BulkResponse response = this.batchIndexDocsForJson(index, type, jsonList); jsonList.clear(); return response; } /** * 为多份文档建立索引 * * @param index 索引名,相当于关系型数据库的库名 * @param type 文档类型,相当于关系型数据库的表名 * @param idJsonMap id及json格式的文档数据: Map<id,json> * @return */ public BulkResponse batchIndexDocsForJson(String index, String type, Map<String, String> idJsonMap) throws Exception { if (idJsonMap.isEmpty()) { throw new Exception("批量创建索引时,传入的参数'idJsonMap'为空!"); } List<IndexRequest> requestList = new ArrayList<IndexRequest>(idJsonMap.size()); for (String id : idJsonMap.keySet()) { String json = idJsonMap.get(id); IndexRequest request = client.prepareIndex(index, type, id) .setSource(json) .request(); requestList.add(request); } BulkRequestBuilder bulkRequest = client.prepareBulk(); for (IndexRequest request : requestList) { bulkRequest.add(request); } BulkResponse response = bulkRequest .execute() .actionGet(); return response; } /** * 为多份文档建立索引 * * @param index 索引名,相当于关系型数据库的库名 * @param type 文档类型,相当于关系型数据库的表名 * @param idKvMap id及键值对形式的文档数据:Map<id,Map<field, value>> * @return */ public BulkResponse batchIndexDocsForMap(String index, String type, Map<String, Map<String, Object>> idKvMap) throws Exception { if (idKvMap.isEmpty()) { throw new Exception("批量创建索引时,传入的参数'idKvMap'为空!"); } Map<String, String> idJsonMap = new HashMap<String, String>(idKvMap.size()); for (String id : idKvMap.keySet()) { Map<String, Object> kvMap = idKvMap.get(id); idJsonMap.put(id, JSONObject.toJSONString(kvMap)); } BulkResponse response = this.batchIndexDocsForJson(index, type, idJsonMap); idJsonMap.clear(); return response; } /** * 更新一个doc, 若不存在则插入 * * @param index * @param type * @param id * @param json * @param script * @throws java.util.concurrent.ExecutionException * @throws InterruptedException */// public UpdateResponse upsertDoc(String index, String type, String id, String json, String script) throws Exception {// IndexRequest indexRequest = new IndexRequest(index, type, id).source(json);// UpdateRequest updateRequest = new UpdateRequest(index, type, id);// //updateRequest.doc();// updateRequest.upsert(indexRequest);// updateRequest.script(script);//// UpdateResponse response = client.update(updateRequest).get();//// return response;// } public UpdateResponse upsertDoc(String index, String type, String id, String insertJson, String updateJson) throws Exception { IndexRequest indexRequest = new IndexRequest(index, type, id).source(insertJson); UpdateRequest updateRequest = new UpdateRequest(index, type, id); updateRequest.doc(updateJson); updateRequest.upsert(indexRequest); UpdateResponse response = client.update(updateRequest).get(); return response; } /** * 根据条件 统计个数 * * @param queryBuilder 查詢條件 * @param index 索引库名 相當於 数据库名 * @param type 索引类型 相當於 表名 * @return */ public long countQuery(String index, String type, QueryBuilder queryBuilder) { CountRequestBuilder crb = client.prepareCount(index).setTypes(type); if (queryBuilder != null) { crb.setQuery(queryBuilder); } CountResponse response = crb.execute().actionGet(); return response.getCount(); } public SearchResponse searchAgg(String index, String type, String searchType, QueryBuilder queryBuilder, AbstractAggregationBuilder aggBuilder) { SearchRequestBuilder builder = client.prepareSearch(index).setTypes(type); if (!StringUtils.isEmpty(searchType)) { builder.setSearchType(SearchType.valueOf(searchType)); } if (queryBuilder != null) { builder = builder.setQuery(queryBuilder); } if (aggBuilder != null) { builder = builder.addAggregation(aggBuilder); } SearchResponse searchResponse = builder.execute().actionGet(); return searchResponse; } /** * 删除一个文档 * * @param index 索引名,相当于关系型数据库的库名 * @param type 文档类型,相当于关系型数据库的表名 * @param id 键值对形式的数据集 * @return */ public DeleteResponse deleteDoc(String index, String type, String id) throws InterruptedException { DeleteRequestBuilder builder = client.prepareDelete(index, type, id); DeleteResponse response = builder .execute() .actionGet(); return response; } /** * 根据条件删除多个文档 * * @param index 索引名,相当于关系型数据库的库名 * @param type 文档类型,相当于关系型数据库的表名 * @param queryBuilder 查询器 * @return */ public void deleteDocsByQuery(String index, String type, QueryBuilder queryBuilder) { client.prepareDeleteByQuery(index).setTypes(type).setQuery(queryBuilder) .execute() .actionGet(); } /** * 指定id获取文档 * * @param index 索引名,相当于关系型数据库的库名 * @param type 文档类型,相当于关系型数据库的表名 * @param id 文档id * @return */ public Map<String, Object> getDoc(String index, String type, String id) { GetResponse response = client.prepareGet(index, type, id) .execute() .actionGet(); Map<String, Object> retMap = response.getSourceAsMap(); return retMap; } public List<Map<String, Object>> search(String index, String type, QueryBuilder queryBuilder, FilterBuilder filterBuilder) { SearchRequestBuilder builder = client.prepareSearch(index).setTypes(type); if (queryBuilder != null) { builder = builder.setQuery(queryBuilder); } if (filterBuilder != null) { builder = builder.setPostFilter(filterBuilder); } SearchResponse searchResponse = builder.execute().actionGet(); SearchHits hits = searchResponse.getHits(); log.info("Es Hits count: " + hits.getTotalHits()); List<Map<String, Object>> kvList = new ArrayList<Map<String, Object>>(); SearchHit[] hitArray = hits.getHits(); if (hitArray.length > 0) { for (SearchHit hit : hitArray) { Map<String, Object> kvMap = hit.getSource(); kvMap.put("version", hit.getVersion()); kvMap.put("_id", hit.getId()); kvList.add(kvMap); } } return kvList; }}
10、Hbase处理工具
import org.apache.commons.lang.StringUtils;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.*;import org.apache.hadoop.hbase.client.*;import org.apache.hadoop.hbase.filter.CompareFilter;import org.apache.hadoop.hbase.filter.Filter;import org.apache.hadoop.hbase.filter.FilterList;import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;import org.apache.hadoop.hbase.util.Bytes;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;import java.io.IOException;import java.math.BigDecimal;import java.sql.Timestamp;import java.util.ArrayList;import java.util.Date;import java.util.List;/** * 操作Hbase的常用方法 * <p/> * Created by huqingmiao on 2015/4/14. */public class HbaseUtil { private static final Logger log = LoggerFactory.getLogger(HbaseUtil.class); private static Configuration conf = null; private static HConnection conn = null; private static String HADOOP_HOME = "C:/hadoop"; static {// try {// String hadoopHome = System.getProperties().getProperty("hadoop.home.dir"); //Windows下的HOME目录, 在unix下部署不需要设置// if (hadoopHome == null || "".equals(hadoopHome.trim())) {// hadoopHome = HADOOP_HOME;// }//// File hadoopBinDir = new File(hadoopHome, "bin"); //HOME目录下的bin目录// if (!hadoopBinDir.exists()) {// hadoopBinDir.mkdirs();// }// File winExeFile = new File(hadoopBinDir.getCanonicalPath() + File.separator + "winutils.exe");// if (!winExeFile.exists()) {// winExeFile.createNewFile();// }//// //设置环境变量// System.getProperties().put("hadoop.home.dir", hadoopHome);//// } catch (IOException e) {// log.error("create ./bin/winutils.exe error.", e);// } //默认从hbase-site.xml读取配置信息 conf = HBaseConfiguration.create();// conf.set("hbase.zookeeper.property.clientPort", "2181");// conf.set("hbase.zookeeper.quorum", "10.75.201.125");// conf.set("hbase.master", "10.75.201.125:60010"); //conf.set("hbase.zookeeper.quorum", "hmaster"); //与hbase/conf/hbase-site.xml中hbase.zookeeper.property.clientPort配置的值相同 // conf.set("hbase.zookeeper.property.clientPort", "2181"); } public HbaseUtil() { try { //预先创建了一个连接,以后的访问都共享该连接 //conf.addResource("hbase-site.xml"); conn = HConnectionManager.createConnection(conf); } catch (Exception e) { log.error(e.getMessage(), e); } } @Override public void finalize() throws Throwable { try { if (conn != null && !conn.isClosed()) { conn.close(); } } catch (Exception e) { log.error(e.getMessage(), e); } super.finalize(); } /** * 建表 * * @param tableName 表名 * @param columnFamilys 列簇名 * @throws Exception */ public void createTable(String tableName, String[] columnFamilys) throws Exception { HBaseAdmin hAdmin = null; try { hAdmin = new HBaseAdmin(conf); if (hAdmin.tableExists(tableName)) { log.info("已经存在要创建的表:" + tableName); } else { HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableName)); //描述列族 for (String columnFamily : columnFamilys) { tableDesc.addFamily(new HColumnDescriptor(columnFamily)); } //建表 hAdmin.createTable(tableDesc); log.info("成功创建表:" + tableName); } } catch (IOException e) { log.error(e.getMessage(), e); throw e; } finally { try { if (hAdmin != null) { hAdmin.close(); } } catch (IOException e) { log.error(e.getMessage(), e); } } } /** * 删除表 * * @param tableName 表名 * @throws Exception */ public void deleteTable(String tableName) throws Exception { HBaseAdmin hAdmin = null; try { hAdmin = new HBaseAdmin(conf); if (hAdmin.tableExists(tableName)) { hAdmin.disableTable(tableName);//禁用表 hAdmin.deleteTable(tableName);// 删除表 log.info("成功删除表:" + tableName); } else { log.info("要删除的表不存在:" + tableName); } } catch (IOException e) { log.error(e.getMessage(), e); throw e; } finally { try { if (hAdmin != null) { hAdmin.close(); } } catch (IOException e) { log.error(e.getMessage(), e); } } } /** * 向指定的行、列簇、列写入一项数据;如果该行不存在,则会插入一行。 * * @param tableName 表名 * @param rowkey 行键 * @param colFamily 列簇名 * @param column 列名 * @param value 列值 * @throws Exception */ public void putData(String tableName, String rowkey, String colFamily, String column, String value) throws Exception { HTableInterface table = null; try { //table = new HTable(conf, tableName); table = conn.getTable(tableName); Put put = new Put(Bytes.toBytes(rowkey)); // 参数分别为:列族、列、值 put.add(Bytes.toBytes(colFamily), Bytes.toBytes(column), Bytes.toBytes(value)); table.put(put); log.info("成功写入1项数据到{}.", tableName); } catch (IOException e) { log.error(e.getMessage(), e); throw e; } finally { try { if (table != null) { table.close(); } } catch (IOException e) { log.error(e.getMessage(), e); } } } /** * 向指定的行、列簇、列写入一项数据;如果该行不存在,则会插入一行。 * * @param tableName 表名 * @param hbCell 存放行键、列簇、列名、列值的数据单元 * @throws Exception */ public void putData(String tableName, HbaseCell hbCell) throws Exception { HTableInterface table = null; try { //table = new HTable(conf, tableName); table = conn.getTable(tableName); Put put = new Put(convertToBytes(hbCell.getRowkey())); // 参数分别为:列族、列、值 put.add(Bytes.toBytes(hbCell.getColFamily()), Bytes.toBytes(hbCell.getColName()), convertToBytes(hbCell.getColValue())); table.put(put); log.info("成功写入1项数据到{}.", tableName); } catch (IOException e) { log.error(e.getMessage(), e); throw e; } finally { try { if (table != null) { table.close(); } } catch (IOException e) { log.error(e.getMessage(), e); } } } /** * 写入多行、多列数据 * * @param tableName 表名 * @param hbCellList 存放行键、列簇、列名、列值的数据单元. * @throws Exception */ public void putData(String tableName, List<HbaseCell> hbCellList) throws Exception { if (hbCellList.isEmpty()) { return; } HTableInterface table = null; try { //table = new HTable(conf, tableName); table = conn.getTable(tableName); List<Put> putList = new ArrayList<Put>(); for (HbaseCell hbCell : hbCellList) { Put put = new Put(convertToBytes(hbCell.getRowkey())); put.add(Bytes.toBytes(hbCell.getColFamily()), Bytes.toBytes(hbCell.getColName()), convertToBytes(hbCell.getColValue())); putList.add(put); } table.put(putList); log.info("成功写入{}项数据到{}.", hbCellList.size(), tableName); } catch (IOException e) { log.error(e.getMessage(), e); throw e; } finally { try { if (table != null) { table.close(); } } catch (IOException e) { log.error(e.getMessage(), e); } } } /** * 写入多行、多列数据 * * @param tableName 表名 * @param hbCellList 存放行键、列簇、列名、列值的数据单元. * @throws Exception */ public void putDataForNotNull(String tableName, List<HbaseCell> hbCellList) throws Exception { if (hbCellList.isEmpty()) { return; } HTableInterface table = null; try { //table = new HTable(conf, tableName); table = conn.getTable(tableName); List<Put> putList = new ArrayList<Put>(); for (HbaseCell hbCell : hbCellList) { if (!StringUtils.isEmpty(hbCell.getColValue() + "")) { Put put = new Put(convertToBytes(hbCell.getRowkey())); put.add(Bytes.toBytes(hbCell.getColFamily()), Bytes.toBytes(hbCell.getColName()), convertToBytes(hbCell.getColValue())); putList.add(put); } } table.put(putList); log.info("成功写入{}项数据到{}.", hbCellList.size(), tableName); } catch (IOException e) { log.error(e.getMessage(), e); throw e; } finally { try { if (table != null) { table.close(); } } catch (IOException e) { log.error(e.getMessage(), e); } } } /** * 删除一行 * * @param tableName 表名 * @param rowkey 行键 * @throws Exception */ public void delRow(String tableName, String rowkey) throws Exception { HTableInterface table = null; try { //table = new HTable(conf, tableName); table = conn.getTable(tableName); Delete del = new Delete(Bytes.toBytes(rowkey)); table.delete(del); log.info("成功删除1行数据!"); } catch (IOException e) { log.error(e.getMessage(), e); throw e; } finally { try { if (table != null) { table.close(); } } catch (IOException e) { log.error(e.getMessage(), e); } } } /** * 删除多行 * * @param tableName 表名 * @param rowkeys 行键 * @throws Exception */ public void delMulitRows(String tableName, List<String> rowkeys) throws Exception { HTableInterface table = null; try { //table = new HTable(conf, tableName); table = conn.getTable(tableName); List<Delete> delList = new ArrayList<Delete>(); for (String rowkey : rowkeys) { Delete del = new Delete(Bytes.toBytes(rowkey)); delList.add(del); } table.delete(delList); delList.clear(); log.info("成功删除{}行数据.", delList.size()); } catch (IOException e) { log.error(e.getMessage(), e); throw e; } finally { try { if (table != null) { table.close(); } } catch (IOException e) { log.error(e.getMessage(), e); } } } /** * 获取指定行的所有数据项 * * @param tableName 表名 * @param rowkey 行键 * @return * @throws Exception */ public Result getRow(String tableName, String rowkey) throws Exception { HTableInterface table = null; try { //table = new HTable(conf, tableName); table = conn.getTable(tableName); Get get = new Get(Bytes.toBytes(rowkey)); Result rs = table.get(get);// for (Cell cell : result.rawCells()) {// System.out.print("Row Name: " + new String(CellUtil.cloneRow(cell)) + " ");// System.out.print("Timestamp: " + cell.getTimestamp() + " ");// System.out.print("column Family: " + new String(CellUtil.cloneFamily(cell)) + " ");// System.out.print("column Name: " + new String(CellUtil.cloneQualifier(cell)) + " ");// System.out.println("Value: " + new String(CellUtil.cloneValue(cell)) + " ");// } return rs; } catch (IOException e) { log.error(e.getMessage(), e); throw e; } finally { try { if (table != null) { table.close(); } } catch (IOException e) { log.error(e.getMessage(), e); } } } /** * 获取指定表的所有行的数据项 * * @param tableName 表名 * @return * @throws Exception */ public List<Result> findAllRows(String tableName) throws Exception { HTableInterface table = null; try { //table = new HTable(conf, tableName); table = conn.getTable(tableName); Scan scan = new Scan(); ResultScanner results = table.getScanner(scan); List<Result> rsList = new ArrayList<Result>(); for (Result rs : results) { rsList.add(rs); } return rsList; } catch (IOException e) { log.error(e.getMessage(), e); throw e; } finally { try { if (table != null) { table.close(); } } catch (IOException e) { log.error(e.getMessage(), e); } } } /** * 通用查询 * * @param tableName 表名 * @param filter 查询过滤器。单一条件查询可传Filter对象,组合条件查询可传FilterList, FilterList是Filter的子类。 */ public List<Result> findRow(String tableName, Filter filter) throws Exception { HTableInterface table = null; try { //table = new HTable(conf, tableName); table = conn.getTable(tableName); Scan scan = new Scan(); scan.setFilter(filter); ResultScanner results = table.getScanner(scan); List<Result> rsList = new ArrayList<Result>(); for (Result rs : results) { rsList.add(rs); } return rsList; } catch (IOException e) { log.error(e.getMessage(), e); throw e; } finally { try { if (table != null) { table.close(); } } catch (IOException e) { log.error(e.getMessage(), e); } } } /** * 打印、展示查询结果 * * @param result */ public void showData(Result result) { for (Cell cell : result.rawCells()) { log.info("Row: " + new String(CellUtil.cloneRow(cell)) + " "); log.info("Timestamp: " + cell.getTimestamp() + " "); log.info("Column Family: " + new String(CellUtil.cloneFamily(cell)) + " "); log.info("Column Name: " + new String(CellUtil.cloneQualifier(cell)) + " "); log.info("Column Value: " + new String(CellUtil.cloneValue(cell)) + " "); } } /** * 打印、展示查询的各项列值 * * @param rsList */ public void showData(List<Result> rsList) { log.info(">>>总的数据条数:" + rsList.size()); if (rsList.isEmpty()) { return; } for (Result rs : rsList) { Cell[] cells = rs.rawCells(); for (Cell cell : rs.rawCells()) { log.info("Row: " + new String(CellUtil.cloneRow(cell)) + " "); log.info("Timestamp: " + cell.getTimestamp() + " "); log.info("Column Family: " + new String(CellUtil.cloneFamily(cell)) + " "); log.info("Column Name: " + new String(CellUtil.cloneQualifier(cell)) + " "); log.info("Column Value: " + new String(CellUtil.cloneValue(cell)) + " "); } } } /** * 打印、展示查询的各项列值 * * @param rsList */ public void showRowkey(List<Result> rsList) { log.info(">>>总的数据条数:" + rsList.size()); if (rsList.isEmpty()) { return; } for (Result rs : rsList) { log.info(new String(rs.getRow())); } } private byte[] convertToBytes(Object obj) throws Exception { if (obj == null) { return new byte[0]; } if (obj instanceof String) { return Bytes.toBytes((String) obj); } if (obj instanceof Double) { return Bytes.toBytes((Double) obj); } if (obj instanceof Float) { return Bytes.toBytes((Float) obj); } if (obj instanceof Long) { return Bytes.toBytes((Long) obj); } if (obj instanceof Integer) { return Bytes.toBytes((Integer) obj); } if (obj instanceof Date) { return Bytes.toBytes(((Date) obj).getTime()); } if (obj instanceof Timestamp) { return Bytes.toBytes(((Timestamp) obj).getTime()); } if (obj instanceof BigDecimal) { return Bytes.toBytes((BigDecimal) obj); } throw new Exception("未能识别的数据类型: " + obj.getClass().getName()); } // main public static void main(String[] args) { try { HbaseUtil client = new HbaseUtil(); String tableName = "testtable"; // 创建数据库表:“studyinfo” String[] colFamilys = {"studyinfo", "course"}; client.createTable(tableName, colFamilys); // 添加第一行数据 client.putData(tableName, "ligan", "studyinfo", "age", "2333"); client.putData(tableName, "ligan", "studyinfo", "sex", "boy"); client.putData(tableName, "ligan", "course", "china", "97"); client.putData(tableName, "ligan", "course", "math", "128"); client.putData(tableName, "ligan", "course", "english", "85"); // 添加第二行数据 client.putData(tableName, "xiaoxue", "studyinfo", "age", "20"); client.putData(tableName, "xiaoxue", "studyinfo", "sex", "boy"); client.putData(tableName, "xiaoxue", "course", "china", "90"); client.putData(tableName, "xiaoxue", "course", "math", "100"); client.putData(tableName, "xiaoxue", "course", "english", "90"); // 添加第三行数据,也可以这样写: HbaseCell hbCell1 = new HbaseCell("walker", "studyinfo", "age", "18"); HbaseCell hbCell2 = new HbaseCell("walker", "studyinfo", "sex", "girl"); HbaseCell hbCell3 = new HbaseCell("walker", "course", "math", "100"); HbaseCell hbCell4 = new HbaseCell("walker", "course", "english", "30"); List<HbaseCell> cellList = new ArrayList<HbaseCell>(); cellList.add(hbCell1); cellList.add(hbCell2); cellList.add(hbCell3); cellList.add(hbCell4); client.putData(tableName, cellList); // 获取一条数据 log.info("获取一条数据"); Result rs = client.getRow(tableName, "ligan"); client.showData(rs); //组合查询 log.info("组合查询"); List<Filter> filters = new ArrayList<Filter>(); Filter filter1 = new SingleColumnValueFilter(Bytes .toBytes("studyinfo"), Bytes.toBytes("age"), CompareFilter.CompareOp.GREATER, Bytes .toBytes("18")); filters.add(filter1); Filter filter2 = new SingleColumnValueFilter(Bytes .toBytes("course"), Bytes.toBytes("math"), CompareFilter.CompareOp.EQUAL, Bytes .toBytes("100")); filters.add(filter2); FilterList filterList = new FilterList(filters); List<Result> rsList = client.findRow(tableName, filterList); log.info(">>>" + rsList.size()); // 获取所有数据 log.info("获取所有数据"); rsList = client.findAllRows(tableName); log.info(">>>" + rsList.size()); //删除一条数据 log.info("删除一条数据"); client.delRow(tableName, "tht"); log.info(">>>" + rsList.size()); //删除多条数据 log.info("删除多条数据"); List<String> rows = new ArrayList<String>(); rows.add("xiaoxue"); rows.add("walker"); client.delMulitRows(tableName, rows); client.findAllRows(tableName); log.info(">>>" + rsList.size()); //删除数据库 log.info("删除表"); client.deleteTable(tableName); } catch (Exception err) { err.printStackTrace(); } }}
11、mongodb处理工具
import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.regex.Pattern;import org.apache.commons.lang.StringUtils;import org.bson.Document;import com.alibaba.fastjson.JSONObject;import com.github.walker.mybatis.paginator.PageList;import com.mongodb.BasicDBObject;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.Mongo;import com.mongodb.MongoClient;import com.mongodb.MongoClientOptions;import com.mongodb.MongoCredential;import com.mongodb.ServerAddress;import com.mongodb.client.FindIterable;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoCursor;import com.mongodb.client.MongoDatabase;public class MongoManager { private static MongoClient client = null; private MongoManager() { } static { initDBPrompties(); } /** * 初始化连接池 */ private static void initDBPrompties() { String url=PropertyHolder.getProperty("mongodb.url"); String dbName=PropertyHolder.getProperty("mongodb.dbName"); String userName=PropertyHolder.getProperty("mongodb.userName"); String password=PropertyHolder.getProperty("mongodb.password"); int connectionsPerHost = Integer.valueOf(PropertyHolder.getProperty("mongodb.connectionsPerHost")); int threads = Integer.valueOf(PropertyHolder.getProperty("mongodb.threads")); int maxWaitTime=Integer.valueOf(PropertyHolder.getProperty("mongodb.maxWaitTime")); int socketTimeout=Integer.valueOf(PropertyHolder.getProperty("mongodb.socketTimeout")); int maxConnectionLifeTime=Integer.valueOf(PropertyHolder.getProperty("mongodb.maxConnectionLifeTime")); int connectTimeout = Integer.valueOf(PropertyHolder.getProperty("mongodb.connectTimeout")); List<MongoCredential> credentials = new ArrayList<MongoCredential>(); ServerAddress address = new ServerAddress(url); MongoCredential credential = MongoCredential.createCredential(userName,dbName,password.toCharArray()); credentials.add(credential); MongoClientOptions.Builder build = new MongoClientOptions.Builder(); build.connectionsPerHost(connectionsPerHost); build.maxWaitTime(maxWaitTime); build.maxConnectionLifeTime(maxConnectionLifeTime); build.connectTimeout(connectTimeout); build.threadsAllowedToBlockForConnectionMultiplier(threads); build.socketTimeout(socketTimeout); MongoClientOptions options = build.build(); client = new MongoClient(address, credentials, options); } /** * 获取数据库 * @param dbName 数据库 * @return */public static MongoDatabase getDB(String dbName) { return client.getDatabase(dbName); } /** * 获取表 * @param dbName 数据库 * @param collectionName 集合 * @return */ public static MongoCollection<Document> getCollection(String dbName,String collectionName) { MongoCollection<Document> collection = getDB(dbName).getCollection(collectionName); return collection; } /** * 插入表数据 * @param dbName 数据库 * @param collectionName 集合 * @param json 待入库json */ public static void insert(String dbName,String collectionName,String json) { MongoCollection<Document> collection = getCollection(dbName, collectionName); Document document = Document.parse(json); collection.insertOne(document); } /** * 分页查询用户操作日志 * @param dbName 数据库 * @param collectionName 集合 * @param acctNo 账户号 * @param start * @param pageSize * @return */ public static PageList<UserOpLog> findUserOpLog(String dbName,String collectionName,String acctNo,String tenantId,String keyWord,String startDate,String endDate,int start,int pageSize) { List<UserOpLog> logList = new ArrayList<UserOpLog>(); MongoCollection<Document> collection = getCollection(dbName, collectionName); BasicDBObject queryObject = new BasicDBObject(); BasicDBObject tmpObject = new BasicDBObject(); BasicDBObject dateObject = new BasicDBObject(); if(StringUtils.isNotEmpty(acctNo)) { queryObject.put("acctNo", acctNo); } if(tenantId!=null) { queryObject.put("tenantId", tenantId); } if(StringUtils.isNotEmpty(keyWord)) { Pattern pattern = Pattern.compile("^.*"+keyWord+".*$", Pattern.CASE_INSENSITIVE); queryObject.put("opDesc", pattern); } tmpObject.put("$gte", startDate); //大于 dateObject = tmpObject.append("$lte", endDate);//小于 queryObject.put("opTime", dateObject); FindIterable<Document> iterator= collection.find(queryObject).sort((new BasicDBObject("opTime",-1))); int count = 0; MongoCursor<Document> cursor= iterator.iterator(); while(cursor.hasNext()) { Document doc = cursor.next(); if(count>=start && count<=pageSize+start-1) { UserOpLog userOpLog = new UserOpLog(); userOpLog.setAcctNo(doc.getString("acctNo")); userOpLog.setClasz(doc.getString("clasz")); userOpLog.setErrorMsg(doc.getString("errorMsg")); userOpLog.setMethod(doc.getString("method")); userOpLog.setName(doc.getString("name")); userOpLog.setOpDesc(doc.getString("opDesc")); userOpLog.setOpResult(doc.getInteger("opResult")); userOpLog.setOpTime(doc.getString("opTime")); userOpLog.setUri(doc.getString("uri")); userOpLog.setTenantId(doc.getString("tenantId")); logList.add(userOpLog); } count++; } cursor.close(); PageList<UserOpLog> pageList = new PageList<UserOpLog>(logList,count); return pageList; } /** * 分页查询接口调用日志 * @param dbName 数据库 * @param collectionName 集合 * @param tenantId 商户ID * @param appId 应用ID * @param startDate 开始日期 * @param endDate 结束日期 * @param start * @param pageSize * @return */ public static PageList<UserCallLog> findUserCallLog(String dbName,String collectionName,String tenantId,String appId,String startDate,String endDate,int start,int pageSize) { List<UserCallLog> logList = new ArrayList<UserCallLog>(); MongoCollection<Document> collection = getCollection(dbName, collectionName); BasicDBObject queryObject = new BasicDBObject(); BasicDBObject tmpObject = new BasicDBObject(); BasicDBObject dateObject = new BasicDBObject(); if(StringUtils.isNotEmpty(tenantId)) { queryObject.put("tenantId", tenantId); } if(StringUtils.isNotEmpty(appId)) { queryObject.put("appId", appId); } tmpObject.put("$gte", startDate); //大于 dateObject = tmpObject.append("$lte", endDate);//小于 queryObject.put("reqTime", dateObject); FindIterable<Document> iterator= collection.find(queryObject) ; int count = 0; MongoCursor<Document> cursor= iterator.iterator(); while(cursor.hasNext()) { Document doc = cursor.next(); if(count>=start && count<=pageSize+start-1) { UserCallLog userCallLog = new UserCallLog(); userCallLog.setAppId(doc.getString("appId")); userCallLog.setClientHost(doc.getString("clientHost")); userCallLog.setClientIp(doc.getString("clientIp")); userCallLog.setClientPort(doc.getInteger("clientPort")); userCallLog.setErrorCode(doc.getString("errorCode")); userCallLog.setErrorMsg(doc.getString("errorMsg")); userCallLog.setFlowNo(doc.getString("flowNo")); userCallLog.setInterfaceClasz(doc.getString("interfaceClasz")); userCallLog.setInterfaceId(doc.getString("interfaceId")); userCallLog.setMethodId(doc.getString("methodId")); userCallLog.setMethodName(doc.getString("methodName")); userCallLog.setReqBytes(doc.getInteger("reqBytes")); userCallLog.setReqTime(doc.getString("reqTime")); userCallLog.setResBytes(doc.getInteger("resBytes")); userCallLog.setResTime(doc.getString("resTime")); userCallLog.setSvcId(doc.getString("svcId")); userCallLog.setSvcInterface(doc.getString("svcInterface")); userCallLog.setTenantId(doc.getString("tenantId")); userCallLog.setToken(doc.getString("token")); userCallLog.setUri(doc.getString("uri")); logList.add(userCallLog); } count++; } cursor.close(); PageList<UserCallLog> pageList = new PageList<UserCallLog>(logList,count); return pageList; } }
12、redis处理工具
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import java.util.Map;import java.util.Properties;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class QCloudJedis { private static final Logger log = LoggerFactory.getLogger(QCloudJedis.class); private static final Properties properties = ClassesConfigLoader.getProperties(); private static final String host = properties.getProperty("redis.host"); private static final int port = Integer.valueOf(properties.getProperty("redis.port")); private static final String instanceid = properties.getProperty("redis.instanceid"); private static final String password = properties.getProperty("redis.password"); private static final int timeout = Integer.valueOf(properties.getProperty("redis.timeout", "2000")); private static final int maxTotal = Integer.valueOf(properties.getProperty("redis.maxTotal", "1024")); private static final int maxIdle = Integer.valueOf(properties.getProperty("redis.maxIdle", "10")); private static final int maxWaitMillis = Integer.valueOf(properties.getProperty("redis.maxWaitMillis", "3000")); private static final boolean testOnIdle = Boolean.valueOf(properties.getProperty("redis.testOnIdle", "true")); //是否checkIdle private static final int timeCheckIdle = Integer.valueOf(properties.getProperty("redis.timeCheckIdle", "60000")); //每隔多少秒check一次 private static final int idleTimeout = Integer.valueOf(properties.getProperty("redis.idleTimeout", "300000")); //超时时间 private static final int numTestsPerEvictionRun = Integer.valueOf(properties.getProperty("redis.numTestsPerEvictionRun", "1024")); //一次驱逐过程中,最多驱逐对象的个数 private static JedisPool pool = null; //private static Jedis jedis = null; private static Object lock = new Object(); static { init(); } private static void init() { if (null == pool) { GenericObjectPoolConfig config = new GenericObjectPoolConfig(); config.setMaxTotal(maxTotal);config.setMaxIdle(maxIdle);config.setMaxWaitMillis(maxWaitMillis);config.setTestWhileIdle(testOnIdle);config.setTimeBetweenEvictionRunsMillis(timeCheckIdle);config.setMinEvictableIdleTimeMillis(idleTimeout);config.setNumTestsPerEvictionRun(numTestsPerEvictionRun);synchronized (lock) {if (null == pool) {try { pool = new JedisPool(config, host, port, timeout, instanceid + ":" + password); log.info("init jedis pool successful!"); } catch (Exception e) { log.error("", e); }}}} }// public static Jedis getInstance() {// init();// // return jedis;// } /** * 获取一个jedis 对象 * * @return */private static Jedis getJedis() {if (pool == null) {init();}return pool.getResource();}/** * 返还到连接池 * * @param pool * @param redis */private static void returnResource(Jedis redis) {if (redis != null) {redis.close();}}// 删除keypublic static Long del(String key) {Jedis jedis = null;try {jedis = getJedis();return jedis.del(key);} catch (Exception e) {log.error("操作Redis发生异常,异常详情:", e);return -1L;} finally {// 返还到连接池returnResource(jedis);}}public static Boolean exists(String key) {Jedis jedis = null;Boolean flag = false;try {jedis = getJedis();flag = jedis.exists(key);} catch (Exception e) {log.error("操作Redis发生异常,异常详情:", e);} finally {// 返还到连接池returnResource(jedis);}return flag;}/** * 获取数据 * * @param key * @return */public static String get(String key) {String value = null;Jedis jedis = null;try {jedis = getJedis();value = jedis.get(key);} catch (Exception e) {log.error("操作Redis发生异常,异常详情:", e);} finally {// 返还到连接池returnResource(jedis);}return value;}// 设置public static String set(String key, String value) {Jedis jedis = null;try {jedis = getJedis();return jedis.set(key, value);} catch (Exception e) {log.error("操作Redis发生异常,异常详情:", e);return "";} finally {// 返还到连接池returnResource(jedis);}}// 获取Hash值public static String hget(String key, String field) {Jedis jedis = null;String value = null;try {jedis = getJedis();value = jedis.hget(key, field);} catch (Exception e) {log.error("操作Redis发生异常,异常详情:", e);} finally {// 返还到连接池returnResource(jedis);}return value;}public static Map<String, String> hgetAll(String key) {Jedis jedis = null;Map<String, String> value = null;try {jedis = getJedis();value = jedis.hgetAll(key);} catch (Exception e) {log.error("操作Redis发生异常,异常详情:", e);} finally {// 返还到连接池returnResource(jedis);}return value;}// 设置Hash值public static Long hset(String key, String field, String value) {Jedis jedis = null;try {jedis = getJedis();return jedis.hset(key, field, value);} catch (Exception e) {log.error("操作Redis发生异常,异常详情:", e);return -1L;} finally {// 返还到连接池returnResource(jedis);}}// 删除Hash值public static Long hdel(String key, String... fields) {Jedis jedis = null;try {jedis = getJedis();return jedis.hdel(key, fields);} catch (Exception e) {log.error("操作Redis发生异常,异常详情:", e);return -1L;} finally {// 返还到连接池returnResource(jedis);}}public static Long expire(String key, int seconds) {Jedis jedis = null;try {jedis = getJedis();return jedis.expire(key, seconds);} catch (Exception e) {log.error("操作Redis发生异常,异常详情:", e);return -1L;} finally {// 返还到连接池returnResource(jedis);}} public static void main(String[] args) { try { while (true) { String key = "ftc-ump-mid"; //System.out.println("before setting: " + jedis.hget(key, "attr")); System.out.println(">>" + QCloudJedis.hset(key, "attr", "0")); QCloudJedis.expire(key, 5); System.out.println("after setting: " + QCloudJedis.hget(key, "attr")); System.out.println(">>" + QCloudJedis.hdel(key, "attr")); System.out.println("after delete: " + QCloudJedis.hget(key, "attr")); Thread.sleep(1000 * 10); } //关闭退出 //jedis.quit(); //jedis.close(); } catch (Exception e) { e.printStackTrace(); } }}
阅读全文
5 0
- Java常用公共工具记录
- Java常用的性能测试工具记录
- Java常用的性能测试工具记录.....................
- java工具类记录
- Java 日志记录工具
- java 常用方法记录
- JAVA处理图片常用公共类
- JAVA处理图片常用公共类
- 整理-非常常用的java公共方法
- java常用开发工具
- Java常用日志工具
- 常用的java工具
- Java常用开发工具
- 常用的Java工具
- Java常用命令行工具
- 常用正则表达式-作为工具记录下来
- 常用文本编辑工具列模式记录
- java工具类方法记录
- 遗传算法简单例题的详解
- Unity有限状态机
- Android开发笔记
- 解决ubuntu1604 Vmware虚拟机NAT方式不能联网问题
- 贴几个用PYTHON的机器学习的入门贴
- Java常用公共工具记录
- Android Bitmap 知识点梳理
- 3740
- MAT(Memory Analyzer Tool)使用心得
- 动态规划——343. Integer Break[Medium]
- Unity行为树框架
- C++版本MLP手动实现
- javaee学习随笔(一)之jsp/el/jstl
- 点击吐丝用mvp模式实现--狸菇凉_