2 文件已复制
6 文件已重命名
81个文件已删除
1个文件已修改
313个文件已添加
New file |
| | |
| | | package com.dsh.account.advice; |
| | | |
| | | import cn.mb.cloud.common.core.constant.enums.ErrorCodeConstants; |
| | | import cn.mb.cloud.common.core.exception.BusinessException; |
| | | import cn.mb.cloud.common.core.util.ResponseData; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | @Slf4j |
| | | @RestControllerAdvice |
| | | public class ControllerException { |
| | | |
| | | @ExceptionHandler(BusinessException.class) |
| | | @ResponseStatus(HttpStatus.OK) |
| | | @ResponseBody |
| | | public ResponseData bussiness(BusinessException e) { |
| | | log.error("业务异常 message= " + e.getMessage() + " code= " + e.getErrorCode(), e); |
| | | return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()). |
| | | msg(e.getMessage()).build(); |
| | | } |
| | | |
| | | @ExceptionHandler(RuntimeException.class) |
| | | @ResponseStatus(HttpStatus.OK) |
| | | @ResponseBody |
| | | public ResponseData runtimeException(RuntimeException e) { |
| | | log.error("运行时异常信息" + e.getMessage(), e); |
| | | return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()).msg(e.getMessage()).build(); |
| | | } |
| | | |
| | | /** |
| | | * 全局异常. |
| | | * |
| | | * @param e the e |
| | | * @return R |
| | | */ |
| | | |
| | | @ExceptionHandler(Exception.class) |
| | | @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) |
| | | @ResponseBody |
| | | public ResponseData exception(Exception e) { |
| | | log.error("全局异常信息" + e.getMessage(), e); |
| | | return ResponseData.fail(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.Instant; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.*; |
| | | |
| | | |
| | | /** |
| | | * 日期时间类型的工具类,提供对日期和时间基于毫秒及以上精度的格式化方法、 |
| | | * 运算方法、比较方法等。注意:大部分对日期对象(java.util.Date)操作的方法, |
| | | * 不会修改原日期对象,而以一个新的日期对象返回。 |
| | | * <p> |
| | | * <p> |
| | | * <p><pre><b> |
| | | * 历史更新记录:</b> |
| | | * 2004-6-17 创建此类型 |
| | | * 2005-9-30 修改方法:parseToDate(),去掉了对年份从(1970-9999)这个范围的限制。抛出异常:IllegalArgumentException(),JThinkRuntimeException() |
| | | * 2005-10-2 修改方法: 其它方法,抛出异常:IllegalArgumentException(),JThinkRuntimeException() |
| | | * 2005-10-2 增加方法: addTime(Date d, double times, int type) |
| | | * 2005-10-2 增加方法: addSystemTime() |
| | | * 2005-10-2 修改方法, 对于所有以日期对象类型java.util.Date为参数的方法,如果日期为null,都抛出异常:IllegalArgumentException() |
| | | * <p> |
| | | * </pre></p> |
| | | */ |
| | | |
| | | public final class DateTimeHelper { |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8:26:30.400 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmssSa_12 = "yyyy-MM-dd KK:mm:ss.S a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8:26:16 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmssa_12 = "yyyy-MM-dd KK:mm:ss a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8:26 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmma_12 = "yyyy-MM-dd KK:mm a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHa_12 = "yyyy-MM-dd KK a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-07-05 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMdda_12 = "yyyy-MM-dd a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08:26:30.400 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmssS = "yyyy-MM-dd HH:mm:ss.S"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08:26:16 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08:26 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmm = "yyyy-MM-dd HH:mm"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHH = "yyyy-MM-dd HH"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-07-05 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMdd = "yyyy-MM-dd"; |
| | | /** |
| | | * 把时间格式化成如:2002-07 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMM = "yyyy-MM"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:07.19 格式的字符串 |
| | | */ |
| | | public final static String FMT_MMdd = "MM.dd"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:12:08 PM(下午) 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmA_12 = "KK:mm a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:55 AM上午, CST 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmAz_12 = "KK:mm a,z"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:56 AM上午, 中国标准时间 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmAzzzz_12 = "KK:mm a,zzzz"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:12:08:23 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssA_12 = "KK:mm:ss a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:55:33 AM上午, CST 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssAz_12 = "KK:mm:ss a,z"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:56:23 AM上午, 中国标准时间 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssAzzzz_12 = "KK:mm:ss a,zzzz"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04:45 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmss = "HH:mm:ss"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04:45.824 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssS = "HH:mm:ss.S"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmm = "HH:mm"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04,CST 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmz = "HH:mm,z"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04,中国标准时间 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmzzzz = "HH:mm,zzzz"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串 |
| | | */ |
| | | public final static String FMT_WWMMDDYY_EN = "EEE,MMM d,''yyyy"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串 |
| | | */ |
| | | public final static String FMT_WWMMDDYY_CN = "EEE,yyyy年MMMd号"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串 |
| | | */ |
| | | public final static String FMT_MMDDYY_EN = "MMM d,''yyyy"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串 |
| | | */ |
| | | public final static String FMT_MMDDYY_CN = "yyyy年MMMd号"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:星期几 格式的字符串,即可获得该日这个时间是星期几 |
| | | */ |
| | | public final static String FMT_WW = "EEE"; |
| | | |
| | | public final static String FMT_ddMMyyyy = "dd-MM-yyyy"; |
| | | |
| | | /** |
| | | * 把时间格式成日期数字,如:20120606 |
| | | */ |
| | | public final static String FMT_yyyyMMdd_noseparator = "yyyyMMdd"; |
| | | |
| | | public final static String FMT_yyyyMMdd_Zh = "yyyy年MM月dd日"; |
| | | |
| | | public final static String FMT_yyyyMMddHH_noseparator = "yyyyMMddHH"; |
| | | |
| | | /** |
| | | * 把时间格式成日期数字,如:20120606121212 |
| | | */ |
| | | public final static String FMT_yyyyMMddhhmmss_noseparator = "yyyyMMddHHmmss"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002.07.05 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyxMMxdd = "yyyy.MM.dd"; |
| | | /** |
| | | * 常用的格式化时间的格式组,用于本类中格式化字符串成时间型 |
| | | */ |
| | | private final static String[] formatStr = { |
| | | FMT_ddMMyyyy, |
| | | FMT_yyyyMMddHHmmssS, |
| | | FMT_yyyyMMddHHmmss, |
| | | FMT_yyyyMMddHHmm, |
| | | FMT_yyyyMMddHH, |
| | | FMT_yyyyMMdd, |
| | | FMT_HHmmss, |
| | | FMT_HHmmssS, |
| | | FMT_HHmm, |
| | | FMT_HHmmz, |
| | | FMT_HHmmzzzz, |
| | | FMT_yyyyMMddHHmmssSa_12, |
| | | FMT_yyyyMMddHHmmssa_12, |
| | | FMT_yyyyMMddHHmma_12, |
| | | FMT_yyyyMMddHHa_12, |
| | | FMT_yyyyMMdda_12, |
| | | FMT_HHmmA_12, |
| | | FMT_HHmmAz_12, |
| | | FMT_HHmmAzzzz_12, |
| | | FMT_HHmmssA_12, |
| | | FMT_HHmmssAz_12, |
| | | FMT_HHmmssAzzzz_12 |
| | | }; |
| | | |
| | | |
| | | /** |
| | | * 私有化构造器,使得不能产生该类对象,类中所有的方法均为静态方法 |
| | | */ |
| | | private DateTimeHelper() { |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param date |
| | | * @param formatStr |
| | | * @return 如果为null,返回字符串"" |
| | | */ |
| | | public static String formatDateTimetoString(Date date, String formatStr) { |
| | | String reStr = ""; |
| | | if (date == null || formatStr == null || formatStr.trim().length() < 1) { |
| | | return reStr; |
| | | } |
| | | SimpleDateFormat sdf = new SimpleDateFormat(); |
| | | sdf.applyPattern(formatStr); |
| | | reStr = sdf.format(date); |
| | | return reStr; |
| | | } |
| | | |
| | | public static Date getSystemDate(String fmtstr) { |
| | | try { |
| | | return parseToDate(formatDateTimetoString(getSystemDate(), fmtstr)); |
| | | } catch (Exception e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | return getSystemDate(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值和格式串采用给定的国家所在的国家风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param date 日期对象 |
| | | * @param formatStr 日期格式 |
| | | * @return 如果为null,返回字符串"" |
| | | */ |
| | | public static String formatDateTimetoString(Date date, String formatStr, Locale locale) { |
| | | String reStr = ""; |
| | | if (date == null || formatStr == null || locale == null || formatStr.trim().length() < 1) { |
| | | return reStr; |
| | | } |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale); |
| | | reStr = sdf.format(date); |
| | | return reStr; |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值字符串和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param dateStr 日期串 |
| | | * @param formatStr 日期格式 |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateStr, String formatStr) throws Exception { |
| | | String dStr = ""; |
| | | if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0) { |
| | | dStr = formatDateTimetoString(parseToDate(dateStr), formatStr); |
| | | } |
| | | return dStr; |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值字符串和格式串采用指定国家的风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param dateStr 日期串 |
| | | * @param formatStr 日期格式 |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateStr, String formatStr, Locale locale) throws Exception { |
| | | String dStr = ""; |
| | | if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0 && locale != null) { |
| | | dStr = formatDateTimetoString(parseToDate(dateStr, locale), formatStr, locale); |
| | | } |
| | | return dStr; |
| | | } |
| | | |
| | | /** |
| | | * 按指定的格式和操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @param formatStr |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr, String formatStr) throws Exception { |
| | | if (dateTimeStr == null || formatStr == null || dateTimeStr.trim().length() < 1 || formatStr.trim().length() < 1) { |
| | | throw new IllegalArgumentException("参数dateTimeStr、formatStr不能是null或空格串!"); |
| | | } |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | throw new Exception(e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 按指定的格式和指定国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @param formatStr |
| | | * @param locale |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr, String formatStr, Locale locale) throws Exception { |
| | | if (dateTimeStr != null && formatStr != null && locale != null && dateTimeStr.trim().length() > 0 && formatStr.trim().length() > 0) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | throw new Exception(e); |
| | | } |
| | | } else { |
| | | throw new IllegalArgumentException("参数dateTimeStr、formatStr、locale不能是null或空格串!"); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 按操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr) throws Exception { |
| | | if (dateTimeStr == null || dateTimeStr.trim().length() < 1) { |
| | | throw new IllegalArgumentException("参数dateTimeSt不能是null或空格串!"); |
| | | } |
| | | int formatStrLength = formatStr.length; |
| | | int i = 0; |
| | | |
| | | for (i = 0; i < formatStrLength; i++) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i]); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | } |
| | | } |
| | | throw new Exception("日期格式不正确!"); |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的年月和日返回一个日期型的对象 |
| | | * |
| | | * @param year 年 |
| | | * @param month 月 ,1到12 |
| | | * @param day 日 ,1到31 |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(int year, int month, int day) throws Exception { |
| | | if (month < 1 || month > 12 || day < 1 || day > 31) { |
| | | throw new IllegalArgumentException("参数不正确!"); |
| | | } |
| | | String yearStr = String.valueOf(year); |
| | | String monthStr = String.valueOf(month); |
| | | String dayStr = String.valueOf(day); |
| | | |
| | | return parseToDate(yearStr + "-" + monthStr + "-" + dayStr); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的年月日、时分秒、返回一个对应的Date型对象 |
| | | * |
| | | * @param year 年 |
| | | * @param month 月 ,1到12 |
| | | * @param day 日 ,1到31 |
| | | * @param h 小时,从0到23 |
| | | * @param m 分,从0到60 |
| | | * @param s 秒,从0到60 |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(int year, int month, int day, int h, int m, int s) throws Exception { |
| | | if (month < 1 || month > 12 || day < 1 || day > 31 || h < 0 || h > 23 || m < 0 || m > 60 || s < 0 || s > 60) { |
| | | throw new IllegalArgumentException("参数不正确!"); |
| | | } |
| | | String yearStr = String.valueOf(year); |
| | | String monthStr = String.valueOf(month); |
| | | String dayStr = String.valueOf(day); |
| | | String hStr = String.valueOf(h); |
| | | String mStr = String.valueOf(m); |
| | | String sStr = String.valueOf(s); |
| | | |
| | | return parseToDate(yearStr + "-" + monthStr + "-" + dayStr + " " + hStr + ":" + mStr + ":" + sStr); |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 按指定国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr, Locale locale) throws Exception { |
| | | if (dateTimeStr == null || dateTimeStr.trim().length() < 1 || locale == null) { |
| | | throw new IllegalArgumentException("参数dateTimeSt、locale不能是null或空格串!"); |
| | | } |
| | | int formatStrLength = formatStr.length; |
| | | int i = 0; |
| | | for (i = 0; i < formatStrLength; i++) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i], locale); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | } |
| | | } |
| | | throw new Exception("日期格式不正确!"); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateTimeStr) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateTimeStr, Locale locale) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按操作系统默认的国家内格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTime |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDateTimetoString(Date dateTime) { |
| | | return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTime |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDateTimetoString(Date dateTime, Locale locale) { |
| | | return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param date |
| | | * @param dateStr 日期串 |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDatetoString(Date date, String dateStr) throws Exception { |
| | | return formatDateTimetoString(dateStr, FMT_yyyyMMdd); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期字符串按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param dateStr 日期串 |
| | | * @param locale Locale |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDatetoString(String dateStr, Locale locale) throws Exception { |
| | | return formatDateTimetoString(dateStr, FMT_yyyyMMdd, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期按指定操作系统默认国家的风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param d 日期对象 |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDatetoString(Date d) { |
| | | return formatDateTimetoString(d, FMT_yyyyMMdd); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param d 日期对象 |
| | | * @param locale Locale |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDatetoString(Date d, Locale locale) { |
| | | return formatDateTimetoString(d, FMT_yyyyMMdd, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatTimetoString(String dateTimeStr) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按指定国家的风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatTimetoString(String dateTimeStr, Locale locale) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按指定操作系统默认国家的风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatTimetoString(Date dateTimeStr) { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按指定国家的风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatTimetoString(Date dateTimeStr, Locale locale) { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的年份整数 |
| | | * |
| | | * @param d |
| | | * @return 年份 |
| | | */ |
| | | public static int getYearOfDate(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.YEAR); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的月份整数 |
| | | * |
| | | * @param d |
| | | * @return 月份 |
| | | */ |
| | | public static int getMonthOfYear(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.MONTH) + 1; |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的天份整数,是这个月的第几天 |
| | | * |
| | | * @param d |
| | | * @return 天份 |
| | | */ |
| | | public static int getDayOfMonth(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.DAY_OF_MONTH); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的天份整数,是这个年份的第几天 |
| | | * |
| | | * @param d |
| | | * @return 天份 |
| | | */ |
| | | public static int getDayOfYear(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.DAY_OF_YEAR); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的天份整数,是这个周的第几天 |
| | | * |
| | | * @param d |
| | | * @return 天份 |
| | | */ |
| | | public static int getDayOfWeek(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.DAY_OF_WEEK) - 1; |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的周的整数,是这个月的第几周 |
| | | * |
| | | * @param d |
| | | * @return 周 |
| | | */ |
| | | public static int getWeekOfMonth(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.WEEK_OF_MONTH); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的周的整数,是这个年份的第几周 |
| | | * |
| | | * @param d |
| | | * @return 周 |
| | | */ |
| | | public static int getWeekOfYear(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.WEEK_OF_YEAR); |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的在一天中的小时数的整数,如当前(Date now)是下午3点,返回为15 |
| | | * |
| | | * @param d |
| | | * @return 小时 |
| | | */ |
| | | public static int getHoursOfDay(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int hours = calendar.get(Calendar.HOUR_OF_DAY); |
| | | return hours; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的在一天中的小时数的整数(采用12小时制),如当前(Date now)是下午3点,返回为3 |
| | | * |
| | | * @param d |
| | | * @return 小时 |
| | | */ |
| | | public static int getHoursOfDay12(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int hours = calendar.get(Calendar.HOUR); |
| | | return hours; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回该时间所对应的分钟数中的整数,如now是15点14分,则返回14 |
| | | * |
| | | * @param d |
| | | * @return 分钟 |
| | | */ |
| | | public static int getMinutesOfHour(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int minutes = calendar.get(Calendar.MINUTE); |
| | | |
| | | return minutes; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的秒数中的整数,如now是15点14分34秒,则返回34 |
| | | * |
| | | * @param d |
| | | * @return 秒 |
| | | */ |
| | | public static int getSecondsOfMinute(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int seconds = calendar.get(Calendar.SECOND); |
| | | |
| | | return seconds; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的毫秒数中的整数,如now是15点14分34秒470毫秒,则返回470 |
| | | * |
| | | * @param d |
| | | * @return 毫秒 |
| | | */ |
| | | public static int getMillisecondsOfSecond(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int millisecond = calendar.get(Calendar.MILLISECOND); |
| | | |
| | | return millisecond; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间相对于1970年1月1日开始计算的对应的毫秒数 |
| | | * |
| | | * @param d |
| | | * @return 毫秒数 |
| | | */ |
| | | public static long getTime(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | return d.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 比较两个时间的先后顺序。 |
| | | * 如果时间d1在d2之前,返回1, |
| | | * 如果时间d1在d2之后,返回-1, |
| | | * 如果二者相等,返回0 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 如果时间d1在d2之前,返回1, |
| | | * 如果时间d1在d2之后,返回-1, |
| | | * 如果二者相等,返回0 |
| | | */ |
| | | public static int compareTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | |
| | | long dI1 = d1.getTime(); |
| | | long dI2 = d2.getTime(); |
| | | |
| | | if (dI1 > dI2) { |
| | | return -1; |
| | | } else if (dI1 < dI2) { |
| | | return 1; |
| | | } else { |
| | | return 0; |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 返回两个日期之间的毫秒数的差距 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 二者至1970年1.1后的毫秒数的差值 |
| | | */ |
| | | public static long getMillisecondsOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long dI1 = d1.getTime(); |
| | | long dI2 = d2.getTime(); |
| | | return (dI1 - dI2); |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的秒数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的秒数 |
| | | */ |
| | | public static double getSecondsOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long i = getMillisecondsOfTwoDate(d1, d2); |
| | | |
| | | return (double) i / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的分钟数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的分钟数 |
| | | */ |
| | | public static double getMinutesOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return (double) millions / 60 / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的小时数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的小时数 |
| | | */ |
| | | public static double getHoursOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return (double) millions / 60 / 60 / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的天数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的天数 |
| | | */ |
| | | public static double getDaysOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return (double) millions / 24 / 60 / 60 / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的天数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的天数 |
| | | */ |
| | | public static Long daysOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return millions / 24 / 60 / 60 / 1000; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的时间值,可以为负。 |
| | | * |
| | | * @param d 日期对象 |
| | | * @param times 时间值 |
| | | * @param type 类型, |
| | | * Calendar.MILLISECOND,毫秒<BR> |
| | | * Calendar.SECOND,秒<BR> |
| | | * Calendar.MINUTE,分钟<BR> |
| | | * Calendar.HOUR,小时<BR> |
| | | * Calendar.DATE,日<BR> |
| | | * @return 如果d为null,返回null |
| | | */ |
| | | public static Date addTime(Date d, double times, int type) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | long qv = 1; |
| | | switch (type) { |
| | | case Calendar.MILLISECOND: |
| | | qv = 1; |
| | | break; |
| | | case Calendar.SECOND: |
| | | qv = 1000; |
| | | break; |
| | | case Calendar.MINUTE: |
| | | qv = 1000 * 60; |
| | | break; |
| | | case Calendar.HOUR: |
| | | qv = 1000 * 60 * 60; |
| | | break; |
| | | case Calendar.DATE: |
| | | qv = 1000 * 60 * 60 * 24; |
| | | break; |
| | | default: |
| | | throw new RuntimeException("时间类型不正确!type=" + type); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | long milliseconds = (long) Math.round(Math.abs(times) * qv); |
| | | if (times > 0) { |
| | | for (; milliseconds > 0; milliseconds -= 2147483647) { |
| | | if (milliseconds > 2147483647) { |
| | | calendar.add(Calendar.MILLISECOND, 2147483647); |
| | | } else { |
| | | calendar.add(Calendar.MILLISECOND, (int) milliseconds); |
| | | } |
| | | } |
| | | } else { |
| | | for (; milliseconds > 0; milliseconds -= 2147483647) { |
| | | if (milliseconds > 2147483647) { |
| | | calendar.add(Calendar.MILLISECOND, -2147483647); |
| | | } else { |
| | | calendar.add(Calendar.MILLISECOND, -(int) milliseconds); |
| | | } |
| | | } |
| | | } |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的年份,可以为负, 返回新的被加上了年份的日期对象,不影响参数日期对象值 |
| | | * Given a certain time and a specified year, which can be negative, returns a new date object with the added year, without affecting the value of the original date object. |
| | | * @param d |
| | | * @param years |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addYears(Date d, int years) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.YEAR, years); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的月份,可以为负 |
| | | * Adding the specified number of month to the given time is possible, including negative values. |
| | | * @param d |
| | | * @param months |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addMonths(Date d, int months) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.MONTH, months); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的天数,可以为负 |
| | | * Adding the specified number of day to the given time is possible, including negative values. |
| | | * @param d 日期对象 |
| | | * @param days |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addDays(Date d, int days) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.HOUR, days * 24); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的小时,可以为负 |
| | | * Adding the specified number of hour to the given time is possible, including negative values. |
| | | * @param d 日期对象 |
| | | * @param hours |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addHours(Date d, int hours) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.HOUR, hours); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的分钟,可以为负 |
| | | * Adding the specified number of minute to the given time is possible, including negative values. |
| | | * @param d |
| | | * @param minutes |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addMinutes(Date d, int minutes) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.MINUTE, minutes); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的秒数,可以为负 |
| | | * Adding the specified number of seconds to the given time is possible, including negative values. |
| | | * @param d |
| | | * @param seconds |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addSeconds(Date d, int seconds) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.SECOND, seconds); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的毫秒数,可以为负 |
| | | * Adding the specified number of milliseconds to the given time can result in a negative value. |
| | | * @param d |
| | | * @param milliseconds |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addMilliseconds(Date d, int milliseconds) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.MILLISECOND, milliseconds); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的年份是新的给定的年份 |
| | | * Setting the year of a date object to a new given year. |
| | | * @param d 需要设定的日期对象 |
| | | * @param year 新的年份 |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date setYearOfDate(Date d, int year) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.YEAR, year); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的月份是新的给定的月份 |
| | | * Set the month of a date object to a new given month. |
| | | * @param d 需要设定的日期对象 |
| | | * @param month 新的月份 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setMonthOfDate(Date d, int month) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.MONTH, month); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的天是新的给定的天 |
| | | * Set the day of a date object to a new given day. |
| | | * @param d 需要设定的日期对象 |
| | | * @param day 新的天 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setDayOfDate(Date d, int day) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.DAY_OF_MONTH, day); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的小时是新的给定的小时 |
| | | * Setting the hour of a date object to a new given hour. |
| | | * @param d 需要设定的日期对象 |
| | | * @param hour 新的小时数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setHourOfDate(Date d, int hour) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.HOUR_OF_DAY, hour); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的分钟是新的给定的分钟数 |
| | | * Set the minutes of a date object to a new given minute value. |
| | | * @param d 需要设定的日期对象 |
| | | * @param minute 新的分钟数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setMinuteOfDate(Date d, int minute) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.MINUTE, minute); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的秒数是新的给定的分钟数 |
| | | * Setting the seconds of a date object to the new given minute value. |
| | | * |
| | | * @param d 需要设定的日期对象 |
| | | * @param second 新的秒数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setSecondOfDate(Date d, int second) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.SECOND, second); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的毫秒数是新的给定的分钟数 |
| | | * Setting the milliseconds of a date object to a new given minute value. |
| | | * @param d 需要设定的日期对象 |
| | | * @param millisecond 新的毫秒数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setMillisecondOfDate(Date d, int millisecond) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.MILLISECOND, millisecond); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回指定日期的月份的天数量 |
| | | * Retrieve the number of days in the month of the specified date. |
| | | * @param d 日期对象 |
| | | */ |
| | | public static int getDaysOfMonth(Date d) { |
| | | int year = getYearOfDate(d); |
| | | int month = getMonthOfYear(d); |
| | | return getDaysOfMonth(year, month); |
| | | } |
| | | |
| | | /** |
| | | * 返回指定日期的月份的天数量 |
| | | * Retrieve the number of days in the month of the specified date. |
| | | * @param year 年 |
| | | * @param month 月 |
| | | */ |
| | | public static int getDaysOfMonth(int year, int month) { |
| | | int days = 0; |
| | | if (month == 2) { |
| | | if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { |
| | | days = 29; |
| | | } else { |
| | | days = 28; |
| | | } |
| | | } |
| | | if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) { |
| | | days = 30; |
| | | } |
| | | if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) { |
| | | days = 31; |
| | | } |
| | | return days; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回系统时间,以日期对象形式返回 |
| | | * |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date getSystemDate() { |
| | | return new Date(System.currentTimeMillis()); |
| | | } |
| | | |
| | | /** |
| | | * 返回系统时间,以毫秒形式返回 |
| | | * |
| | | * @return 毫秒数 |
| | | */ |
| | | public static long getSystemTime() { |
| | | return System.currentTimeMillis(); |
| | | } |
| | | |
| | | /** |
| | | * 返回24小时前的时间 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getLastDay(Date date) { |
| | | long day = date.getTime(); |
| | | long lastDay = day - 24 * 60 * 60 * 1000; |
| | | return new Date(lastDay); |
| | | } |
| | | |
| | | /** |
| | | * 返回24小时后的时间 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getTomorrow(Date date) { |
| | | long day = date.getTime(); |
| | | long tomorrow = day + 24 * 60 * 60 * 1000; |
| | | return new Date(tomorrow); |
| | | } |
| | | |
| | | /** |
| | | * 取得30天前的这个时间 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDayLastMonth() { |
| | | long day = new Date().getTime(); |
| | | long dayLastMonth = day - 24 * 60 * 60 * 1000 * 20; |
| | | return new Date(dayLastMonth); |
| | | } |
| | | |
| | | /** |
| | | * 取得30天后的这个时间 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDayNextMonth() { |
| | | long day = new Date().getTime(); |
| | | long dayNextMonth = day + 20 * 24 * 60 * 60 * 1000; |
| | | return new Date(dayNextMonth); |
| | | } |
| | | |
| | | public static int getMonthCount(Date sDate, Date eDate) { |
| | | String sDateStr = DateTimeHelper.formatDateTimetoString(sDate, "MM"); |
| | | String eDateStr = DateTimeHelper.formatDateTimetoString(eDate, "MM"); |
| | | int monthCount = Integer.parseInt(eDateStr) - Integer.parseInt(sDateStr) + 1; |
| | | return monthCount; |
| | | } |
| | | |
| | | /** |
| | | * 取得下个月的这天,比如2月1日可取得3月1日,此方法有很大局限性,不能用于月末的天数 |
| | | * Obtain the same day of the following month, for example, February 1st can obtain March 1st. This method has significant limitations and cannot be used for the last days of the month. |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getDayNextMonth(Date date) { |
| | | String yearStr = DateTimeHelper.formatDateTimetoString(date, "yyyy"); |
| | | String monthStr = DateTimeHelper.formatDateTimetoString(date, "MM"); |
| | | String dayStr = DateTimeHelper.formatDateTimetoString(date, "dd"); |
| | | int year = Integer.parseInt(yearStr); |
| | | int month = Integer.parseInt(monthStr); |
| | | if (month == 12) { |
| | | month = 1; |
| | | year = year + 1; |
| | | yearStr = String.valueOf(year); |
| | | monthStr = String.valueOf(month); |
| | | } |
| | | |
| | | String dateStr = yearStr + "-" + monthStr + "-" + dayStr; |
| | | try { |
| | | date = DateTimeHelper.parseToDate(dateStr); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return date; |
| | | } |
| | | |
| | | /** |
| | | * 获取当月开始时0点0分0秒 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getCurrentMouthStart() { |
| | | Date d = getSystemDate(); |
| | | d = setDayOfDate(d, 1); |
| | | d = setHourOfDate(d, 0); |
| | | d = setMinuteOfDate(d, 0); |
| | | d = setSecondOfDate(d, 0); |
| | | return d; |
| | | } |
| | | |
| | | /** |
| | | * 返回下月的这天 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getDateNextMonth(Date date) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.add(Calendar.MONTH, +1); |
| | | return cal.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 根据时间获取和当前时间的差距. |
| | | * Obtain the difference between the current time and the time in question. |
| | | * @param date - 待比较实际 |
| | | * @return 时间差距字符串 |
| | | */ |
| | | public static String getPassdTime(Date date) { |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | String ret = null; |
| | | |
| | | // 计算和当前相差秒数 |
| | | // Calculate the difference in seconds from the current time. |
| | | long currentTimeMillis = System.currentTimeMillis(); |
| | | long timeDiff = (currentTimeMillis - date.getTime()); |
| | | |
| | | int seconds = (int) (timeDiff / 1000); |
| | | int minutes = seconds / 60; |
| | | int hours = minutes / 60; |
| | | int days = hours / 24; |
| | | int months = days / 30; |
| | | |
| | | if (days <= 7) { |
| | | if (days != 0) { |
| | | ret = days + "天前"; |
| | | } else if (hours != 0) { |
| | | ret = hours + "小时前"; |
| | | } else if (minutes != 0) { |
| | | ret = minutes + "分钟前"; |
| | | } else { |
| | | ret = "刚刚"; |
| | | } |
| | | } else { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// HH:mm:ss"); |
| | | ret = sdf.format(date); |
| | | } |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前日期后几天的日期 |
| | | * Obtaining the date of the day after several days from the current date. |
| | | * @param day 天数 |
| | | * @return |
| | | */ |
| | | public static Date getCurrentNextDays(int day) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.add(Calendar.DAY_OF_YEAR, day); |
| | | Date date = calendar.getTime(); |
| | | return date; |
| | | } |
| | | |
| | | public static String getCurrentStringDate() { |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | String dateString = simpleDateFormat.format(new Date()); |
| | | return dateString; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前日期是星期几<br> |
| | | * Obtain the day of the week for the current date. |
| | | * @param dt |
| | | * @return 当前日期是星期几 |
| | | */ |
| | | public static String getWeekOfDate(Date dt) { |
| | | String[] weekDays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"}; |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(dt); |
| | | int w = cal.get(Calendar.DAY_OF_WEEK) - 1; |
| | | if (w < 0) { |
| | | w = 0; |
| | | } |
| | | return weekDays[w]; |
| | | } |
| | | |
| | | /** |
| | | * 获取今天时间 2017-11-20 00:00:00 |
| | | */ |
| | | public static Date todayDate() { |
| | | try { |
| | | String date = formatDatetoString(new Date()); |
| | | String todayString = date + " 00:00:00"; |
| | | return parseToDate(todayString, FMT_yyyyMMdd); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return new Date(); |
| | | } |
| | | |
| | | /** |
| | | * 获取指定日期的 时间 2017-11-20 00:00:00 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date createDate(Date date) { |
| | | try { |
| | | String dates = formatDatetoString(date); |
| | | String todayString = dates + " 00:00:00"; |
| | | return parseToDate(todayString, FMT_yyyyMMdd); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return new Date(); |
| | | } |
| | | |
| | | |
| | | public static String createDateTime(Date date) { |
| | | try { |
| | | String dates = formatDatetoString(date); |
| | | String time = DateTimeHelper.formatDateTimetoString(new Date(), FMT_HHmmss); |
| | | String todayString = dates + " " + time; |
| | | return todayString; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static String getTimeHint(Date time) { |
| | | String hint = ""; |
| | | double minutes = DateTimeHelper.getMinutesOfTwoDate(new Date(), time); |
| | | double hours = DateTimeHelper.getHoursOfTwoDate(new Date(), time); |
| | | double days = DateTimeHelper.getDaysOfTwoDate(new Date(), time); |
| | | if (minutes < 1) { |
| | | hint = "刚刚"; |
| | | } else if (hours < 1) { |
| | | hint = new Double(minutes).intValue() + "分钟前"; |
| | | } else if (days < 1) { |
| | | hint = new Double(hours).intValue() + "小时前"; |
| | | } else if (days < 7) { |
| | | hint = new Double(days).intValue() + "天前"; |
| | | } else { |
| | | hint = DateTimeHelper.formatDateTimetoString(time, DateTimeHelper.FMT_yyyyMMdd); |
| | | } |
| | | return hint; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据时间获取和当前时间的差距. |
| | | * Obtain the difference between the current time and the time in question. |
| | | * @param date - 待比较实际 |
| | | * @return 时间差距字符串 |
| | | */ |
| | | public static String getLoginTime(Date date) { |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | String ret = null; |
| | | |
| | | // 计算和当前相差秒数 |
| | | //Calculate the difference in seconds from the current time. |
| | | long currentTimeMillis = System.currentTimeMillis(); |
| | | long timeDiff = (currentTimeMillis - date.getTime()); |
| | | |
| | | int seconds = (int) (timeDiff / 1000); |
| | | int minutes = seconds / 60; |
| | | int hours = minutes / 60; |
| | | int days = hours / 24; |
| | | int months = days / 30; |
| | | |
| | | if (months != 0) { |
| | | ret = "1个月前"; |
| | | } else if (days != 0) { |
| | | ret = days + "天前"; |
| | | } else if (hours != 0) { |
| | | ret = hours + "小时前"; |
| | | } else if (minutes != 0) { |
| | | ret = minutes + "分钟前"; |
| | | } else { |
| | | ret = "刚刚"; |
| | | } |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | |
| | | public static Date getWXTime() { |
| | | |
| | | Calendar calendar = Calendar.getInstance(Locale.CHINA); |
| | | Date date = calendar.getTime(); |
| | | |
| | | return date; |
| | | } |
| | | |
| | | /** |
| | | * 是否是同一天 |
| | | * it the same day |
| | | * @param first |
| | | * @param second |
| | | * @return |
| | | */ |
| | | public static Boolean isSameDay(Date first, Date second) { |
| | | |
| | | if (first == null || second == null) { |
| | | return false; |
| | | } |
| | | |
| | | int day1 = getDayOfYear(first); |
| | | int day2 = getDayOfYear(second); |
| | | if (day1 != day2) { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 是否超过指定时刻 |
| | | * Has the specified time limit been exceeded |
| | | * @param day 时间 |
| | | * @param time 指定时刻 |
| | | * @return |
| | | */ |
| | | public static Boolean expireDayTime(Date day, Integer time) { |
| | | if (null == day) { |
| | | return false; |
| | | } |
| | | try { |
| | | String dates = formatDatetoString(day); |
| | | String timeHour = ""; |
| | | for (int i = 0; i <= 23; i++) { |
| | | if (i == time) { |
| | | if (i < 10) { |
| | | timeHour += " 0" + time + ":00:00"; |
| | | } else if (i < 23) { |
| | | timeHour += " " + time + ":00:00"; |
| | | } else { |
| | | timeHour += " 00" + time + ":00:00"; |
| | | } |
| | | } |
| | | } |
| | | String todayString = dates + timeHour; |
| | | Date esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss); |
| | | if (DateTimeHelper.compareTwoDate(day, esDayTime) != 1) { |
| | | int i = compareTwoDate(day, esDayTime); |
| | | System.out.println(i); |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 指定一天哪一个小时 |
| | | * Specify which hour of a particular day. |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static Date createDayTime(Integer time) { |
| | | String dates = formatDatetoString(new Date()); |
| | | String timeHour = ""; |
| | | for (int i = 0; i <= 23; i++) { |
| | | if (i == time) { |
| | | if (i < 10) { |
| | | timeHour += " 0" + time + ":00:00"; |
| | | } else if (i < 23) { |
| | | timeHour += " " + time + ":00:00"; |
| | | } else { |
| | | timeHour += " 00" + time + ":00:00"; |
| | | } |
| | | } |
| | | } |
| | | String todayString = dates + timeHour; |
| | | Date esDayTime = new Date(); |
| | | try { |
| | | esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | |
| | | return esDayTime; |
| | | } |
| | | |
| | | /** |
| | | * 数字换算成中文(周) |
| | | * Conversion of numbers to Chinese (weeks) |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static String getWeekString(Integer time) { |
| | | if (time == 1) { |
| | | return "一"; |
| | | } else if (time == 2) { |
| | | return "二"; |
| | | } else if (time == 3) { |
| | | return "三"; |
| | | } else if (time == 4) { |
| | | return "四"; |
| | | } else if (time == 5) { |
| | | return "五"; |
| | | } else if (time == 6) { |
| | | return "六"; |
| | | } else if (time == 0 || time == 7) { |
| | | return "日"; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * LocalDateTime -> Date |
| | | * |
| | | * @param localDateTime |
| | | * @return |
| | | */ |
| | | public static Date asDate(LocalDateTime localDateTime) { |
| | | return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); |
| | | } |
| | | |
| | | /** |
| | | * Date -> LocalDateTime |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static LocalDateTime asLocalDateTime(Date date) { |
| | | return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取两个时间的间隔(秒) |
| | | * Obtain the time difference between two instances (in seconds). |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return |
| | | */ |
| | | public static long getDateBetween(Date d1, Date d2) { |
| | | return Math.abs((d1.getTime() - d2.getTime()) / 1000);//取绝对值 |
| | | } |
| | | |
| | | /** |
| | | * @param date |
| | | * @return 获取今天最后的时间 |
| | | * Obtain the final time of today. |
| | | */ |
| | | public static Date getEndDate(Date date) { |
| | | if (date == null) { |
| | | return null; |
| | | } |
| | | Calendar c = Calendar.getInstance(); |
| | | c.setTime(date); |
| | | c.set(Calendar.HOUR_OF_DAY, 23); |
| | | c.set(Calendar.MINUTE, 59); |
| | | c.set(Calendar.SECOND, 59); |
| | | return c.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 日期天数差 |
| | | * Days Difference |
| | | */ |
| | | public static int daysBetween(Date today, Date endDate) throws ParseException { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | today = sdf.parse(sdf.format(today)); |
| | | endDate = sdf.parse(sdf.format(endDate)); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(today); |
| | | long time1 = cal.getTimeInMillis(); |
| | | cal.setTime(endDate); |
| | | long time2 = cal.getTimeInMillis(); |
| | | long between_days = (time2 - time1) / (1000 * 3600 * 24); |
| | | return Integer.parseInt(String.valueOf(between_days)); |
| | | } |
| | | |
| | | /** |
| | | * 获取到当月所有日期 |
| | | * Obtain all dates of the current month |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static List<Date> getAllTheDateOftheMonth(Date date) { |
| | | List<Date> list = new ArrayList<Date>(); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.set(Calendar.DATE, 1); |
| | | |
| | | int month = cal.get(Calendar.MONTH); |
| | | while (cal.get(Calendar.MONTH) == month) { |
| | | list.add(cal.getTime()); |
| | | cal.add(Calendar.DATE, 1); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | /*public static void main(String[] args) throws ParseException { |
| | | List<Date> allTheDateOftheMonth = getAllTheDateOftheMonth(new Date()); |
| | | Date date = allTheDateOftheMonth.get(11); |
| | | System.out.println(date.toLocaleString()); |
| | | int i = daysBetween(new Date(), date); |
| | | System.out.println(i); |
| | | }*/ |
| | | |
| | | |
| | | } |
New file |
| | |
| | | /** |
| | | * Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com). |
| | | * <p> |
| | | * Licensed under the Apache License, Version 2.0 (the "License"); |
| | | * you may not use this file except in compliance with the License. |
| | | * You may obtain a copy of the License at |
| | | * <p> |
| | | * http://www.apache.org/licenses/LICENSE-2.0 |
| | | * <p> |
| | | * Unless required by applicable law or agreed to in writing, software |
| | | * distributed under the License is distributed on an "AS IS" BASIS, |
| | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | * See the License for the specific language governing permissions and |
| | | * limitations under the License. |
| | | */ |
| | | package com.dsh.account.util; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.commons.lang3.time.DateFormatUtils; |
| | | import org.apache.commons.lang3.time.DateUtils; |
| | | |
| | | import java.sql.Timestamp; |
| | | import java.text.DateFormat; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.Objects; |
| | | import java.util.TimeZone; |
| | | |
| | | public class DateUtil { |
| | | |
| | | private static TimeZone tz = TimeZone.getTimeZone("GMT+8"); |
| | | |
| | | /** |
| | | * 获取YYYY格式 |
| | | */ |
| | | public static String getYear() { |
| | | return formatDate(new Date(), "yyyy"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY格式 |
| | | */ |
| | | public static String getYear(Date date) { |
| | | return formatDate(date, "yyyy"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD格式 |
| | | */ |
| | | public static String getDay() { |
| | | return formatDate(new Date(), "yyyy-MM-dd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD格式 |
| | | */ |
| | | public static String getDay(Date date) { |
| | | return formatDate(date, "yyyy-MM-dd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYYMMDD格式 |
| | | */ |
| | | public static String getDays() { |
| | | return formatDate(new Date(), "yyyyMMdd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYYMMDD格式 |
| | | */ |
| | | public static String getDays(Date date) { |
| | | return formatDate(date, "yyyyMMdd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD HH:mm:ss格式 |
| | | */ |
| | | public static String getTime() { |
| | | return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD HH:mm:ss.SSS格式 |
| | | */ |
| | | public static String getMsTime() { |
| | | return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYYMMDDHHmmss格式 |
| | | */ |
| | | public static String getAllTime() { |
| | | return formatDate(new Date(), "yyyyMMddHHmmss"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD HH:mm:ss格式 |
| | | */ |
| | | public static String getTime(Date date) { |
| | | return formatDate(date, "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | public static String formatDate(Date date, String pattern) { |
| | | String formatDate = null; |
| | | if (StringUtils.isNotBlank(pattern)) { |
| | | formatDate = DateFormatUtils.format(date, pattern); |
| | | } else { |
| | | formatDate = DateFormatUtils.format(date, "yyyy-MM-dd"); |
| | | } |
| | | return formatDate; |
| | | } |
| | | |
| | | /** |
| | | * 日期比较,如果s>=e 返回true 否则返回false) |
| | | * |
| | | * @author luguosui |
| | | */ |
| | | public static boolean compareDate(String s, String e) { |
| | | if (parseDate(s) == null || parseDate(e) == null) { |
| | | return false; |
| | | } |
| | | return parseDate(s).getTime() >= parseDate(e).getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parseDate(String date) { |
| | | return parse(date, "yyyy-MM-dd"); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parseTimeMinutes(String date) { |
| | | return parse(date, "yyyy-MM-dd HH:mm"); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parseTime(String date) { |
| | | return parse(date, "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parse(String date, String pattern) { |
| | | try { |
| | | if(Objects.nonNull(date)) { |
| | | return DateUtils.parseDate(date, pattern); |
| | | } |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static String format(Date date, String pattern) { |
| | | return DateFormatUtils.format(date, pattern); |
| | | } |
| | | |
| | | /** |
| | | * 把日期转换为Timestamp |
| | | */ |
| | | public static Timestamp format(Date date) { |
| | | return new Timestamp(date.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * 校验日期是否合法 |
| | | */ |
| | | public static boolean isValidDate(String s) { |
| | | return parse(s, "yyyy-MM-dd HH:mm:ss") != null; |
| | | } |
| | | |
| | | /** |
| | | * 校验日期是否合法 |
| | | */ |
| | | public static boolean isValidDate(String s, String pattern) { |
| | | return parse(s, pattern) != null; |
| | | } |
| | | |
| | | public static int getDiffYear(String startTime, String endTime) { |
| | | DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); |
| | | try { |
| | | int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse( |
| | | startTime).getTime()) / (1000 * 60 * 60 * 24)) / 365); |
| | | return years; |
| | | } catch (Exception e) { |
| | | // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对 |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * <li>功能描述:时间相减得到天数 |
| | | */ |
| | | public static long getDaySub(String beginDateStr, String endDateStr) { |
| | | long day = 0; |
| | | SimpleDateFormat format = new SimpleDateFormat( |
| | | "yyyy-MM-dd"); |
| | | Date beginDate = null; |
| | | Date endDate = null; |
| | | |
| | | try { |
| | | beginDate = format.parse(beginDateStr); |
| | | endDate = format.parse(endDateStr); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000); |
| | | // System.out.println("相隔的天数="+day); |
| | | |
| | | return day; |
| | | } |
| | | |
| | | /** |
| | | * 得到n天之后的日期 |
| | | */ |
| | | public static String getAfterDayDate(String days) { |
| | | int daysInt = Integer.parseInt(days); |
| | | |
| | | Calendar canlendar = Calendar.getInstance(); // java.util包 |
| | | canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 |
| | | Date date = canlendar.getTime(); |
| | | |
| | | SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | String dateStr = sdfd.format(date); |
| | | |
| | | return dateStr; |
| | | } |
| | | |
| | | /** |
| | | * 得到n天之后是周几 |
| | | */ |
| | | public static String getAfterDayWeek(String days) { |
| | | int daysInt = Integer.parseInt(days); |
| | | |
| | | Calendar canlendar = Calendar.getInstance(); // java.util包 |
| | | canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 |
| | | Date date = canlendar.getTime(); |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat("E"); |
| | | String dateStr = sdf.format(date); |
| | | |
| | | return dateStr; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 得到系统日期 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDate() { |
| | | TimeZone.setDefault(tz); |
| | | return new Date(); |
| | | } |
| | | |
| | | /** |
| | | * 获取当前毫秒数 |
| | | * |
| | | * @return long |
| | | */ |
| | | public static long getCurMilli() { |
| | | long millisecond = 0; |
| | | Calendar cal = Calendar.getInstance(); |
| | | millisecond = cal.getTimeInMillis(); |
| | | return millisecond; |
| | | } |
| | | |
| | | /** |
| | | * 得到系统Calendar日期 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Calendar getCalendar() { |
| | | TimeZone.setDefault(tz); |
| | | Calendar cal = Calendar.getInstance(); |
| | | return cal; |
| | | } |
| | | /** |
| | | * 毫秒转日期时间 |
| | | * |
| | | * @param millisecond |
| | | * @return |
| | | */ |
| | | public static String getDateTime(long millisecond) { |
| | | if (millisecond == 0) { |
| | | millisecond = getCurMilli(); |
| | | } |
| | | SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | Calendar calendar = getCalendar(); |
| | | calendar.setTimeInMillis(millisecond); |
| | | return dateformat.format(calendar.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * 日期转毫秒(加分钟) |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static long getMillisecond_fz(String date, Integer day) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | String newDate = ""; |
| | | if ("".equals(date)) { |
| | | newDate = sdf.format(DateUtil.getDate()); |
| | | } else { |
| | | newDate = getDateTime(Long.parseLong(date)); |
| | | } |
| | | Date dt = null; |
| | | try { |
| | | dt = sdf.parse(newDate); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | Calendar rightNow = Calendar.getInstance(); |
| | | rightNow.setTime(dt); |
| | | rightNow.add(Calendar.MINUTE, day); |
| | | Date dt1 = rightNow.getTime(); |
| | | return dt1.getTime(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * Double文档 |
| | | */ |
| | | public class DoubleUtil { |
| | | |
| | | public static Double format(Double num) { |
| | | BigDecimal b = new BigDecimal(num); |
| | | num = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | return num; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLDecoder; |
| | | import java.net.URLEncoder; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | public class EmojiUtil { |
| | | /** |
| | | * 编码 |
| | | * |
| | | * @param str 待转换字符串 |
| | | * @return 转换后字符串 |
| | | * @throws UnsupportedEncodingException exception |
| | | * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集) |
| | | */ |
| | | public static String emojiEncode(String str) |
| | | throws UnsupportedEncodingException { |
| | | String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])"; |
| | | |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | Matcher matcher = pattern.matcher(str); |
| | | StringBuffer sb = new StringBuffer(); |
| | | while (matcher.find()) { |
| | | try { |
| | | matcher.appendReplacement( |
| | | sb, |
| | | "[[" |
| | | + URLEncoder.encode(matcher.group(1), |
| | | "UTF-8") + "]]"); |
| | | } catch (UnsupportedEncodingException e) { |
| | | // LOG.error("emojiConvert error", e); |
| | | throw e; |
| | | } |
| | | } |
| | | matcher.appendTail(sb); |
| | | // LOG.debug("emojiConvert " + str + " to " + sb.toString() |
| | | // + ", len:" + sb.length()); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 解码 |
| | | * |
| | | * @param str 转换后的字符串 |
| | | * @return 转换前的字符串 |
| | | * @throws UnsupportedEncodingException exception |
| | | * @Description 还原utf8数据库中保存的含转换后emoji表情的字符串 |
| | | */ |
| | | public static String emojiDecode(String str) |
| | | throws UnsupportedEncodingException { |
| | | String patternString = "\\[\\[(.*?)\\]\\]"; |
| | | |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | if (str == null) { |
| | | return str; |
| | | } |
| | | Matcher matcher = pattern.matcher(str); |
| | | |
| | | StringBuffer sb = new StringBuffer(); |
| | | while (matcher.find()) { |
| | | try { |
| | | matcher.appendReplacement(sb, |
| | | URLDecoder.decode(matcher.group(1), "UTF-8")); |
| | | } catch (UnsupportedEncodingException e) { |
| | | // LOG.error("emojiRecovery error", e); |
| | | throw e; |
| | | } |
| | | } |
| | | matcher.appendTail(sb); |
| | | // LOG.debug("emojiRecovery " + str + " to " + sb.toString()); |
| | | // System.out.println("emojiRecovery " + str + " to " + sb.toString()); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * @param str 待过滤字符串 |
| | | * @return 过滤后字符串 |
| | | * exception |
| | | * @Description 将字符串中的emoji表情过滤掉 |
| | | */ |
| | | public static String emojiSub(String str) { |
| | | String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])"; |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | Matcher matcher = pattern.matcher(str); |
| | | StringBuffer sb = new StringBuffer(); |
| | | while (matcher.find()) { |
| | | matcher.appendReplacement(sb, ""); |
| | | } |
| | | matcher.appendTail(sb); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | public class HeaderAuthUtil { |
| | | |
| | | /** |
| | | * 用户UserId变量 |
| | | */ |
| | | protected final static String HEADER_USERID = "userId"; |
| | | |
| | | /** |
| | | * 获取Request请求头UserId |
| | | * @return |
| | | */ |
| | | public static String getLoginAuthUserId (HttpServletRequest request) { |
| | | String userId = request.getHeader(HEADER_USERID); |
| | | return userId; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.serializer.SerializerFeature; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import com.fasterxml.jackson.databind.JavaType; |
| | | import com.fasterxml.jackson.databind.JsonNode; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.HashMap; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * |
| | | * 返回json数据封装工具类 |
| | | * |
| | | * @ClassName: JsonUtil |
| | | * @author: yuds |
| | | * @date: 2019-09-20 09:19:27 |
| | | * @version: V1.0.0 |
| | | */ |
| | | public class JsonUtil { |
| | | |
| | | /** |
| | | * <li>将对象转化为json输出 |
| | | * <li>QuoteFieldNames ———-输出key时是否使用双引号,默认为true |
| | | * <li>WriteMapNullValue ——–是否输出值为null的字段,默认为false |
| | | * <li>WriteNullNumberAsZero —-数值字段如果为null,输出为0,而非null |
| | | * <li>WriteNullListAsEmpty —–List字段如果为null,输出为[],而非null |
| | | * <li>WriteNullStringAsEmpty —字符类型字段如果为null,输出为”“,而非null |
| | | * <li>WriteNullBooleanAsFalse –Boolean字段如果为null,输出为false,而非null |
| | | * <li>DisableCircularReferenceDetect 禁止循环引用检测 |
| | | */ |
| | | private static SerializerFeature[] serializerFeaturess = { SerializerFeature.WriteMapNullValue, |
| | | SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullListAsEmpty, |
| | | SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullBooleanAsFalse, |
| | | SerializerFeature.DisableCircularReferenceDetect, }; |
| | | |
| | | private JsonUtil() { |
| | | |
| | | } |
| | | |
| | | /** |
| | | * fastJson Object转json |
| | | * |
| | | * @param obj |
| | | * @return |
| | | */ |
| | | public static String objToJson(Object obj) { |
| | | return JSON.toJSONString(obj, serializerFeaturess); |
| | | } |
| | | |
| | | /** |
| | | * fastJson Object转json |
| | | * |
| | | * @param obj |
| | | * @param dateFormat 时间格式化 |
| | | * @return |
| | | */ |
| | | public static String objToJson(Object obj, String dateFormat) { |
| | | return JSON.toJSONStringWithDateFormat(obj, dateFormat, serializerFeaturess); |
| | | } |
| | | |
| | | // 定义jackson对象 |
| | | private static final ObjectMapper MAPPER = new ObjectMapper(); |
| | | |
| | | /** |
| | | * 将对象转换成json字符串。 |
| | | * <p> |
| | | * Title: pojoToJson |
| | | * </p> |
| | | * <p> |
| | | * Description: |
| | | * </p> |
| | | * |
| | | * @param data |
| | | * @return |
| | | */ |
| | | public static String objectToJson(Object data) { |
| | | try { |
| | | SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm"); |
| | | MAPPER.setDateFormat(fmt); |
| | | String string = MAPPER.writeValueAsString(data); |
| | | return string; |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 将json结果集转化为对象 |
| | | * |
| | | * @param jsonData json数据 |
| | | * @param beanType 对象中的object类型 |
| | | * @return |
| | | */ |
| | | public static <T> T jsonToPojo(String jsonData, Class<T> beanType) { |
| | | try { |
| | | T t = MAPPER.readValue(jsonData, beanType); |
| | | return t; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 将json数据转换成pojo对象list |
| | | * <p> |
| | | * Title: jsonToList |
| | | * </p> |
| | | * <p> |
| | | * Description: |
| | | * </p> |
| | | * |
| | | * @param jsonData |
| | | * @param beanType |
| | | * @return |
| | | */ |
| | | public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) { |
| | | JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType); |
| | | try { |
| | | List<T> list = MAPPER.readValue(jsonData, javaType); |
| | | return list; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | public static JsonNode jsonToNode(String jsonData) { |
| | | try { |
| | | return MAPPER.readTree(jsonData); |
| | | } catch (Exception ex) { |
| | | ex.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public static Map<String, String> jsonToMap(String json) { |
| | | JsonNode nodes = jsonToNode(json); |
| | | Iterator<Map.Entry<String, JsonNode>> fields = nodes.fields(); |
| | | Map<String, String> map = new HashMap<>(); |
| | | while (fields.hasNext()) { |
| | | Map.Entry<String, JsonNode> next = fields.next(); |
| | | String value = next.getValue().asText(""); |
| | | map.put(next.getKey(), value); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.time.Duration; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * LocalDateTimeUtils |
| | | * LocalDateTime 时间工具 |
| | | * |
| | | * @author yudeshan |
| | | * @version V1.0 |
| | | */ |
| | | public class LocalDateTimeUtils { |
| | | private final static int[] dayArr = new int[] { 20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22 }; |
| | | private final static String[] constellationArr = new String[] { "摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座" }; |
| | | |
| | | |
| | | /** |
| | | * 取两个时间相差毫秒数 |
| | | * |
| | | * @param start 开始时间 |
| | | * @param end 结束时间 |
| | | * @return |
| | | */ |
| | | public static long betweenMillis(LocalDateTime start, LocalDateTime end) { |
| | | Duration duration = Duration.between(start, end); |
| | | return duration.toMillis(); |
| | | } |
| | | |
| | | /** |
| | | * 通过生日计算年龄 |
| | | * @param birthDay 生日 |
| | | * @return |
| | | * @throws ParseException |
| | | */ |
| | | public static int getAgeByBirth(LocalDate birthDay) throws ParseException { |
| | | int age = 0; |
| | | //出生日期晚于当前时间,无法计算 |
| | | LocalDate now=LocalDate.now(); |
| | | if (birthDay.isAfter(now)) { |
| | | throw new IllegalArgumentException( "生日大于当前时间!"); |
| | | } |
| | | //当前年份 |
| | | int yearNow = now.getYear(); |
| | | //当前月份 |
| | | int monthNow = now.getMonthValue(); |
| | | //当前日期 |
| | | int dayOfMonthNow = now.getDayOfMonth(); |
| | | |
| | | int yearBirth =birthDay.getYear(); |
| | | int monthBirth = birthDay.getMonthValue(); |
| | | int dayOfMonthBirth = birthDay.getDayOfMonth(); |
| | | //计算整岁数 |
| | | age = yearNow - yearBirth; |
| | | if (monthNow <= monthBirth) { |
| | | if (monthNow == monthBirth) { |
| | | if (dayOfMonthNow < dayOfMonthBirth){ |
| | | //当前日期在生日之前,年龄减一 |
| | | age--; |
| | | } |
| | | } else { |
| | | //当前月份在生日之前,年龄减一 |
| | | age--; |
| | | } |
| | | } |
| | | return age; |
| | | } |
| | | |
| | | /** |
| | | * 根据月份计算星座 |
| | | */ |
| | | |
| | | public static String getConstellation(LocalDate date) { |
| | | Integer month=date.getMonthValue(); |
| | | Integer day=date.getDayOfMonth(); |
| | | return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month]; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.MessageSource; |
| | | import org.springframework.context.i18n.LocaleContextHolder; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | |
| | | @Component |
| | | public class MessageUtils { |
| | | |
| | | @Autowired |
| | | private MessageSource messageSource; |
| | | |
| | | /** |
| | | * 根据消息键和参数 获取消息 委托给spring messageSource |
| | | * |
| | | * @param code 消息键 |
| | | * @param args 参数 |
| | | * @return 获取国际化翻译值 |
| | | */ |
| | | public String get(String code, Object... args) { |
| | | return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import com.alibaba.csp.sentinel.util.StringUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import redis.clients.jedis.Jedis; |
| | | import redis.clients.jedis.JedisPool; |
| | | import redis.clients.jedis.Pipeline; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | |
| | | /** |
| | | * Redis工具类 |
| | | */ |
| | | @Component |
| | | public class RedisUtil { |
| | | |
| | | @Autowired |
| | | private JedisPool jedisPool; |
| | | |
| | | |
| | | /** |
| | | * 向redis中存储字符串没有过期时间 |
| | | * Storing strings in Redis without an expiration time. |
| | | * @param key |
| | | * @param value |
| | | */ |
| | | public void setStrValue(String key, String value){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String set = resource.set(key, value); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 以分钟为单位设置存储值(设置过期时间) |
| | | * Set storage value in minutes (set expiration time) as units. |
| | | * @param key |
| | | * @param value |
| | | * @param time 秒 |
| | | */ |
| | | public void setStrValue(String key, String value, int time){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String setex = resource.setex(key, time, value); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 从redis中获取值 |
| | | * @param key |
| | | * @return |
| | | */ |
| | | public String getValue(String key){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String data = resource.get(key); |
| | | closeJedis(resource); |
| | | return data; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 批量获取 |
| | | * @param kes |
| | | * @return |
| | | */ |
| | | public List<Object> getValues(List<String> kes){ |
| | | if(null != kes){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | Pipeline pipelined = resource.pipelined(); |
| | | for(String key : kes){ |
| | | pipelined.get(key); |
| | | } |
| | | List<Object> list = pipelined.syncAndReturnAll(); |
| | | |
| | | closeJedis(resource); |
| | | pipelined.clear(); |
| | | try { |
| | | pipelined.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | List<Object> data = new ArrayList<>(); |
| | | for(Object o : list){ |
| | | if(null != o){ |
| | | data.add(o); |
| | | } |
| | | } |
| | | return data; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除key |
| | | * @param key |
| | | */ |
| | | public void remove(String key){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | Long del = resource.del(key); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除资源 |
| | | * @param jedis |
| | | */ |
| | | public void closeJedis(Jedis jedis){ |
| | | if(null != jedis){ |
| | | jedis.close(); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | |
| | | /** |
| | | * 定义统一返回对象 |
| | | */ |
| | | @ApiModel(value = "统一返回结果集") |
| | | public class ResultUtil<T> { |
| | | |
| | | public static final Integer SUCCESS = 200; |
| | | |
| | | public static final Integer PARAM_ERROR = 300; |
| | | |
| | | public static final Integer RUNTIME_ERROR = 400; |
| | | |
| | | public static final Integer ERROR = 500; |
| | | |
| | | public static final Integer TOKEN_ERROR = 600; |
| | | |
| | | public static final Integer SIGN_ERROR = 700; |
| | | |
| | | public static final String Token = "TOKEN_INVALID"; |
| | | |
| | | public static final String SIGN = "SIGN_INVALID"; |
| | | |
| | | @ApiModelProperty(name = "code", value = "业务状态码 200:成功,300:参数错误,400:运行异常,500:其他异常, 600:token无效,需重新登录,700:签名无效") |
| | | private Integer code;//备用状态码 |
| | | |
| | | @ApiModelProperty(name = "msg", value = "返回结果说明") |
| | | private String msg;//返回说明 |
| | | |
| | | @ApiModelProperty(name = "data", value = "返回结果值") |
| | | private T data;//返回数据 |
| | | |
| | | |
| | | |
| | | public String getMsg() { |
| | | return msg; |
| | | } |
| | | |
| | | public T getData() { |
| | | return data; |
| | | } |
| | | |
| | | |
| | | public Integer getCode() { |
| | | return code; |
| | | } |
| | | |
| | | private ResultUtil(Integer code, String msg) { |
| | | this.code = code; |
| | | this.msg = msg; |
| | | } |
| | | |
| | | private ResultUtil(Integer code, String msg, T data) { |
| | | this.code = code; |
| | | this.msg = msg; |
| | | this.data = data; |
| | | } |
| | | |
| | | |
| | | public static <T> ResultUtil<T> getResult(Integer code, String msg){ |
| | | return new ResultUtil<>(code, msg); |
| | | } |
| | | |
| | | public static <T> ResultUtil<T> getResult(Integer code, String msg, T data){ |
| | | return new ResultUtil<>(code, msg, data); |
| | | } |
| | | |
| | | /** |
| | | * 错误信息 |
| | | * @return |
| | | */ |
| | | public static ResultUtil error(String mag){ |
| | | return ResultUtil.getResult(ResultUtil.ERROR, mag, new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * 错误信息 |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil <T> error(String mag, T obj){ |
| | | return ResultUtil.getResult(ResultUtil.ERROR, mag, obj); |
| | | } |
| | | |
| | | /** |
| | | * token失效 |
| | | * @return |
| | | */ |
| | | public static ResultUtil tokenErr(){ |
| | | return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, ResultUtil.Token, new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * token失效 |
| | | * @return |
| | | */ |
| | | public static ResultUtil tokenErr(String msg){ |
| | | return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, msg, new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * 参数异常 |
| | | * @return |
| | | */ |
| | | public static ResultUtil paranErr(){ |
| | | return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "PARAM_ERROR", new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * 参数异常 |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> paranErr(T data){ |
| | | return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "SYSTEM_RUN_ERROR", data); |
| | | } |
| | | |
| | | @Autowired |
| | | private static MessageUtils messageUtils; |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static ResultUtil runErr(){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", new JSONObject()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static <T>ResultUtil<T> runErr(T data){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", data); |
| | | } |
| | | |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static <T>ResultUtil<T> runErr(T data, String msg){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, msg, data); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param |
| | | * @return |
| | | */ |
| | | public static ResultUtil success(){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new JSONObject()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param data |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> success(T data){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", data); |
| | | } |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param msg |
| | | * @param data |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> success(String msg, T data){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, msg, data); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 签名无效 |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> sign(){ |
| | | return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Random; |
| | | |
| | | |
| | | public class StrUtils { |
| | | /** |
| | | * 把逗号分隔的字符串转换字符串数组 |
| | | * Convert comma-separated string to string array. |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static String[] splitStr2StrArr(String str,String split) { |
| | | if (str != null && !str.equals("")) { |
| | | return str.split(split); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把逗号分隔字符串转换List的Long |
| | | * |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static List<Long> splitStr2LongArr(String str) { |
| | | String[] strings = splitStr2StrArr(str,","); |
| | | if (strings == null) return null; |
| | | |
| | | List<Long> result = new ArrayList<>(); |
| | | for (String string : strings) { |
| | | result.add(Long.parseLong(string)); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | /** |
| | | * 把逗号分隔字符串转换List的Long |
| | | * |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static List<Long> splitStr2LongArr(String str,String split) { |
| | | String[] strings = splitStr2StrArr(str,split); |
| | | if (strings == null) return null; |
| | | |
| | | List<Long> result = new ArrayList<>(); |
| | | for (String string : strings) { |
| | | result.add(Long.parseLong(string)); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | public static String getRandomString(int length) { |
| | | String str = "0123456789"; |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int number = random.nextInt(10); |
| | | sb.append(str.charAt(number)); |
| | | } |
| | | return sb.toString(); |
| | | |
| | | } |
| | | |
| | | public static String getComplexRandomString(int length) { |
| | | String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int number = random.nextInt(62); |
| | | sb.append(str.charAt(number)); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | public static String getClassCodeString(int length) { |
| | | String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int number =random.nextInt(36); |
| | | sb.append(str.charAt(number)); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | public static String convertPropertiesToHtml(String properties){ |
| | | //1:容量:6:32GB_4:样式:12:塑料壳 |
| | | StringBuilder sBuilder = new StringBuilder(); |
| | | String[] propArr = properties.split("_"); |
| | | for (String props : propArr) { |
| | | String[] valueArr = props.split(":"); |
| | | sBuilder.append(valueArr[1]).append(":").append(valueArr[3]).append("<br>"); |
| | | } |
| | | return sBuilder.toString(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import cn.mb.cloud.common.core.exception.BusinessException; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | /** |
| | | * 判断字符串不能为空和null,以及号码格式效验, |
| | | * 否则则抛出异常信息 |
| | | */ |
| | | public class StringUtil { |
| | | private StringUtil() { |
| | | } |
| | | |
| | | public static void checkNull(String str, String message) throws BusinessException { |
| | | if (!StringUtils.hasLength(str)) { |
| | | throw new BusinessException(message); |
| | | } |
| | | } |
| | | |
| | | public static void checkFormat(String str, String message) throws BusinessException { |
| | | if (!str.matches("^1[2|3|4|5|6|7|8|9][0-9]{9}$")) { |
| | | throw new BusinessException(message); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.Date; |
| | | |
| | | |
| | | //根据当前传入的时间,返回距离当前时间多少天 |
| | | |
| | | public class StudyTimeUtil { |
| | | private StudyTimeUtil() { |
| | | } |
| | | |
| | | /** |
| | | * 获取两个时间的间隔(秒)Obtain the time difference between two instances (in seconds). |
| | | * |
| | | * @param startDate 开始的时间 |
| | | * @return 返回当前时间与开始时间的相差天数 |
| | | */ |
| | | public static int getDateBetween(Date startDate) throws ParseException { |
| | | Date endDate = new Date(); |
| | | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | long startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime(); |
| | | long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime(); |
| | | int days = (int)((endDateTime - startDateTime) / (1000 * 3600 * 24)); |
| | | return days; |
| | | } |
| | | |
| | | public static Date getStartDate(LocalDateTime localDate) { |
| | | Date date = Date.from(localDate.atZone(ZoneId.systemDefault()).toInstant()); |
| | | return date; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.account.util; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | @Component |
| | | public class TokenUtil { |
| | | |
| | | @Autowired |
| | | private RedisUtil redisUtil; |
| | | |
| | | |
| | | public Integer getUserIdFormRedis(HttpServletRequest request) throws Exception { |
| | | String requestHeader = request.getHeader("Authorization"); |
| | | if (requestHeader != null && requestHeader.startsWith("Bearer ")) { |
| | | requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1); |
| | | String key = null; |
| | | int length = requestHeader.length(); |
| | | if(length > 32){ |
| | | key = requestHeader.substring(length - 32); |
| | | }else{ |
| | | key = requestHeader; |
| | | } |
| | | String value = redisUtil.getValue(key); |
| | | return null != value ? Integer.valueOf(value) : null; |
| | | }else{ |
| | | return null; |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.account.util.akeylogin; |
| | | |
| | | import java.nio.charset.Charset; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.Base64; |
| | | |
| | | public class Base64Utils { |
| | | private static final Charset DEFAULT_CHARSET; |
| | | |
| | | public Base64Utils() { |
| | | } |
| | | |
| | | public static byte[] encode(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getEncoder().encode(src); |
| | | } |
| | | |
| | | public static byte[] decode(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getDecoder().decode(src); |
| | | } |
| | | |
| | | public static byte[] encodeUrlSafe(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getUrlEncoder().encode(src); |
| | | } |
| | | |
| | | public static byte[] decodeUrlSafe(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getUrlDecoder().decode(src); |
| | | } |
| | | |
| | | public static String encodeToString(byte[] src) { |
| | | return src.length == 0 ? "" : new String(encode(src), DEFAULT_CHARSET); |
| | | } |
| | | |
| | | public static byte[] decodeFromString(String src) { |
| | | return src.isEmpty() ? new byte[0] : decode(src.getBytes(DEFAULT_CHARSET)); |
| | | } |
| | | |
| | | public static String encodeToUrlSafeString(byte[] src) { |
| | | return new String(encodeUrlSafe(src), DEFAULT_CHARSET); |
| | | } |
| | | |
| | | public static byte[] decodeFromUrlSafeString(String src) { |
| | | return decodeUrlSafe(src.getBytes(DEFAULT_CHARSET)); |
| | | } |
| | | |
| | | static { |
| | | DEFAULT_CHARSET = StandardCharsets.UTF_8; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.account.util.akeylogin; |
| | | |
| | | import java.lang.reflect.Array; |
| | | import java.util.Collection; |
| | | import java.util.Map; |
| | | |
| | | public class BaseUtils { |
| | | public static boolean isEmpty(Object target) { |
| | | if (target == null) { |
| | | return true; |
| | | } |
| | | if (target instanceof String && "".equals(target)) { |
| | | return true; |
| | | } else if (target instanceof Collection) { |
| | | return ((Collection<?>) target).isEmpty(); |
| | | } else if (target instanceof Map) { |
| | | return ((Map<?, ?>) target).isEmpty(); |
| | | } else if (target.getClass().isArray()) { |
| | | return Array.getLength(target) == 0; |
| | | } |
| | | return false; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.account.util.akeylogin; |
| | | |
| | | import javax.crypto.Cipher; |
| | | import javax.crypto.SecretKey; |
| | | import javax.crypto.SecretKeyFactory; |
| | | import javax.crypto.spec.DESKeySpec; |
| | | import javax.crypto.spec.IvParameterSpec; |
| | | import java.security.Key; |
| | | import java.security.spec.AlgorithmParameterSpec; |
| | | |
| | | public class DES { |
| | | public static final String ALGORITHM = "DES"; |
| | | public static final String PADDING = "DES/CBC/PKCS5Padding"; |
| | | private static final byte[] DEFAULT_INITIALIZATION_VECTOR = ("00000000".getBytes()); |
| | | |
| | | private String padding = PADDING; |
| | | private byte[] initializationVectorBytes = DEFAULT_INITIALIZATION_VECTOR; |
| | | private AlgorithmParameterSpec paramSpec; |
| | | |
| | | public DES() { |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | public DES(String padding) { |
| | | this.padding = padding; |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | public DES(String padding, byte[] initializationVectorBytes) { |
| | | this.padding = padding; |
| | | this.initializationVectorBytes = initializationVectorBytes; |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | public DES(byte[] initializationVectorBytes) { |
| | | this.initializationVectorBytes = initializationVectorBytes; |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | |
| | | public byte[] encodeBytes(byte[] data, byte[] key) throws Exception { |
| | | Key secretKey = getKey(key); |
| | | Cipher cipher = Cipher.getInstance(padding); |
| | | cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec); |
| | | byte[] bytes = cipher.doFinal(data); |
| | | return bytes; |
| | | } |
| | | |
| | | public byte[] decodeBytes(byte[] data, byte[] key) throws Exception { |
| | | Key secretKey = getKey(key); |
| | | Cipher cipher = Cipher.getInstance(padding); |
| | | cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec); |
| | | return cipher.doFinal(data); |
| | | |
| | | } |
| | | |
| | | public String getPadding() { |
| | | return padding; |
| | | } |
| | | |
| | | public byte[] getInitializationVectorBytes() { |
| | | return initializationVectorBytes; |
| | | } |
| | | |
| | | private static Key getKey(byte[] key) throws Exception { |
| | | DESKeySpec dks = new DESKeySpec(key); |
| | | SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); |
| | | SecretKey secretKey = keyFactory.generateSecret(dks); |
| | | return secretKey; |
| | | } |
| | | |
| | | public static byte[] decode(byte[] data, byte[] key) throws Exception { |
| | | return decode(data, key, DEFAULT_INITIALIZATION_VECTOR); |
| | | } |
| | | |
| | | |
| | | public static byte[] encode(byte[] data, byte[] key) throws Exception { |
| | | return encode(data, key, DEFAULT_INITIALIZATION_VECTOR); |
| | | } |
| | | |
| | | public static byte[] decode(byte[] data, byte[] key, byte[] ivBytes) throws Exception { |
| | | DES des = new DES(PADDING, ivBytes); |
| | | return des.decodeBytes(data, key); |
| | | } |
| | | |
| | | public static byte[] encode(byte[] data, byte[] key, byte[] ivBytes) throws Exception { |
| | | DES des = new DES(PADDING, ivBytes); |
| | | return des.encodeBytes(data, key); |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.account.util.akeylogin; |
| | | |
| | | import java.security.MessageDigest; |
| | | |
| | | public class Md5Util { |
| | | private static final String hexDigIts[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; |
| | | |
| | | /** |
| | | * MD5加密 |
| | | * |
| | | * @param origin 字符 |
| | | * @param charsetname 编码 |
| | | * @return |
| | | */ |
| | | public static String MD5Encode(String origin, String charsetname) { |
| | | String resultString = null; |
| | | try { |
| | | resultString = new String(origin); |
| | | MessageDigest md = MessageDigest.getInstance("MD5"); |
| | | if (null == charsetname || "".equals(charsetname)) { |
| | | resultString = byteArrayToHexString(md.digest(resultString.getBytes())); |
| | | } else { |
| | | resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname))); |
| | | } |
| | | } catch (Exception e) { |
| | | } |
| | | return resultString; |
| | | } |
| | | |
| | | |
| | | public static String byteArrayToHexString(byte b[]) { |
| | | StringBuffer resultSb = new StringBuffer(); |
| | | for (int i = 0; i < b.length; i++) { |
| | | resultSb.append(byteToHexString(b[i])); |
| | | } |
| | | return resultSb.toString(); |
| | | } |
| | | |
| | | public static String byteToHexString(byte b) { |
| | | int n = b; |
| | | if (n < 0) { |
| | | n += 256; |
| | | } |
| | | int d1 = n / 16; |
| | | int d2 = n % 16; |
| | | return hexDigIts[d1] + hexDigIts[d2]; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.account.util.akeylogin; |
| | | |
| | | import java.util.Map; |
| | | import java.util.TreeMap; |
| | | |
| | | public class SignUtil { |
| | | private static String charset = "utf8"; |
| | | |
| | | public static String getSign(Map<String, Object> data, String secret) { |
| | | if (data == null) { |
| | | return null; |
| | | } |
| | | //排序参数 |
| | | Map<String, Object> mappingList = new TreeMap<>(data); |
| | | StringBuilder plainText= new StringBuilder(); |
| | | mappingList.forEach((k, v) -> { |
| | | if (!"sign".equals(k) && !BaseUtils.isEmpty(v)) { |
| | | plainText.append(String.format("%s=%s&", k, v)); |
| | | } |
| | | }); |
| | | String substring = plainText.substring(0, plainText.length() - 1); |
| | | return Md5Util.MD5Encode(substring + secret, charset); |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.activity.advice; |
| | | |
| | | import cn.mb.cloud.common.core.constant.enums.ErrorCodeConstants; |
| | | import cn.mb.cloud.common.core.exception.BusinessException; |
| | | import cn.mb.cloud.common.core.util.ResponseData; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | @Slf4j |
| | | @RestControllerAdvice |
| | | public class ControllerException { |
| | | |
| | | @ExceptionHandler(BusinessException.class) |
| | | @ResponseStatus(HttpStatus.OK) |
| | | @ResponseBody |
| | | public ResponseData bussiness(BusinessException e) { |
| | | log.error("业务异常 message= " + e.getMessage() + " code= " + e.getErrorCode(), e); |
| | | return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()). |
| | | msg(e.getMessage()).build(); |
| | | } |
| | | |
| | | @ExceptionHandler(RuntimeException.class) |
| | | @ResponseStatus(HttpStatus.OK) |
| | | @ResponseBody |
| | | public ResponseData runtimeException(RuntimeException e) { |
| | | log.error("运行时异常信息" + e.getMessage(), e); |
| | | return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()).msg(e.getMessage()).build(); |
| | | } |
| | | |
| | | /** |
| | | * 全局异常. |
| | | * |
| | | * @param e the e |
| | | * @return R |
| | | */ |
| | | |
| | | @ExceptionHandler(Exception.class) |
| | | @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) |
| | | @ResponseBody |
| | | public ResponseData exception(Exception e) { |
| | | log.error("全局异常信息" + e.getMessage(), e); |
| | | return ResponseData.fail(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.Instant; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.*; |
| | | |
| | | |
| | | /** |
| | | * 日期时间类型的工具类,提供对日期和时间基于毫秒及以上精度的格式化方法、 |
| | | * 运算方法、比较方法等。注意:大部分对日期对象(java.util.Date)操作的方法, |
| | | * 不会修改原日期对象,而以一个新的日期对象返回。 |
| | | * <p> |
| | | * <p> |
| | | * <p><pre><b> |
| | | * 历史更新记录:</b> |
| | | * 2004-6-17 创建此类型 |
| | | * 2005-9-30 修改方法:parseToDate(),去掉了对年份从(1970-9999)这个范围的限制。抛出异常:IllegalArgumentException(),JThinkRuntimeException() |
| | | * 2005-10-2 修改方法: 其它方法,抛出异常:IllegalArgumentException(),JThinkRuntimeException() |
| | | * 2005-10-2 增加方法: addTime(Date d, double times, int type) |
| | | * 2005-10-2 增加方法: addSystemTime() |
| | | * 2005-10-2 修改方法, 对于所有以日期对象类型java.util.Date为参数的方法,如果日期为null,都抛出异常:IllegalArgumentException() |
| | | * <p> |
| | | * </pre></p> |
| | | */ |
| | | |
| | | public final class DateTimeHelper { |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8:26:30.400 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmssSa_12 = "yyyy-MM-dd KK:mm:ss.S a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8:26:16 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmssa_12 = "yyyy-MM-dd KK:mm:ss a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8:26 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmma_12 = "yyyy-MM-dd KK:mm a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHa_12 = "yyyy-MM-dd KK a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-07-05 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMdda_12 = "yyyy-MM-dd a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08:26:30.400 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmssS = "yyyy-MM-dd HH:mm:ss.S"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08:26:16 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08:26 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmm = "yyyy-MM-dd HH:mm"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHH = "yyyy-MM-dd HH"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-07-05 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMdd = "yyyy-MM-dd"; |
| | | /** |
| | | * 把时间格式化成如:2002-07 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMM = "yyyy-MM"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:07.19 格式的字符串 |
| | | */ |
| | | public final static String FMT_MMdd = "MM.dd"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:12:08 PM(下午) 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmA_12 = "KK:mm a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:55 AM上午, CST 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmAz_12 = "KK:mm a,z"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:56 AM上午, 中国标准时间 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmAzzzz_12 = "KK:mm a,zzzz"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:12:08:23 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssA_12 = "KK:mm:ss a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:55:33 AM上午, CST 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssAz_12 = "KK:mm:ss a,z"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:56:23 AM上午, 中国标准时间 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssAzzzz_12 = "KK:mm:ss a,zzzz"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04:45 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmss = "HH:mm:ss"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04:45.824 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssS = "HH:mm:ss.S"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmm = "HH:mm"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04,CST 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmz = "HH:mm,z"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04,中国标准时间 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmzzzz = "HH:mm,zzzz"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串 |
| | | */ |
| | | public final static String FMT_WWMMDDYY_EN = "EEE,MMM d,''yyyy"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串 |
| | | */ |
| | | public final static String FMT_WWMMDDYY_CN = "EEE,yyyy年MMMd号"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串 |
| | | */ |
| | | public final static String FMT_MMDDYY_EN = "MMM d,''yyyy"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串 |
| | | */ |
| | | public final static String FMT_MMDDYY_CN = "yyyy年MMMd号"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:星期几 格式的字符串,即可获得该日这个时间是星期几 |
| | | */ |
| | | public final static String FMT_WW = "EEE"; |
| | | |
| | | public final static String FMT_ddMMyyyy = "dd-MM-yyyy"; |
| | | |
| | | /** |
| | | * 把时间格式成日期数字,如:20120606 |
| | | */ |
| | | public final static String FMT_yyyyMMdd_noseparator = "yyyyMMdd"; |
| | | |
| | | public final static String FMT_yyyyMMdd_Zh = "yyyy年MM月dd日"; |
| | | |
| | | public final static String FMT_yyyyMMddHH_noseparator = "yyyyMMddHH"; |
| | | |
| | | /** |
| | | * 把时间格式成日期数字,如:20120606121212 |
| | | */ |
| | | public final static String FMT_yyyyMMddhhmmss_noseparator = "yyyyMMddHHmmss"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002.07.05 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyxMMxdd = "yyyy.MM.dd"; |
| | | /** |
| | | * 常用的格式化时间的格式组,用于本类中格式化字符串成时间型 |
| | | */ |
| | | private final static String[] formatStr = { |
| | | FMT_ddMMyyyy, |
| | | FMT_yyyyMMddHHmmssS, |
| | | FMT_yyyyMMddHHmmss, |
| | | FMT_yyyyMMddHHmm, |
| | | FMT_yyyyMMddHH, |
| | | FMT_yyyyMMdd, |
| | | FMT_HHmmss, |
| | | FMT_HHmmssS, |
| | | FMT_HHmm, |
| | | FMT_HHmmz, |
| | | FMT_HHmmzzzz, |
| | | FMT_yyyyMMddHHmmssSa_12, |
| | | FMT_yyyyMMddHHmmssa_12, |
| | | FMT_yyyyMMddHHmma_12, |
| | | FMT_yyyyMMddHHa_12, |
| | | FMT_yyyyMMdda_12, |
| | | FMT_HHmmA_12, |
| | | FMT_HHmmAz_12, |
| | | FMT_HHmmAzzzz_12, |
| | | FMT_HHmmssA_12, |
| | | FMT_HHmmssAz_12, |
| | | FMT_HHmmssAzzzz_12 |
| | | }; |
| | | |
| | | |
| | | /** |
| | | * 私有化构造器,使得不能产生该类对象,类中所有的方法均为静态方法 |
| | | */ |
| | | private DateTimeHelper() { |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param date |
| | | * @param formatStr |
| | | * @return 如果为null,返回字符串"" |
| | | */ |
| | | public static String formatDateTimetoString(Date date, String formatStr) { |
| | | String reStr = ""; |
| | | if (date == null || formatStr == null || formatStr.trim().length() < 1) { |
| | | return reStr; |
| | | } |
| | | SimpleDateFormat sdf = new SimpleDateFormat(); |
| | | sdf.applyPattern(formatStr); |
| | | reStr = sdf.format(date); |
| | | return reStr; |
| | | } |
| | | |
| | | public static Date getSystemDate(String fmtstr) { |
| | | try { |
| | | return parseToDate(formatDateTimetoString(getSystemDate(), fmtstr)); |
| | | } catch (Exception e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | return getSystemDate(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值和格式串采用给定的国家所在的国家风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param date 日期对象 |
| | | * @param formatStr 日期格式 |
| | | * @return 如果为null,返回字符串"" |
| | | */ |
| | | public static String formatDateTimetoString(Date date, String formatStr, Locale locale) { |
| | | String reStr = ""; |
| | | if (date == null || formatStr == null || locale == null || formatStr.trim().length() < 1) { |
| | | return reStr; |
| | | } |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale); |
| | | reStr = sdf.format(date); |
| | | return reStr; |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值字符串和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param dateStr 日期串 |
| | | * @param formatStr 日期格式 |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateStr, String formatStr) throws Exception { |
| | | String dStr = ""; |
| | | if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0) { |
| | | dStr = formatDateTimetoString(parseToDate(dateStr), formatStr); |
| | | } |
| | | return dStr; |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值字符串和格式串采用指定国家的风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param dateStr 日期串 |
| | | * @param formatStr 日期格式 |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateStr, String formatStr, Locale locale) throws Exception { |
| | | String dStr = ""; |
| | | if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0 && locale != null) { |
| | | dStr = formatDateTimetoString(parseToDate(dateStr, locale), formatStr, locale); |
| | | } |
| | | return dStr; |
| | | } |
| | | |
| | | /** |
| | | * 按指定的格式和操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @param formatStr |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr, String formatStr) throws Exception { |
| | | if (dateTimeStr == null || formatStr == null || dateTimeStr.trim().length() < 1 || formatStr.trim().length() < 1) { |
| | | throw new IllegalArgumentException("参数dateTimeStr、formatStr不能是null或空格串!"); |
| | | } |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | throw new Exception(e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 按指定的格式和指定国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @param formatStr |
| | | * @param locale |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr, String formatStr, Locale locale) throws Exception { |
| | | if (dateTimeStr != null && formatStr != null && locale != null && dateTimeStr.trim().length() > 0 && formatStr.trim().length() > 0) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | throw new Exception(e); |
| | | } |
| | | } else { |
| | | throw new IllegalArgumentException("参数dateTimeStr、formatStr、locale不能是null或空格串!"); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 按操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr) throws Exception { |
| | | if (dateTimeStr == null || dateTimeStr.trim().length() < 1) { |
| | | throw new IllegalArgumentException("参数dateTimeSt不能是null或空格串!"); |
| | | } |
| | | int formatStrLength = formatStr.length; |
| | | int i = 0; |
| | | |
| | | for (i = 0; i < formatStrLength; i++) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i]); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | } |
| | | } |
| | | throw new Exception("日期格式不正确!"); |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的年月和日返回一个日期型的对象 |
| | | * |
| | | * @param year 年 |
| | | * @param month 月 ,1到12 |
| | | * @param day 日 ,1到31 |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(int year, int month, int day) throws Exception { |
| | | if (month < 1 || month > 12 || day < 1 || day > 31) { |
| | | throw new IllegalArgumentException("参数不正确!"); |
| | | } |
| | | String yearStr = String.valueOf(year); |
| | | String monthStr = String.valueOf(month); |
| | | String dayStr = String.valueOf(day); |
| | | |
| | | return parseToDate(yearStr + "-" + monthStr + "-" + dayStr); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的年月日、时分秒、返回一个对应的Date型对象 |
| | | * |
| | | * @param year 年 |
| | | * @param month 月 ,1到12 |
| | | * @param day 日 ,1到31 |
| | | * @param h 小时,从0到23 |
| | | * @param m 分,从0到60 |
| | | * @param s 秒,从0到60 |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(int year, int month, int day, int h, int m, int s) throws Exception { |
| | | if (month < 1 || month > 12 || day < 1 || day > 31 || h < 0 || h > 23 || m < 0 || m > 60 || s < 0 || s > 60) { |
| | | throw new IllegalArgumentException("参数不正确!"); |
| | | } |
| | | String yearStr = String.valueOf(year); |
| | | String monthStr = String.valueOf(month); |
| | | String dayStr = String.valueOf(day); |
| | | String hStr = String.valueOf(h); |
| | | String mStr = String.valueOf(m); |
| | | String sStr = String.valueOf(s); |
| | | |
| | | return parseToDate(yearStr + "-" + monthStr + "-" + dayStr + " " + hStr + ":" + mStr + ":" + sStr); |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 按指定国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr, Locale locale) throws Exception { |
| | | if (dateTimeStr == null || dateTimeStr.trim().length() < 1 || locale == null) { |
| | | throw new IllegalArgumentException("参数dateTimeSt、locale不能是null或空格串!"); |
| | | } |
| | | int formatStrLength = formatStr.length; |
| | | int i = 0; |
| | | for (i = 0; i < formatStrLength; i++) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i], locale); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | } |
| | | } |
| | | throw new Exception("日期格式不正确!"); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateTimeStr) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateTimeStr, Locale locale) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按操作系统默认的国家内格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTime |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDateTimetoString(Date dateTime) { |
| | | return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTime |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDateTimetoString(Date dateTime, Locale locale) { |
| | | return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param date |
| | | * @param dateStr 日期串 |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDatetoString(Date date, String dateStr) throws Exception { |
| | | return formatDateTimetoString(dateStr, FMT_yyyyMMdd); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期字符串按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param dateStr 日期串 |
| | | * @param locale Locale |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDatetoString(String dateStr, Locale locale) throws Exception { |
| | | return formatDateTimetoString(dateStr, FMT_yyyyMMdd, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期按指定操作系统默认国家的风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param d 日期对象 |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDatetoString(Date d) { |
| | | return formatDateTimetoString(d, FMT_yyyyMMdd); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param d 日期对象 |
| | | * @param locale Locale |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDatetoString(Date d, Locale locale) { |
| | | return formatDateTimetoString(d, FMT_yyyyMMdd, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatTimetoString(String dateTimeStr) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按指定国家的风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatTimetoString(String dateTimeStr, Locale locale) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按指定操作系统默认国家的风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatTimetoString(Date dateTimeStr) { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按指定国家的风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatTimetoString(Date dateTimeStr, Locale locale) { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的年份整数 |
| | | * |
| | | * @param d |
| | | * @return 年份 |
| | | */ |
| | | public static int getYearOfDate(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.YEAR); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的月份整数 |
| | | * |
| | | * @param d |
| | | * @return 月份 |
| | | */ |
| | | public static int getMonthOfYear(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.MONTH) + 1; |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的天份整数,是这个月的第几天 |
| | | * |
| | | * @param d |
| | | * @return 天份 |
| | | */ |
| | | public static int getDayOfMonth(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.DAY_OF_MONTH); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的天份整数,是这个年份的第几天 |
| | | * |
| | | * @param d |
| | | * @return 天份 |
| | | */ |
| | | public static int getDayOfYear(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.DAY_OF_YEAR); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的天份整数,是这个周的第几天 |
| | | * |
| | | * @param d |
| | | * @return 天份 |
| | | */ |
| | | public static int getDayOfWeek(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.DAY_OF_WEEK) - 1; |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的周的整数,是这个月的第几周 |
| | | * |
| | | * @param d |
| | | * @return 周 |
| | | */ |
| | | public static int getWeekOfMonth(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.WEEK_OF_MONTH); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的周的整数,是这个年份的第几周 |
| | | * |
| | | * @param d |
| | | * @return 周 |
| | | */ |
| | | public static int getWeekOfYear(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.WEEK_OF_YEAR); |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的在一天中的小时数的整数,如当前(Date now)是下午3点,返回为15 |
| | | * |
| | | * @param d |
| | | * @return 小时 |
| | | */ |
| | | public static int getHoursOfDay(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int hours = calendar.get(Calendar.HOUR_OF_DAY); |
| | | return hours; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的在一天中的小时数的整数(采用12小时制),如当前(Date now)是下午3点,返回为3 |
| | | * |
| | | * @param d |
| | | * @return 小时 |
| | | */ |
| | | public static int getHoursOfDay12(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int hours = calendar.get(Calendar.HOUR); |
| | | return hours; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回该时间所对应的分钟数中的整数,如now是15点14分,则返回14 |
| | | * |
| | | * @param d |
| | | * @return 分钟 |
| | | */ |
| | | public static int getMinutesOfHour(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int minutes = calendar.get(Calendar.MINUTE); |
| | | |
| | | return minutes; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的秒数中的整数,如now是15点14分34秒,则返回34 |
| | | * |
| | | * @param d |
| | | * @return 秒 |
| | | */ |
| | | public static int getSecondsOfMinute(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int seconds = calendar.get(Calendar.SECOND); |
| | | |
| | | return seconds; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的毫秒数中的整数,如now是15点14分34秒470毫秒,则返回470 |
| | | * |
| | | * @param d |
| | | * @return 毫秒 |
| | | */ |
| | | public static int getMillisecondsOfSecond(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int millisecond = calendar.get(Calendar.MILLISECOND); |
| | | |
| | | return millisecond; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间相对于1970年1月1日开始计算的对应的毫秒数 |
| | | * |
| | | * @param d |
| | | * @return 毫秒数 |
| | | */ |
| | | public static long getTime(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | return d.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 比较两个时间的先后顺序。 |
| | | * 如果时间d1在d2之前,返回1, |
| | | * 如果时间d1在d2之后,返回-1, |
| | | * 如果二者相等,返回0 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 如果时间d1在d2之前,返回1, |
| | | * 如果时间d1在d2之后,返回-1, |
| | | * 如果二者相等,返回0 |
| | | */ |
| | | public static int compareTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | |
| | | long dI1 = d1.getTime(); |
| | | long dI2 = d2.getTime(); |
| | | |
| | | if (dI1 > dI2) { |
| | | return -1; |
| | | } else if (dI1 < dI2) { |
| | | return 1; |
| | | } else { |
| | | return 0; |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 返回两个日期之间的毫秒数的差距 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 二者至1970年1.1后的毫秒数的差值 |
| | | */ |
| | | public static long getMillisecondsOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long dI1 = d1.getTime(); |
| | | long dI2 = d2.getTime(); |
| | | return (dI1 - dI2); |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的秒数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的秒数 |
| | | */ |
| | | public static double getSecondsOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long i = getMillisecondsOfTwoDate(d1, d2); |
| | | |
| | | return (double) i / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的分钟数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的分钟数 |
| | | */ |
| | | public static double getMinutesOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return (double) millions / 60 / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的小时数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的小时数 |
| | | */ |
| | | public static double getHoursOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return (double) millions / 60 / 60 / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的天数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的天数 |
| | | */ |
| | | public static double getDaysOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return (double) millions / 24 / 60 / 60 / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的天数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的天数 |
| | | */ |
| | | public static Long daysOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return millions / 24 / 60 / 60 / 1000; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的时间值,可以为负。 |
| | | * |
| | | * @param d 日期对象 |
| | | * @param times 时间值 |
| | | * @param type 类型, |
| | | * Calendar.MILLISECOND,毫秒<BR> |
| | | * Calendar.SECOND,秒<BR> |
| | | * Calendar.MINUTE,分钟<BR> |
| | | * Calendar.HOUR,小时<BR> |
| | | * Calendar.DATE,日<BR> |
| | | * @return 如果d为null,返回null |
| | | */ |
| | | public static Date addTime(Date d, double times, int type) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | long qv = 1; |
| | | switch (type) { |
| | | case Calendar.MILLISECOND: |
| | | qv = 1; |
| | | break; |
| | | case Calendar.SECOND: |
| | | qv = 1000; |
| | | break; |
| | | case Calendar.MINUTE: |
| | | qv = 1000 * 60; |
| | | break; |
| | | case Calendar.HOUR: |
| | | qv = 1000 * 60 * 60; |
| | | break; |
| | | case Calendar.DATE: |
| | | qv = 1000 * 60 * 60 * 24; |
| | | break; |
| | | default: |
| | | throw new RuntimeException("时间类型不正确!type=" + type); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | long milliseconds = (long) Math.round(Math.abs(times) * qv); |
| | | if (times > 0) { |
| | | for (; milliseconds > 0; milliseconds -= 2147483647) { |
| | | if (milliseconds > 2147483647) { |
| | | calendar.add(Calendar.MILLISECOND, 2147483647); |
| | | } else { |
| | | calendar.add(Calendar.MILLISECOND, (int) milliseconds); |
| | | } |
| | | } |
| | | } else { |
| | | for (; milliseconds > 0; milliseconds -= 2147483647) { |
| | | if (milliseconds > 2147483647) { |
| | | calendar.add(Calendar.MILLISECOND, -2147483647); |
| | | } else { |
| | | calendar.add(Calendar.MILLISECOND, -(int) milliseconds); |
| | | } |
| | | } |
| | | } |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的年份,可以为负, 返回新的被加上了年份的日期对象,不影响参数日期对象值 |
| | | * Given a certain time and a specified year, which can be negative, returns a new date object with the added year, without affecting the value of the original date object. |
| | | * @param d |
| | | * @param years |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addYears(Date d, int years) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.YEAR, years); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的月份,可以为负 |
| | | * Adding the specified number of month to the given time is possible, including negative values. |
| | | * @param d |
| | | * @param months |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addMonths(Date d, int months) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.MONTH, months); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的天数,可以为负 |
| | | * Adding the specified number of day to the given time is possible, including negative values. |
| | | * @param d 日期对象 |
| | | * @param days |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addDays(Date d, int days) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.HOUR, days * 24); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的小时,可以为负 |
| | | * Adding the specified number of hour to the given time is possible, including negative values. |
| | | * @param d 日期对象 |
| | | * @param hours |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addHours(Date d, int hours) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.HOUR, hours); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的分钟,可以为负 |
| | | * Adding the specified number of minute to the given time is possible, including negative values. |
| | | * @param d |
| | | * @param minutes |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addMinutes(Date d, int minutes) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.MINUTE, minutes); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的秒数,可以为负 |
| | | * Adding the specified number of seconds to the given time is possible, including negative values. |
| | | * @param d |
| | | * @param seconds |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addSeconds(Date d, int seconds) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.SECOND, seconds); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的毫秒数,可以为负 |
| | | * Adding the specified number of milliseconds to the given time can result in a negative value. |
| | | * @param d |
| | | * @param milliseconds |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addMilliseconds(Date d, int milliseconds) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.MILLISECOND, milliseconds); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的年份是新的给定的年份 |
| | | * Setting the year of a date object to a new given year. |
| | | * @param d 需要设定的日期对象 |
| | | * @param year 新的年份 |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date setYearOfDate(Date d, int year) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.YEAR, year); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的月份是新的给定的月份 |
| | | * Set the month of a date object to a new given month. |
| | | * @param d 需要设定的日期对象 |
| | | * @param month 新的月份 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setMonthOfDate(Date d, int month) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.MONTH, month); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的天是新的给定的天 |
| | | * Set the day of a date object to a new given day. |
| | | * @param d 需要设定的日期对象 |
| | | * @param day 新的天 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setDayOfDate(Date d, int day) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.DAY_OF_MONTH, day); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的小时是新的给定的小时 |
| | | * Setting the hour of a date object to a new given hour. |
| | | * @param d 需要设定的日期对象 |
| | | * @param hour 新的小时数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setHourOfDate(Date d, int hour) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.HOUR_OF_DAY, hour); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的分钟是新的给定的分钟数 |
| | | * Set the minutes of a date object to a new given minute value. |
| | | * @param d 需要设定的日期对象 |
| | | * @param minute 新的分钟数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setMinuteOfDate(Date d, int minute) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.MINUTE, minute); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的秒数是新的给定的分钟数 |
| | | * Setting the seconds of a date object to the new given minute value. |
| | | * |
| | | * @param d 需要设定的日期对象 |
| | | * @param second 新的秒数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setSecondOfDate(Date d, int second) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.SECOND, second); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的毫秒数是新的给定的分钟数 |
| | | * Setting the milliseconds of a date object to a new given minute value. |
| | | * @param d 需要设定的日期对象 |
| | | * @param millisecond 新的毫秒数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setMillisecondOfDate(Date d, int millisecond) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.MILLISECOND, millisecond); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回指定日期的月份的天数量 |
| | | * Retrieve the number of days in the month of the specified date. |
| | | * @param d 日期对象 |
| | | */ |
| | | public static int getDaysOfMonth(Date d) { |
| | | int year = getYearOfDate(d); |
| | | int month = getMonthOfYear(d); |
| | | return getDaysOfMonth(year, month); |
| | | } |
| | | |
| | | /** |
| | | * 返回指定日期的月份的天数量 |
| | | * Retrieve the number of days in the month of the specified date. |
| | | * @param year 年 |
| | | * @param month 月 |
| | | */ |
| | | public static int getDaysOfMonth(int year, int month) { |
| | | int days = 0; |
| | | if (month == 2) { |
| | | if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { |
| | | days = 29; |
| | | } else { |
| | | days = 28; |
| | | } |
| | | } |
| | | if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) { |
| | | days = 30; |
| | | } |
| | | if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) { |
| | | days = 31; |
| | | } |
| | | return days; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回系统时间,以日期对象形式返回 |
| | | * |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date getSystemDate() { |
| | | return new Date(System.currentTimeMillis()); |
| | | } |
| | | |
| | | /** |
| | | * 返回系统时间,以毫秒形式返回 |
| | | * |
| | | * @return 毫秒数 |
| | | */ |
| | | public static long getSystemTime() { |
| | | return System.currentTimeMillis(); |
| | | } |
| | | |
| | | /** |
| | | * 返回24小时前的时间 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getLastDay(Date date) { |
| | | long day = date.getTime(); |
| | | long lastDay = day - 24 * 60 * 60 * 1000; |
| | | return new Date(lastDay); |
| | | } |
| | | |
| | | /** |
| | | * 返回24小时后的时间 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getTomorrow(Date date) { |
| | | long day = date.getTime(); |
| | | long tomorrow = day + 24 * 60 * 60 * 1000; |
| | | return new Date(tomorrow); |
| | | } |
| | | |
| | | /** |
| | | * 取得30天前的这个时间 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDayLastMonth() { |
| | | long day = new Date().getTime(); |
| | | long dayLastMonth = day - 24 * 60 * 60 * 1000 * 20; |
| | | return new Date(dayLastMonth); |
| | | } |
| | | |
| | | /** |
| | | * 取得30天后的这个时间 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDayNextMonth() { |
| | | long day = new Date().getTime(); |
| | | long dayNextMonth = day + 20 * 24 * 60 * 60 * 1000; |
| | | return new Date(dayNextMonth); |
| | | } |
| | | |
| | | public static int getMonthCount(Date sDate, Date eDate) { |
| | | String sDateStr = DateTimeHelper.formatDateTimetoString(sDate, "MM"); |
| | | String eDateStr = DateTimeHelper.formatDateTimetoString(eDate, "MM"); |
| | | int monthCount = Integer.parseInt(eDateStr) - Integer.parseInt(sDateStr) + 1; |
| | | return monthCount; |
| | | } |
| | | |
| | | /** |
| | | * 取得下个月的这天,比如2月1日可取得3月1日,此方法有很大局限性,不能用于月末的天数 |
| | | * Obtain the same day of the following month, for example, February 1st can obtain March 1st. This method has significant limitations and cannot be used for the last days of the month. |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getDayNextMonth(Date date) { |
| | | String yearStr = DateTimeHelper.formatDateTimetoString(date, "yyyy"); |
| | | String monthStr = DateTimeHelper.formatDateTimetoString(date, "MM"); |
| | | String dayStr = DateTimeHelper.formatDateTimetoString(date, "dd"); |
| | | int year = Integer.parseInt(yearStr); |
| | | int month = Integer.parseInt(monthStr); |
| | | if (month == 12) { |
| | | month = 1; |
| | | year = year + 1; |
| | | yearStr = String.valueOf(year); |
| | | monthStr = String.valueOf(month); |
| | | } |
| | | |
| | | String dateStr = yearStr + "-" + monthStr + "-" + dayStr; |
| | | try { |
| | | date = DateTimeHelper.parseToDate(dateStr); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return date; |
| | | } |
| | | |
| | | /** |
| | | * 获取当月开始时0点0分0秒 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getCurrentMouthStart() { |
| | | Date d = getSystemDate(); |
| | | d = setDayOfDate(d, 1); |
| | | d = setHourOfDate(d, 0); |
| | | d = setMinuteOfDate(d, 0); |
| | | d = setSecondOfDate(d, 0); |
| | | return d; |
| | | } |
| | | |
| | | /** |
| | | * 返回下月的这天 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getDateNextMonth(Date date) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.add(Calendar.MONTH, +1); |
| | | return cal.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 根据时间获取和当前时间的差距. |
| | | * Obtain the difference between the current time and the time in question. |
| | | * @param date - 待比较实际 |
| | | * @return 时间差距字符串 |
| | | */ |
| | | public static String getPassdTime(Date date) { |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | String ret = null; |
| | | |
| | | // 计算和当前相差秒数 |
| | | // Calculate the difference in seconds from the current time. |
| | | long currentTimeMillis = System.currentTimeMillis(); |
| | | long timeDiff = (currentTimeMillis - date.getTime()); |
| | | |
| | | int seconds = (int) (timeDiff / 1000); |
| | | int minutes = seconds / 60; |
| | | int hours = minutes / 60; |
| | | int days = hours / 24; |
| | | int months = days / 30; |
| | | |
| | | if (days <= 7) { |
| | | if (days != 0) { |
| | | ret = days + "天前"; |
| | | } else if (hours != 0) { |
| | | ret = hours + "小时前"; |
| | | } else if (minutes != 0) { |
| | | ret = minutes + "分钟前"; |
| | | } else { |
| | | ret = "刚刚"; |
| | | } |
| | | } else { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// HH:mm:ss"); |
| | | ret = sdf.format(date); |
| | | } |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前日期后几天的日期 |
| | | * Obtaining the date of the day after several days from the current date. |
| | | * @param day 天数 |
| | | * @return |
| | | */ |
| | | public static Date getCurrentNextDays(int day) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.add(Calendar.DAY_OF_YEAR, day); |
| | | Date date = calendar.getTime(); |
| | | return date; |
| | | } |
| | | |
| | | public static String getCurrentStringDate() { |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | String dateString = simpleDateFormat.format(new Date()); |
| | | return dateString; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前日期是星期几<br> |
| | | * Obtain the day of the week for the current date. |
| | | * @param dt |
| | | * @return 当前日期是星期几 |
| | | */ |
| | | public static String getWeekOfDate(Date dt) { |
| | | String[] weekDays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"}; |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(dt); |
| | | int w = cal.get(Calendar.DAY_OF_WEEK) - 1; |
| | | if (w < 0) { |
| | | w = 0; |
| | | } |
| | | return weekDays[w]; |
| | | } |
| | | |
| | | /** |
| | | * 获取今天时间 2017-11-20 00:00:00 |
| | | */ |
| | | public static Date todayDate() { |
| | | try { |
| | | String date = formatDatetoString(new Date()); |
| | | String todayString = date + " 00:00:00"; |
| | | return parseToDate(todayString, FMT_yyyyMMdd); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return new Date(); |
| | | } |
| | | |
| | | /** |
| | | * 获取指定日期的 时间 2017-11-20 00:00:00 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date createDate(Date date) { |
| | | try { |
| | | String dates = formatDatetoString(date); |
| | | String todayString = dates + " 00:00:00"; |
| | | return parseToDate(todayString, FMT_yyyyMMdd); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return new Date(); |
| | | } |
| | | |
| | | |
| | | public static String createDateTime(Date date) { |
| | | try { |
| | | String dates = formatDatetoString(date); |
| | | String time = DateTimeHelper.formatDateTimetoString(new Date(), FMT_HHmmss); |
| | | String todayString = dates + " " + time; |
| | | return todayString; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static String getTimeHint(Date time) { |
| | | String hint = ""; |
| | | double minutes = DateTimeHelper.getMinutesOfTwoDate(new Date(), time); |
| | | double hours = DateTimeHelper.getHoursOfTwoDate(new Date(), time); |
| | | double days = DateTimeHelper.getDaysOfTwoDate(new Date(), time); |
| | | if (minutes < 1) { |
| | | hint = "刚刚"; |
| | | } else if (hours < 1) { |
| | | hint = new Double(minutes).intValue() + "分钟前"; |
| | | } else if (days < 1) { |
| | | hint = new Double(hours).intValue() + "小时前"; |
| | | } else if (days < 7) { |
| | | hint = new Double(days).intValue() + "天前"; |
| | | } else { |
| | | hint = DateTimeHelper.formatDateTimetoString(time, DateTimeHelper.FMT_yyyyMMdd); |
| | | } |
| | | return hint; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据时间获取和当前时间的差距. |
| | | * Obtain the difference between the current time and the time in question. |
| | | * @param date - 待比较实际 |
| | | * @return 时间差距字符串 |
| | | */ |
| | | public static String getLoginTime(Date date) { |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | String ret = null; |
| | | |
| | | // 计算和当前相差秒数 |
| | | //Calculate the difference in seconds from the current time. |
| | | long currentTimeMillis = System.currentTimeMillis(); |
| | | long timeDiff = (currentTimeMillis - date.getTime()); |
| | | |
| | | int seconds = (int) (timeDiff / 1000); |
| | | int minutes = seconds / 60; |
| | | int hours = minutes / 60; |
| | | int days = hours / 24; |
| | | int months = days / 30; |
| | | |
| | | if (months != 0) { |
| | | ret = "1个月前"; |
| | | } else if (days != 0) { |
| | | ret = days + "天前"; |
| | | } else if (hours != 0) { |
| | | ret = hours + "小时前"; |
| | | } else if (minutes != 0) { |
| | | ret = minutes + "分钟前"; |
| | | } else { |
| | | ret = "刚刚"; |
| | | } |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | |
| | | public static Date getWXTime() { |
| | | |
| | | Calendar calendar = Calendar.getInstance(Locale.CHINA); |
| | | Date date = calendar.getTime(); |
| | | |
| | | return date; |
| | | } |
| | | |
| | | /** |
| | | * 是否是同一天 |
| | | * it the same day |
| | | * @param first |
| | | * @param second |
| | | * @return |
| | | */ |
| | | public static Boolean isSameDay(Date first, Date second) { |
| | | |
| | | if (first == null || second == null) { |
| | | return false; |
| | | } |
| | | |
| | | int day1 = getDayOfYear(first); |
| | | int day2 = getDayOfYear(second); |
| | | if (day1 != day2) { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 是否超过指定时刻 |
| | | * Has the specified time limit been exceeded |
| | | * @param day 时间 |
| | | * @param time 指定时刻 |
| | | * @return |
| | | */ |
| | | public static Boolean expireDayTime(Date day, Integer time) { |
| | | if (null == day) { |
| | | return false; |
| | | } |
| | | try { |
| | | String dates = formatDatetoString(day); |
| | | String timeHour = ""; |
| | | for (int i = 0; i <= 23; i++) { |
| | | if (i == time) { |
| | | if (i < 10) { |
| | | timeHour += " 0" + time + ":00:00"; |
| | | } else if (i < 23) { |
| | | timeHour += " " + time + ":00:00"; |
| | | } else { |
| | | timeHour += " 00" + time + ":00:00"; |
| | | } |
| | | } |
| | | } |
| | | String todayString = dates + timeHour; |
| | | Date esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss); |
| | | if (DateTimeHelper.compareTwoDate(day, esDayTime) != 1) { |
| | | int i = compareTwoDate(day, esDayTime); |
| | | System.out.println(i); |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 指定一天哪一个小时 |
| | | * Specify which hour of a particular day. |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static Date createDayTime(Integer time) { |
| | | String dates = formatDatetoString(new Date()); |
| | | String timeHour = ""; |
| | | for (int i = 0; i <= 23; i++) { |
| | | if (i == time) { |
| | | if (i < 10) { |
| | | timeHour += " 0" + time + ":00:00"; |
| | | } else if (i < 23) { |
| | | timeHour += " " + time + ":00:00"; |
| | | } else { |
| | | timeHour += " 00" + time + ":00:00"; |
| | | } |
| | | } |
| | | } |
| | | String todayString = dates + timeHour; |
| | | Date esDayTime = new Date(); |
| | | try { |
| | | esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | |
| | | return esDayTime; |
| | | } |
| | | |
| | | /** |
| | | * 数字换算成中文(周) |
| | | * Conversion of numbers to Chinese (weeks) |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static String getWeekString(Integer time) { |
| | | if (time == 1) { |
| | | return "一"; |
| | | } else if (time == 2) { |
| | | return "二"; |
| | | } else if (time == 3) { |
| | | return "三"; |
| | | } else if (time == 4) { |
| | | return "四"; |
| | | } else if (time == 5) { |
| | | return "五"; |
| | | } else if (time == 6) { |
| | | return "六"; |
| | | } else if (time == 0 || time == 7) { |
| | | return "日"; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * LocalDateTime -> Date |
| | | * |
| | | * @param localDateTime |
| | | * @return |
| | | */ |
| | | public static Date asDate(LocalDateTime localDateTime) { |
| | | return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); |
| | | } |
| | | |
| | | /** |
| | | * Date -> LocalDateTime |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static LocalDateTime asLocalDateTime(Date date) { |
| | | return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取两个时间的间隔(秒) |
| | | * Obtain the time difference between two instances (in seconds). |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return |
| | | */ |
| | | public static long getDateBetween(Date d1, Date d2) { |
| | | return Math.abs((d1.getTime() - d2.getTime()) / 1000);//取绝对值 |
| | | } |
| | | |
| | | /** |
| | | * @param date |
| | | * @return 获取今天最后的时间 |
| | | * Obtain the final time of today. |
| | | */ |
| | | public static Date getEndDate(Date date) { |
| | | if (date == null) { |
| | | return null; |
| | | } |
| | | Calendar c = Calendar.getInstance(); |
| | | c.setTime(date); |
| | | c.set(Calendar.HOUR_OF_DAY, 23); |
| | | c.set(Calendar.MINUTE, 59); |
| | | c.set(Calendar.SECOND, 59); |
| | | return c.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 日期天数差 |
| | | * Days Difference |
| | | */ |
| | | public static int daysBetween(Date today, Date endDate) throws ParseException { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | today = sdf.parse(sdf.format(today)); |
| | | endDate = sdf.parse(sdf.format(endDate)); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(today); |
| | | long time1 = cal.getTimeInMillis(); |
| | | cal.setTime(endDate); |
| | | long time2 = cal.getTimeInMillis(); |
| | | long between_days = (time2 - time1) / (1000 * 3600 * 24); |
| | | return Integer.parseInt(String.valueOf(between_days)); |
| | | } |
| | | |
| | | /** |
| | | * 获取到当月所有日期 |
| | | * Obtain all dates of the current month |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static List<Date> getAllTheDateOftheMonth(Date date) { |
| | | List<Date> list = new ArrayList<Date>(); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.set(Calendar.DATE, 1); |
| | | |
| | | int month = cal.get(Calendar.MONTH); |
| | | while (cal.get(Calendar.MONTH) == month) { |
| | | list.add(cal.getTime()); |
| | | cal.add(Calendar.DATE, 1); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | /*public static void main(String[] args) throws ParseException { |
| | | List<Date> allTheDateOftheMonth = getAllTheDateOftheMonth(new Date()); |
| | | Date date = allTheDateOftheMonth.get(11); |
| | | System.out.println(date.toLocaleString()); |
| | | int i = daysBetween(new Date(), date); |
| | | System.out.println(i); |
| | | }*/ |
| | | |
| | | |
| | | } |
New file |
| | |
| | | /** |
| | | * Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com). |
| | | * <p> |
| | | * Licensed under the Apache License, Version 2.0 (the "License"); |
| | | * you may not use this file except in compliance with the License. |
| | | * You may obtain a copy of the License at |
| | | * <p> |
| | | * http://www.apache.org/licenses/LICENSE-2.0 |
| | | * <p> |
| | | * Unless required by applicable law or agreed to in writing, software |
| | | * distributed under the License is distributed on an "AS IS" BASIS, |
| | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | * See the License for the specific language governing permissions and |
| | | * limitations under the License. |
| | | */ |
| | | package com.dsh.activity.util; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.commons.lang3.time.DateFormatUtils; |
| | | import org.apache.commons.lang3.time.DateUtils; |
| | | |
| | | import java.sql.Timestamp; |
| | | import java.text.DateFormat; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.Objects; |
| | | import java.util.TimeZone; |
| | | |
| | | public class DateUtil { |
| | | |
| | | private static TimeZone tz = TimeZone.getTimeZone("GMT+8"); |
| | | |
| | | /** |
| | | * 获取YYYY格式 |
| | | */ |
| | | public static String getYear() { |
| | | return formatDate(new Date(), "yyyy"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY格式 |
| | | */ |
| | | public static String getYear(Date date) { |
| | | return formatDate(date, "yyyy"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD格式 |
| | | */ |
| | | public static String getDay() { |
| | | return formatDate(new Date(), "yyyy-MM-dd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD格式 |
| | | */ |
| | | public static String getDay(Date date) { |
| | | return formatDate(date, "yyyy-MM-dd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYYMMDD格式 |
| | | */ |
| | | public static String getDays() { |
| | | return formatDate(new Date(), "yyyyMMdd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYYMMDD格式 |
| | | */ |
| | | public static String getDays(Date date) { |
| | | return formatDate(date, "yyyyMMdd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD HH:mm:ss格式 |
| | | */ |
| | | public static String getTime() { |
| | | return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD HH:mm:ss.SSS格式 |
| | | */ |
| | | public static String getMsTime() { |
| | | return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYYMMDDHHmmss格式 |
| | | */ |
| | | public static String getAllTime() { |
| | | return formatDate(new Date(), "yyyyMMddHHmmss"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD HH:mm:ss格式 |
| | | */ |
| | | public static String getTime(Date date) { |
| | | return formatDate(date, "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | public static String formatDate(Date date, String pattern) { |
| | | String formatDate = null; |
| | | if (StringUtils.isNotBlank(pattern)) { |
| | | formatDate = DateFormatUtils.format(date, pattern); |
| | | } else { |
| | | formatDate = DateFormatUtils.format(date, "yyyy-MM-dd"); |
| | | } |
| | | return formatDate; |
| | | } |
| | | |
| | | /** |
| | | * 日期比较,如果s>=e 返回true 否则返回false) |
| | | * |
| | | * @author luguosui |
| | | */ |
| | | public static boolean compareDate(String s, String e) { |
| | | if (parseDate(s) == null || parseDate(e) == null) { |
| | | return false; |
| | | } |
| | | return parseDate(s).getTime() >= parseDate(e).getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parseDate(String date) { |
| | | return parse(date, "yyyy-MM-dd"); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parseTimeMinutes(String date) { |
| | | return parse(date, "yyyy-MM-dd HH:mm"); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parseTime(String date) { |
| | | return parse(date, "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parse(String date, String pattern) { |
| | | try { |
| | | if(Objects.nonNull(date)) { |
| | | return DateUtils.parseDate(date, pattern); |
| | | } |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static String format(Date date, String pattern) { |
| | | return DateFormatUtils.format(date, pattern); |
| | | } |
| | | |
| | | /** |
| | | * 把日期转换为Timestamp |
| | | */ |
| | | public static Timestamp format(Date date) { |
| | | return new Timestamp(date.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * 校验日期是否合法 |
| | | */ |
| | | public static boolean isValidDate(String s) { |
| | | return parse(s, "yyyy-MM-dd HH:mm:ss") != null; |
| | | } |
| | | |
| | | /** |
| | | * 校验日期是否合法 |
| | | */ |
| | | public static boolean isValidDate(String s, String pattern) { |
| | | return parse(s, pattern) != null; |
| | | } |
| | | |
| | | public static int getDiffYear(String startTime, String endTime) { |
| | | DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); |
| | | try { |
| | | int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse( |
| | | startTime).getTime()) / (1000 * 60 * 60 * 24)) / 365); |
| | | return years; |
| | | } catch (Exception e) { |
| | | // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对 |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * <li>功能描述:时间相减得到天数 |
| | | */ |
| | | public static long getDaySub(String beginDateStr, String endDateStr) { |
| | | long day = 0; |
| | | SimpleDateFormat format = new SimpleDateFormat( |
| | | "yyyy-MM-dd"); |
| | | Date beginDate = null; |
| | | Date endDate = null; |
| | | |
| | | try { |
| | | beginDate = format.parse(beginDateStr); |
| | | endDate = format.parse(endDateStr); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000); |
| | | // System.out.println("相隔的天数="+day); |
| | | |
| | | return day; |
| | | } |
| | | |
| | | /** |
| | | * 得到n天之后的日期 |
| | | */ |
| | | public static String getAfterDayDate(String days) { |
| | | int daysInt = Integer.parseInt(days); |
| | | |
| | | Calendar canlendar = Calendar.getInstance(); // java.util包 |
| | | canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 |
| | | Date date = canlendar.getTime(); |
| | | |
| | | SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | String dateStr = sdfd.format(date); |
| | | |
| | | return dateStr; |
| | | } |
| | | |
| | | /** |
| | | * 得到n天之后是周几 |
| | | */ |
| | | public static String getAfterDayWeek(String days) { |
| | | int daysInt = Integer.parseInt(days); |
| | | |
| | | Calendar canlendar = Calendar.getInstance(); // java.util包 |
| | | canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 |
| | | Date date = canlendar.getTime(); |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat("E"); |
| | | String dateStr = sdf.format(date); |
| | | |
| | | return dateStr; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 得到系统日期 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDate() { |
| | | TimeZone.setDefault(tz); |
| | | return new Date(); |
| | | } |
| | | |
| | | /** |
| | | * 获取当前毫秒数 |
| | | * |
| | | * @return long |
| | | */ |
| | | public static long getCurMilli() { |
| | | long millisecond = 0; |
| | | Calendar cal = Calendar.getInstance(); |
| | | millisecond = cal.getTimeInMillis(); |
| | | return millisecond; |
| | | } |
| | | |
| | | /** |
| | | * 得到系统Calendar日期 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Calendar getCalendar() { |
| | | TimeZone.setDefault(tz); |
| | | Calendar cal = Calendar.getInstance(); |
| | | return cal; |
| | | } |
| | | /** |
| | | * 毫秒转日期时间 |
| | | * |
| | | * @param millisecond |
| | | * @return |
| | | */ |
| | | public static String getDateTime(long millisecond) { |
| | | if (millisecond == 0) { |
| | | millisecond = getCurMilli(); |
| | | } |
| | | SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | Calendar calendar = getCalendar(); |
| | | calendar.setTimeInMillis(millisecond); |
| | | return dateformat.format(calendar.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * 日期转毫秒(加分钟) |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static long getMillisecond_fz(String date, Integer day) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | String newDate = ""; |
| | | if ("".equals(date)) { |
| | | newDate = sdf.format(DateUtil.getDate()); |
| | | } else { |
| | | newDate = getDateTime(Long.parseLong(date)); |
| | | } |
| | | Date dt = null; |
| | | try { |
| | | dt = sdf.parse(newDate); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | Calendar rightNow = Calendar.getInstance(); |
| | | rightNow.setTime(dt); |
| | | rightNow.add(Calendar.MINUTE, day); |
| | | Date dt1 = rightNow.getTime(); |
| | | return dt1.getTime(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * Double文档 |
| | | */ |
| | | public class DoubleUtil { |
| | | |
| | | public static Double format(Double num) { |
| | | BigDecimal b = new BigDecimal(num); |
| | | num = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | return num; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLDecoder; |
| | | import java.net.URLEncoder; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | public class EmojiUtil { |
| | | /** |
| | | * 编码 |
| | | * |
| | | * @param str 待转换字符串 |
| | | * @return 转换后字符串 |
| | | * @throws UnsupportedEncodingException exception |
| | | * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集) |
| | | */ |
| | | public static String emojiEncode(String str) |
| | | throws UnsupportedEncodingException { |
| | | String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])"; |
| | | |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | Matcher matcher = pattern.matcher(str); |
| | | StringBuffer sb = new StringBuffer(); |
| | | while (matcher.find()) { |
| | | try { |
| | | matcher.appendReplacement( |
| | | sb, |
| | | "[[" |
| | | + URLEncoder.encode(matcher.group(1), |
| | | "UTF-8") + "]]"); |
| | | } catch (UnsupportedEncodingException e) { |
| | | // LOG.error("emojiConvert error", e); |
| | | throw e; |
| | | } |
| | | } |
| | | matcher.appendTail(sb); |
| | | // LOG.debug("emojiConvert " + str + " to " + sb.toString() |
| | | // + ", len:" + sb.length()); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 解码 |
| | | * |
| | | * @param str 转换后的字符串 |
| | | * @return 转换前的字符串 |
| | | * @throws UnsupportedEncodingException exception |
| | | * @Description 还原utf8数据库中保存的含转换后emoji表情的字符串 |
| | | */ |
| | | public static String emojiDecode(String str) |
| | | throws UnsupportedEncodingException { |
| | | String patternString = "\\[\\[(.*?)\\]\\]"; |
| | | |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | if (str == null) { |
| | | return str; |
| | | } |
| | | Matcher matcher = pattern.matcher(str); |
| | | |
| | | StringBuffer sb = new StringBuffer(); |
| | | while (matcher.find()) { |
| | | try { |
| | | matcher.appendReplacement(sb, |
| | | URLDecoder.decode(matcher.group(1), "UTF-8")); |
| | | } catch (UnsupportedEncodingException e) { |
| | | // LOG.error("emojiRecovery error", e); |
| | | throw e; |
| | | } |
| | | } |
| | | matcher.appendTail(sb); |
| | | // LOG.debug("emojiRecovery " + str + " to " + sb.toString()); |
| | | // System.out.println("emojiRecovery " + str + " to " + sb.toString()); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * @param str 待过滤字符串 |
| | | * @return 过滤后字符串 |
| | | * exception |
| | | * @Description 将字符串中的emoji表情过滤掉 |
| | | */ |
| | | public static String emojiSub(String str) { |
| | | String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])"; |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | Matcher matcher = pattern.matcher(str); |
| | | StringBuffer sb = new StringBuffer(); |
| | | while (matcher.find()) { |
| | | matcher.appendReplacement(sb, ""); |
| | | } |
| | | matcher.appendTail(sb); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | public class HeaderAuthUtil { |
| | | |
| | | /** |
| | | * 用户UserId变量 |
| | | */ |
| | | protected final static String HEADER_USERID = "userId"; |
| | | |
| | | /** |
| | | * 获取Request请求头UserId |
| | | * @return |
| | | */ |
| | | public static String getLoginAuthUserId (HttpServletRequest request) { |
| | | String userId = request.getHeader(HEADER_USERID); |
| | | return userId; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.serializer.SerializerFeature; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import com.fasterxml.jackson.databind.JavaType; |
| | | import com.fasterxml.jackson.databind.JsonNode; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.HashMap; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * |
| | | * 返回json数据封装工具类 |
| | | * |
| | | * @ClassName: JsonUtil |
| | | * @author: yuds |
| | | * @date: 2019-09-20 09:19:27 |
| | | * @version: V1.0.0 |
| | | */ |
| | | public class JsonUtil { |
| | | |
| | | /** |
| | | * <li>将对象转化为json输出 |
| | | * <li>QuoteFieldNames ———-输出key时是否使用双引号,默认为true |
| | | * <li>WriteMapNullValue ——–是否输出值为null的字段,默认为false |
| | | * <li>WriteNullNumberAsZero —-数值字段如果为null,输出为0,而非null |
| | | * <li>WriteNullListAsEmpty —–List字段如果为null,输出为[],而非null |
| | | * <li>WriteNullStringAsEmpty —字符类型字段如果为null,输出为”“,而非null |
| | | * <li>WriteNullBooleanAsFalse –Boolean字段如果为null,输出为false,而非null |
| | | * <li>DisableCircularReferenceDetect 禁止循环引用检测 |
| | | */ |
| | | private static SerializerFeature[] serializerFeaturess = { SerializerFeature.WriteMapNullValue, |
| | | SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullListAsEmpty, |
| | | SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullBooleanAsFalse, |
| | | SerializerFeature.DisableCircularReferenceDetect, }; |
| | | |
| | | private JsonUtil() { |
| | | |
| | | } |
| | | |
| | | /** |
| | | * fastJson Object转json |
| | | * |
| | | * @param obj |
| | | * @return |
| | | */ |
| | | public static String objToJson(Object obj) { |
| | | return JSON.toJSONString(obj, serializerFeaturess); |
| | | } |
| | | |
| | | /** |
| | | * fastJson Object转json |
| | | * |
| | | * @param obj |
| | | * @param dateFormat 时间格式化 |
| | | * @return |
| | | */ |
| | | public static String objToJson(Object obj, String dateFormat) { |
| | | return JSON.toJSONStringWithDateFormat(obj, dateFormat, serializerFeaturess); |
| | | } |
| | | |
| | | // 定义jackson对象 |
| | | private static final ObjectMapper MAPPER = new ObjectMapper(); |
| | | |
| | | /** |
| | | * 将对象转换成json字符串。 |
| | | * <p> |
| | | * Title: pojoToJson |
| | | * </p> |
| | | * <p> |
| | | * Description: |
| | | * </p> |
| | | * |
| | | * @param data |
| | | * @return |
| | | */ |
| | | public static String objectToJson(Object data) { |
| | | try { |
| | | SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm"); |
| | | MAPPER.setDateFormat(fmt); |
| | | String string = MAPPER.writeValueAsString(data); |
| | | return string; |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 将json结果集转化为对象 |
| | | * |
| | | * @param jsonData json数据 |
| | | * @param beanType 对象中的object类型 |
| | | * @return |
| | | */ |
| | | public static <T> T jsonToPojo(String jsonData, Class<T> beanType) { |
| | | try { |
| | | T t = MAPPER.readValue(jsonData, beanType); |
| | | return t; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 将json数据转换成pojo对象list |
| | | * <p> |
| | | * Title: jsonToList |
| | | * </p> |
| | | * <p> |
| | | * Description: |
| | | * </p> |
| | | * |
| | | * @param jsonData |
| | | * @param beanType |
| | | * @return |
| | | */ |
| | | public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) { |
| | | JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType); |
| | | try { |
| | | List<T> list = MAPPER.readValue(jsonData, javaType); |
| | | return list; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | public static JsonNode jsonToNode(String jsonData) { |
| | | try { |
| | | return MAPPER.readTree(jsonData); |
| | | } catch (Exception ex) { |
| | | ex.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public static Map<String, String> jsonToMap(String json) { |
| | | JsonNode nodes = jsonToNode(json); |
| | | Iterator<Map.Entry<String, JsonNode>> fields = nodes.fields(); |
| | | Map<String, String> map = new HashMap<>(); |
| | | while (fields.hasNext()) { |
| | | Map.Entry<String, JsonNode> next = fields.next(); |
| | | String value = next.getValue().asText(""); |
| | | map.put(next.getKey(), value); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.time.Duration; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * LocalDateTimeUtils |
| | | * LocalDateTime 时间工具 |
| | | * |
| | | * @author yudeshan |
| | | * @version V1.0 |
| | | */ |
| | | public class LocalDateTimeUtils { |
| | | private final static int[] dayArr = new int[] { 20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22 }; |
| | | private final static String[] constellationArr = new String[] { "摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座" }; |
| | | |
| | | |
| | | /** |
| | | * 取两个时间相差毫秒数 |
| | | * |
| | | * @param start 开始时间 |
| | | * @param end 结束时间 |
| | | * @return |
| | | */ |
| | | public static long betweenMillis(LocalDateTime start, LocalDateTime end) { |
| | | Duration duration = Duration.between(start, end); |
| | | return duration.toMillis(); |
| | | } |
| | | |
| | | /** |
| | | * 通过生日计算年龄 |
| | | * @param birthDay 生日 |
| | | * @return |
| | | * @throws ParseException |
| | | */ |
| | | public static int getAgeByBirth(LocalDate birthDay) throws ParseException { |
| | | int age = 0; |
| | | //出生日期晚于当前时间,无法计算 |
| | | LocalDate now=LocalDate.now(); |
| | | if (birthDay.isAfter(now)) { |
| | | throw new IllegalArgumentException( "生日大于当前时间!"); |
| | | } |
| | | //当前年份 |
| | | int yearNow = now.getYear(); |
| | | //当前月份 |
| | | int monthNow = now.getMonthValue(); |
| | | //当前日期 |
| | | int dayOfMonthNow = now.getDayOfMonth(); |
| | | |
| | | int yearBirth =birthDay.getYear(); |
| | | int monthBirth = birthDay.getMonthValue(); |
| | | int dayOfMonthBirth = birthDay.getDayOfMonth(); |
| | | //计算整岁数 |
| | | age = yearNow - yearBirth; |
| | | if (monthNow <= monthBirth) { |
| | | if (monthNow == monthBirth) { |
| | | if (dayOfMonthNow < dayOfMonthBirth){ |
| | | //当前日期在生日之前,年龄减一 |
| | | age--; |
| | | } |
| | | } else { |
| | | //当前月份在生日之前,年龄减一 |
| | | age--; |
| | | } |
| | | } |
| | | return age; |
| | | } |
| | | |
| | | /** |
| | | * 根据月份计算星座 |
| | | */ |
| | | |
| | | public static String getConstellation(LocalDate date) { |
| | | Integer month=date.getMonthValue(); |
| | | Integer day=date.getDayOfMonth(); |
| | | return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month]; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.MessageSource; |
| | | import org.springframework.context.i18n.LocaleContextHolder; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | |
| | | @Component |
| | | public class MessageUtils { |
| | | |
| | | @Autowired |
| | | private MessageSource messageSource; |
| | | |
| | | /** |
| | | * 根据消息键和参数 获取消息 委托给spring messageSource |
| | | * |
| | | * @param code 消息键 |
| | | * @param args 参数 |
| | | * @return 获取国际化翻译值 |
| | | */ |
| | | public String get(String code, Object... args) { |
| | | return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import com.alibaba.csp.sentinel.util.StringUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import redis.clients.jedis.Jedis; |
| | | import redis.clients.jedis.JedisPool; |
| | | import redis.clients.jedis.Pipeline; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | |
| | | /** |
| | | * Redis工具类 |
| | | */ |
| | | @Component |
| | | public class RedisUtil { |
| | | |
| | | @Autowired |
| | | private JedisPool jedisPool; |
| | | |
| | | |
| | | /** |
| | | * 向redis中存储字符串没有过期时间 |
| | | * Storing strings in Redis without an expiration time. |
| | | * @param key |
| | | * @param value |
| | | */ |
| | | public void setStrValue(String key, String value){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String set = resource.set(key, value); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 以分钟为单位设置存储值(设置过期时间) |
| | | * Set storage value in minutes (set expiration time) as units. |
| | | * @param key |
| | | * @param value |
| | | * @param time 秒 |
| | | */ |
| | | public void setStrValue(String key, String value, int time){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String setex = resource.setex(key, time, value); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 从redis中获取值 |
| | | * @param key |
| | | * @return |
| | | */ |
| | | public String getValue(String key){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String data = resource.get(key); |
| | | closeJedis(resource); |
| | | return data; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 批量获取 |
| | | * @param kes |
| | | * @return |
| | | */ |
| | | public List<Object> getValues(List<String> kes){ |
| | | if(null != kes){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | Pipeline pipelined = resource.pipelined(); |
| | | for(String key : kes){ |
| | | pipelined.get(key); |
| | | } |
| | | List<Object> list = pipelined.syncAndReturnAll(); |
| | | |
| | | closeJedis(resource); |
| | | pipelined.clear(); |
| | | try { |
| | | pipelined.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | List<Object> data = new ArrayList<>(); |
| | | for(Object o : list){ |
| | | if(null != o){ |
| | | data.add(o); |
| | | } |
| | | } |
| | | return data; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除key |
| | | * @param key |
| | | */ |
| | | public void remove(String key){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | Long del = resource.del(key); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除资源 |
| | | * @param jedis |
| | | */ |
| | | public void closeJedis(Jedis jedis){ |
| | | if(null != jedis){ |
| | | jedis.close(); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | |
| | | /** |
| | | * 定义统一返回对象 |
| | | */ |
| | | @ApiModel(value = "统一返回结果集") |
| | | public class ResultUtil<T> { |
| | | |
| | | public static final Integer SUCCESS = 200; |
| | | |
| | | public static final Integer PARAM_ERROR = 300; |
| | | |
| | | public static final Integer RUNTIME_ERROR = 400; |
| | | |
| | | public static final Integer ERROR = 500; |
| | | |
| | | public static final Integer TOKEN_ERROR = 600; |
| | | |
| | | public static final Integer SIGN_ERROR = 700; |
| | | |
| | | public static final String Token = "TOKEN_INVALID"; |
| | | |
| | | public static final String SIGN = "SIGN_INVALID"; |
| | | |
| | | @ApiModelProperty(name = "code", value = "业务状态码 200:成功,300:参数错误,400:运行异常,500:其他异常, 600:token无效,需重新登录,700:签名无效") |
| | | private Integer code;//备用状态码 |
| | | |
| | | @ApiModelProperty(name = "msg", value = "返回结果说明") |
| | | private String msg;//返回说明 |
| | | |
| | | @ApiModelProperty(name = "data", value = "返回结果值") |
| | | private T data;//返回数据 |
| | | |
| | | |
| | | |
| | | public String getMsg() { |
| | | return msg; |
| | | } |
| | | |
| | | public T getData() { |
| | | return data; |
| | | } |
| | | |
| | | |
| | | public Integer getCode() { |
| | | return code; |
| | | } |
| | | |
| | | private ResultUtil(Integer code, String msg) { |
| | | this.code = code; |
| | | this.msg = msg; |
| | | } |
| | | |
| | | private ResultUtil(Integer code, String msg, T data) { |
| | | this.code = code; |
| | | this.msg = msg; |
| | | this.data = data; |
| | | } |
| | | |
| | | |
| | | public static <T> ResultUtil<T> getResult(Integer code, String msg){ |
| | | return new ResultUtil<>(code, msg); |
| | | } |
| | | |
| | | public static <T> ResultUtil<T> getResult(Integer code, String msg, T data){ |
| | | return new ResultUtil<>(code, msg, data); |
| | | } |
| | | |
| | | /** |
| | | * 错误信息 |
| | | * @return |
| | | */ |
| | | public static ResultUtil error(String mag){ |
| | | return ResultUtil.getResult(ResultUtil.ERROR, mag, new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * 错误信息 |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil <T> error(String mag, T obj){ |
| | | return ResultUtil.getResult(ResultUtil.ERROR, mag, obj); |
| | | } |
| | | |
| | | /** |
| | | * token失效 |
| | | * @return |
| | | */ |
| | | public static ResultUtil tokenErr(){ |
| | | return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, ResultUtil.Token, new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * token失效 |
| | | * @return |
| | | */ |
| | | public static ResultUtil tokenErr(String msg){ |
| | | return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, msg, new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * 参数异常 |
| | | * @return |
| | | */ |
| | | public static ResultUtil paranErr(){ |
| | | return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "PARAM_ERROR", new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * 参数异常 |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> paranErr(T data){ |
| | | return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "SYSTEM_RUN_ERROR", data); |
| | | } |
| | | |
| | | @Autowired |
| | | private static MessageUtils messageUtils; |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static ResultUtil runErr(){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", new JSONObject()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static <T>ResultUtil<T> runErr(T data){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", data); |
| | | } |
| | | |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static <T>ResultUtil<T> runErr(T data, String msg){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, msg, data); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param |
| | | * @return |
| | | */ |
| | | public static ResultUtil success(){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new JSONObject()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param data |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> success(T data){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", data); |
| | | } |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param msg |
| | | * @param data |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> success(String msg, T data){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, msg, data); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 签名无效 |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> sign(){ |
| | | return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Random; |
| | | |
| | | |
| | | public class StrUtils { |
| | | /** |
| | | * 把逗号分隔的字符串转换字符串数组 |
| | | * Convert comma-separated string to string array. |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static String[] splitStr2StrArr(String str,String split) { |
| | | if (str != null && !str.equals("")) { |
| | | return str.split(split); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把逗号分隔字符串转换List的Long |
| | | * |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static List<Long> splitStr2LongArr(String str) { |
| | | String[] strings = splitStr2StrArr(str,","); |
| | | if (strings == null) return null; |
| | | |
| | | List<Long> result = new ArrayList<>(); |
| | | for (String string : strings) { |
| | | result.add(Long.parseLong(string)); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | /** |
| | | * 把逗号分隔字符串转换List的Long |
| | | * |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static List<Long> splitStr2LongArr(String str,String split) { |
| | | String[] strings = splitStr2StrArr(str,split); |
| | | if (strings == null) return null; |
| | | |
| | | List<Long> result = new ArrayList<>(); |
| | | for (String string : strings) { |
| | | result.add(Long.parseLong(string)); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | public static String getRandomString(int length) { |
| | | String str = "0123456789"; |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int number = random.nextInt(10); |
| | | sb.append(str.charAt(number)); |
| | | } |
| | | return sb.toString(); |
| | | |
| | | } |
| | | |
| | | public static String getComplexRandomString(int length) { |
| | | String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int number = random.nextInt(62); |
| | | sb.append(str.charAt(number)); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | public static String getClassCodeString(int length) { |
| | | String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int number =random.nextInt(36); |
| | | sb.append(str.charAt(number)); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | public static String convertPropertiesToHtml(String properties){ |
| | | //1:容量:6:32GB_4:样式:12:塑料壳 |
| | | StringBuilder sBuilder = new StringBuilder(); |
| | | String[] propArr = properties.split("_"); |
| | | for (String props : propArr) { |
| | | String[] valueArr = props.split(":"); |
| | | sBuilder.append(valueArr[1]).append(":").append(valueArr[3]).append("<br>"); |
| | | } |
| | | return sBuilder.toString(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import cn.mb.cloud.common.core.exception.BusinessException; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | /** |
| | | * 判断字符串不能为空和null,以及号码格式效验, |
| | | * 否则则抛出异常信息 |
| | | */ |
| | | public class StringUtil { |
| | | private StringUtil() { |
| | | } |
| | | |
| | | public static void checkNull(String str, String message) throws BusinessException { |
| | | if (!StringUtils.hasLength(str)) { |
| | | throw new BusinessException(message); |
| | | } |
| | | } |
| | | |
| | | public static void checkFormat(String str, String message) throws BusinessException { |
| | | if (!str.matches("^1[2|3|4|5|6|7|8|9][0-9]{9}$")) { |
| | | throw new BusinessException(message); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.Date; |
| | | |
| | | |
| | | //根据当前传入的时间,返回距离当前时间多少天 |
| | | |
| | | public class StudyTimeUtil { |
| | | private StudyTimeUtil() { |
| | | } |
| | | |
| | | /** |
| | | * 获取两个时间的间隔(秒)Obtain the time difference between two instances (in seconds). |
| | | * |
| | | * @param startDate 开始的时间 |
| | | * @return 返回当前时间与开始时间的相差天数 |
| | | */ |
| | | public static int getDateBetween(Date startDate) throws ParseException { |
| | | Date endDate = new Date(); |
| | | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | long startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime(); |
| | | long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime(); |
| | | int days = (int)((endDateTime - startDateTime) / (1000 * 3600 * 24)); |
| | | return days; |
| | | } |
| | | |
| | | public static Date getStartDate(LocalDateTime localDate) { |
| | | Date date = Date.from(localDate.atZone(ZoneId.systemDefault()).toInstant()); |
| | | return date; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | @Component |
| | | public class TokenUtil { |
| | | |
| | | @Autowired |
| | | private RedisUtil redisUtil; |
| | | |
| | | |
| | | public Integer getUserIdFormRedis(HttpServletRequest request) throws Exception { |
| | | String requestHeader = request.getHeader("Authorization"); |
| | | if (requestHeader != null && requestHeader.startsWith("Bearer ")) { |
| | | requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1); |
| | | String key = null; |
| | | int length = requestHeader.length(); |
| | | if(length > 32){ |
| | | key = requestHeader.substring(length - 32); |
| | | }else{ |
| | | key = requestHeader; |
| | | } |
| | | String value = redisUtil.getValue(key); |
| | | return null != value ? Integer.valueOf(value) : null; |
| | | }else{ |
| | | return null; |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util.akeylogin; |
| | | |
| | | import java.nio.charset.Charset; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.Base64; |
| | | |
| | | public class Base64Utils { |
| | | private static final Charset DEFAULT_CHARSET; |
| | | |
| | | public Base64Utils() { |
| | | } |
| | | |
| | | public static byte[] encode(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getEncoder().encode(src); |
| | | } |
| | | |
| | | public static byte[] decode(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getDecoder().decode(src); |
| | | } |
| | | |
| | | public static byte[] encodeUrlSafe(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getUrlEncoder().encode(src); |
| | | } |
| | | |
| | | public static byte[] decodeUrlSafe(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getUrlDecoder().decode(src); |
| | | } |
| | | |
| | | public static String encodeToString(byte[] src) { |
| | | return src.length == 0 ? "" : new String(encode(src), DEFAULT_CHARSET); |
| | | } |
| | | |
| | | public static byte[] decodeFromString(String src) { |
| | | return src.isEmpty() ? new byte[0] : decode(src.getBytes(DEFAULT_CHARSET)); |
| | | } |
| | | |
| | | public static String encodeToUrlSafeString(byte[] src) { |
| | | return new String(encodeUrlSafe(src), DEFAULT_CHARSET); |
| | | } |
| | | |
| | | public static byte[] decodeFromUrlSafeString(String src) { |
| | | return decodeUrlSafe(src.getBytes(DEFAULT_CHARSET)); |
| | | } |
| | | |
| | | static { |
| | | DEFAULT_CHARSET = StandardCharsets.UTF_8; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util.akeylogin; |
| | | |
| | | import java.lang.reflect.Array; |
| | | import java.util.Collection; |
| | | import java.util.Map; |
| | | |
| | | public class BaseUtils { |
| | | public static boolean isEmpty(Object target) { |
| | | if (target == null) { |
| | | return true; |
| | | } |
| | | if (target instanceof String && "".equals(target)) { |
| | | return true; |
| | | } else if (target instanceof Collection) { |
| | | return ((Collection<?>) target).isEmpty(); |
| | | } else if (target instanceof Map) { |
| | | return ((Map<?, ?>) target).isEmpty(); |
| | | } else if (target.getClass().isArray()) { |
| | | return Array.getLength(target) == 0; |
| | | } |
| | | return false; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util.akeylogin; |
| | | |
| | | import javax.crypto.Cipher; |
| | | import javax.crypto.SecretKey; |
| | | import javax.crypto.SecretKeyFactory; |
| | | import javax.crypto.spec.DESKeySpec; |
| | | import javax.crypto.spec.IvParameterSpec; |
| | | import java.security.Key; |
| | | import java.security.spec.AlgorithmParameterSpec; |
| | | |
| | | public class DES { |
| | | public static final String ALGORITHM = "DES"; |
| | | public static final String PADDING = "DES/CBC/PKCS5Padding"; |
| | | private static final byte[] DEFAULT_INITIALIZATION_VECTOR = ("00000000".getBytes()); |
| | | |
| | | private String padding = PADDING; |
| | | private byte[] initializationVectorBytes = DEFAULT_INITIALIZATION_VECTOR; |
| | | private AlgorithmParameterSpec paramSpec; |
| | | |
| | | public DES() { |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | public DES(String padding) { |
| | | this.padding = padding; |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | public DES(String padding, byte[] initializationVectorBytes) { |
| | | this.padding = padding; |
| | | this.initializationVectorBytes = initializationVectorBytes; |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | public DES(byte[] initializationVectorBytes) { |
| | | this.initializationVectorBytes = initializationVectorBytes; |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | |
| | | public byte[] encodeBytes(byte[] data, byte[] key) throws Exception { |
| | | Key secretKey = getKey(key); |
| | | Cipher cipher = Cipher.getInstance(padding); |
| | | cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec); |
| | | byte[] bytes = cipher.doFinal(data); |
| | | return bytes; |
| | | } |
| | | |
| | | public byte[] decodeBytes(byte[] data, byte[] key) throws Exception { |
| | | Key secretKey = getKey(key); |
| | | Cipher cipher = Cipher.getInstance(padding); |
| | | cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec); |
| | | return cipher.doFinal(data); |
| | | |
| | | } |
| | | |
| | | public String getPadding() { |
| | | return padding; |
| | | } |
| | | |
| | | public byte[] getInitializationVectorBytes() { |
| | | return initializationVectorBytes; |
| | | } |
| | | |
| | | private static Key getKey(byte[] key) throws Exception { |
| | | DESKeySpec dks = new DESKeySpec(key); |
| | | SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); |
| | | SecretKey secretKey = keyFactory.generateSecret(dks); |
| | | return secretKey; |
| | | } |
| | | |
| | | public static byte[] decode(byte[] data, byte[] key) throws Exception { |
| | | return decode(data, key, DEFAULT_INITIALIZATION_VECTOR); |
| | | } |
| | | |
| | | |
| | | public static byte[] encode(byte[] data, byte[] key) throws Exception { |
| | | return encode(data, key, DEFAULT_INITIALIZATION_VECTOR); |
| | | } |
| | | |
| | | public static byte[] decode(byte[] data, byte[] key, byte[] ivBytes) throws Exception { |
| | | DES des = new DES(PADDING, ivBytes); |
| | | return des.decodeBytes(data, key); |
| | | } |
| | | |
| | | public static byte[] encode(byte[] data, byte[] key, byte[] ivBytes) throws Exception { |
| | | DES des = new DES(PADDING, ivBytes); |
| | | return des.encodeBytes(data, key); |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util.akeylogin; |
| | | |
| | | import java.security.MessageDigest; |
| | | |
| | | public class Md5Util { |
| | | private static final String hexDigIts[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; |
| | | |
| | | /** |
| | | * MD5加密 |
| | | * |
| | | * @param origin 字符 |
| | | * @param charsetname 编码 |
| | | * @return |
| | | */ |
| | | public static String MD5Encode(String origin, String charsetname) { |
| | | String resultString = null; |
| | | try { |
| | | resultString = new String(origin); |
| | | MessageDigest md = MessageDigest.getInstance("MD5"); |
| | | if (null == charsetname || "".equals(charsetname)) { |
| | | resultString = byteArrayToHexString(md.digest(resultString.getBytes())); |
| | | } else { |
| | | resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname))); |
| | | } |
| | | } catch (Exception e) { |
| | | } |
| | | return resultString; |
| | | } |
| | | |
| | | |
| | | public static String byteArrayToHexString(byte b[]) { |
| | | StringBuffer resultSb = new StringBuffer(); |
| | | for (int i = 0; i < b.length; i++) { |
| | | resultSb.append(byteToHexString(b[i])); |
| | | } |
| | | return resultSb.toString(); |
| | | } |
| | | |
| | | public static String byteToHexString(byte b) { |
| | | int n = b; |
| | | if (n < 0) { |
| | | n += 256; |
| | | } |
| | | int d1 = n / 16; |
| | | int d2 = n % 16; |
| | | return hexDigIts[d1] + hexDigIts[d2]; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.activity.util.akeylogin; |
| | | |
| | | import java.util.Map; |
| | | import java.util.TreeMap; |
| | | |
| | | public class SignUtil { |
| | | private static String charset = "utf8"; |
| | | |
| | | public static String getSign(Map<String, Object> data, String secret) { |
| | | if (data == null) { |
| | | return null; |
| | | } |
| | | //排序参数 |
| | | Map<String, Object> mappingList = new TreeMap<>(data); |
| | | StringBuilder plainText= new StringBuilder(); |
| | | mappingList.forEach((k, v) -> { |
| | | if (!"sign".equals(k) && !BaseUtils.isEmpty(v)) { |
| | | plainText.append(String.format("%s=%s&", k, v)); |
| | | } |
| | | }); |
| | | String substring = plainText.substring(0, plainText.length() - 1); |
| | | return Md5Util.MD5Encode(substring + secret, charset); |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.competition.advice; |
| | | |
| | | import cn.mb.cloud.common.core.constant.enums.ErrorCodeConstants; |
| | | import cn.mb.cloud.common.core.exception.BusinessException; |
| | | import cn.mb.cloud.common.core.util.ResponseData; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | @Slf4j |
| | | @RestControllerAdvice |
| | | public class ControllerException { |
| | | |
| | | @ExceptionHandler(BusinessException.class) |
| | | @ResponseStatus(HttpStatus.OK) |
| | | @ResponseBody |
| | | public ResponseData bussiness(BusinessException e) { |
| | | log.error("业务异常 message= " + e.getMessage() + " code= " + e.getErrorCode(), e); |
| | | return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()). |
| | | msg(e.getMessage()).build(); |
| | | } |
| | | |
| | | @ExceptionHandler(RuntimeException.class) |
| | | @ResponseStatus(HttpStatus.OK) |
| | | @ResponseBody |
| | | public ResponseData runtimeException(RuntimeException e) { |
| | | log.error("运行时异常信息" + e.getMessage(), e); |
| | | return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()).msg(e.getMessage()).build(); |
| | | } |
| | | |
| | | /** |
| | | * 全局异常. |
| | | * |
| | | * @param e the e |
| | | * @return R |
| | | */ |
| | | |
| | | @ExceptionHandler(Exception.class) |
| | | @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) |
| | | @ResponseBody |
| | | public ResponseData exception(Exception e) { |
| | | log.error("全局异常信息" + e.getMessage(), e); |
| | | return ResponseData.fail(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.Instant; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.*; |
| | | |
| | | |
| | | /** |
| | | * 日期时间类型的工具类,提供对日期和时间基于毫秒及以上精度的格式化方法、 |
| | | * 运算方法、比较方法等。注意:大部分对日期对象(java.util.Date)操作的方法, |
| | | * 不会修改原日期对象,而以一个新的日期对象返回。 |
| | | * <p> |
| | | * <p> |
| | | * <p><pre><b> |
| | | * 历史更新记录:</b> |
| | | * 2004-6-17 创建此类型 |
| | | * 2005-9-30 修改方法:parseToDate(),去掉了对年份从(1970-9999)这个范围的限制。抛出异常:IllegalArgumentException(),JThinkRuntimeException() |
| | | * 2005-10-2 修改方法: 其它方法,抛出异常:IllegalArgumentException(),JThinkRuntimeException() |
| | | * 2005-10-2 增加方法: addTime(Date d, double times, int type) |
| | | * 2005-10-2 增加方法: addSystemTime() |
| | | * 2005-10-2 修改方法, 对于所有以日期对象类型java.util.Date为参数的方法,如果日期为null,都抛出异常:IllegalArgumentException() |
| | | * <p> |
| | | * </pre></p> |
| | | */ |
| | | |
| | | public final class DateTimeHelper { |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8:26:30.400 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmssSa_12 = "yyyy-MM-dd KK:mm:ss.S a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8:26:16 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmssa_12 = "yyyy-MM-dd KK:mm:ss a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8:26 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmma_12 = "yyyy-MM-dd KK:mm a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHa_12 = "yyyy-MM-dd KK a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-07-05 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMdda_12 = "yyyy-MM-dd a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08:26:30.400 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmssS = "yyyy-MM-dd HH:mm:ss.S"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08:26:16 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08:26 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmm = "yyyy-MM-dd HH:mm"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHH = "yyyy-MM-dd HH"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-07-05 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMdd = "yyyy-MM-dd"; |
| | | /** |
| | | * 把时间格式化成如:2002-07 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMM = "yyyy-MM"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:07.19 格式的字符串 |
| | | */ |
| | | public final static String FMT_MMdd = "MM.dd"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:12:08 PM(下午) 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmA_12 = "KK:mm a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:55 AM上午, CST 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmAz_12 = "KK:mm a,z"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:56 AM上午, 中国标准时间 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmAzzzz_12 = "KK:mm a,zzzz"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:12:08:23 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssA_12 = "KK:mm:ss a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:55:33 AM上午, CST 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssAz_12 = "KK:mm:ss a,z"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:56:23 AM上午, 中国标准时间 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssAzzzz_12 = "KK:mm:ss a,zzzz"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04:45 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmss = "HH:mm:ss"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04:45.824 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssS = "HH:mm:ss.S"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmm = "HH:mm"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04,CST 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmz = "HH:mm,z"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04,中国标准时间 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmzzzz = "HH:mm,zzzz"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串 |
| | | */ |
| | | public final static String FMT_WWMMDDYY_EN = "EEE,MMM d,''yyyy"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串 |
| | | */ |
| | | public final static String FMT_WWMMDDYY_CN = "EEE,yyyy年MMMd号"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串 |
| | | */ |
| | | public final static String FMT_MMDDYY_EN = "MMM d,''yyyy"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串 |
| | | */ |
| | | public final static String FMT_MMDDYY_CN = "yyyy年MMMd号"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:星期几 格式的字符串,即可获得该日这个时间是星期几 |
| | | */ |
| | | public final static String FMT_WW = "EEE"; |
| | | |
| | | public final static String FMT_ddMMyyyy = "dd-MM-yyyy"; |
| | | |
| | | /** |
| | | * 把时间格式成日期数字,如:20120606 |
| | | */ |
| | | public final static String FMT_yyyyMMdd_noseparator = "yyyyMMdd"; |
| | | |
| | | public final static String FMT_yyyyMMdd_Zh = "yyyy年MM月dd日"; |
| | | |
| | | public final static String FMT_yyyyMMddHH_noseparator = "yyyyMMddHH"; |
| | | |
| | | /** |
| | | * 把时间格式成日期数字,如:20120606121212 |
| | | */ |
| | | public final static String FMT_yyyyMMddhhmmss_noseparator = "yyyyMMddHHmmss"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002.07.05 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyxMMxdd = "yyyy.MM.dd"; |
| | | /** |
| | | * 常用的格式化时间的格式组,用于本类中格式化字符串成时间型 |
| | | */ |
| | | private final static String[] formatStr = { |
| | | FMT_ddMMyyyy, |
| | | FMT_yyyyMMddHHmmssS, |
| | | FMT_yyyyMMddHHmmss, |
| | | FMT_yyyyMMddHHmm, |
| | | FMT_yyyyMMddHH, |
| | | FMT_yyyyMMdd, |
| | | FMT_HHmmss, |
| | | FMT_HHmmssS, |
| | | FMT_HHmm, |
| | | FMT_HHmmz, |
| | | FMT_HHmmzzzz, |
| | | FMT_yyyyMMddHHmmssSa_12, |
| | | FMT_yyyyMMddHHmmssa_12, |
| | | FMT_yyyyMMddHHmma_12, |
| | | FMT_yyyyMMddHHa_12, |
| | | FMT_yyyyMMdda_12, |
| | | FMT_HHmmA_12, |
| | | FMT_HHmmAz_12, |
| | | FMT_HHmmAzzzz_12, |
| | | FMT_HHmmssA_12, |
| | | FMT_HHmmssAz_12, |
| | | FMT_HHmmssAzzzz_12 |
| | | }; |
| | | |
| | | |
| | | /** |
| | | * 私有化构造器,使得不能产生该类对象,类中所有的方法均为静态方法 |
| | | */ |
| | | private DateTimeHelper() { |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param date |
| | | * @param formatStr |
| | | * @return 如果为null,返回字符串"" |
| | | */ |
| | | public static String formatDateTimetoString(Date date, String formatStr) { |
| | | String reStr = ""; |
| | | if (date == null || formatStr == null || formatStr.trim().length() < 1) { |
| | | return reStr; |
| | | } |
| | | SimpleDateFormat sdf = new SimpleDateFormat(); |
| | | sdf.applyPattern(formatStr); |
| | | reStr = sdf.format(date); |
| | | return reStr; |
| | | } |
| | | |
| | | public static Date getSystemDate(String fmtstr) { |
| | | try { |
| | | return parseToDate(formatDateTimetoString(getSystemDate(), fmtstr)); |
| | | } catch (Exception e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | return getSystemDate(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值和格式串采用给定的国家所在的国家风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param date 日期对象 |
| | | * @param formatStr 日期格式 |
| | | * @return 如果为null,返回字符串"" |
| | | */ |
| | | public static String formatDateTimetoString(Date date, String formatStr, Locale locale) { |
| | | String reStr = ""; |
| | | if (date == null || formatStr == null || locale == null || formatStr.trim().length() < 1) { |
| | | return reStr; |
| | | } |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale); |
| | | reStr = sdf.format(date); |
| | | return reStr; |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值字符串和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param dateStr 日期串 |
| | | * @param formatStr 日期格式 |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateStr, String formatStr) throws Exception { |
| | | String dStr = ""; |
| | | if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0) { |
| | | dStr = formatDateTimetoString(parseToDate(dateStr), formatStr); |
| | | } |
| | | return dStr; |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值字符串和格式串采用指定国家的风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param dateStr 日期串 |
| | | * @param formatStr 日期格式 |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateStr, String formatStr, Locale locale) throws Exception { |
| | | String dStr = ""; |
| | | if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0 && locale != null) { |
| | | dStr = formatDateTimetoString(parseToDate(dateStr, locale), formatStr, locale); |
| | | } |
| | | return dStr; |
| | | } |
| | | |
| | | /** |
| | | * 按指定的格式和操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @param formatStr |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr, String formatStr) throws Exception { |
| | | if (dateTimeStr == null || formatStr == null || dateTimeStr.trim().length() < 1 || formatStr.trim().length() < 1) { |
| | | throw new IllegalArgumentException("参数dateTimeStr、formatStr不能是null或空格串!"); |
| | | } |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | throw new Exception(e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 按指定的格式和指定国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @param formatStr |
| | | * @param locale |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr, String formatStr, Locale locale) throws Exception { |
| | | if (dateTimeStr != null && formatStr != null && locale != null && dateTimeStr.trim().length() > 0 && formatStr.trim().length() > 0) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | throw new Exception(e); |
| | | } |
| | | } else { |
| | | throw new IllegalArgumentException("参数dateTimeStr、formatStr、locale不能是null或空格串!"); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 按操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr) throws Exception { |
| | | if (dateTimeStr == null || dateTimeStr.trim().length() < 1) { |
| | | throw new IllegalArgumentException("参数dateTimeSt不能是null或空格串!"); |
| | | } |
| | | int formatStrLength = formatStr.length; |
| | | int i = 0; |
| | | |
| | | for (i = 0; i < formatStrLength; i++) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i]); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | } |
| | | } |
| | | throw new Exception("日期格式不正确!"); |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的年月和日返回一个日期型的对象 |
| | | * |
| | | * @param year 年 |
| | | * @param month 月 ,1到12 |
| | | * @param day 日 ,1到31 |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(int year, int month, int day) throws Exception { |
| | | if (month < 1 || month > 12 || day < 1 || day > 31) { |
| | | throw new IllegalArgumentException("参数不正确!"); |
| | | } |
| | | String yearStr = String.valueOf(year); |
| | | String monthStr = String.valueOf(month); |
| | | String dayStr = String.valueOf(day); |
| | | |
| | | return parseToDate(yearStr + "-" + monthStr + "-" + dayStr); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的年月日、时分秒、返回一个对应的Date型对象 |
| | | * |
| | | * @param year 年 |
| | | * @param month 月 ,1到12 |
| | | * @param day 日 ,1到31 |
| | | * @param h 小时,从0到23 |
| | | * @param m 分,从0到60 |
| | | * @param s 秒,从0到60 |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(int year, int month, int day, int h, int m, int s) throws Exception { |
| | | if (month < 1 || month > 12 || day < 1 || day > 31 || h < 0 || h > 23 || m < 0 || m > 60 || s < 0 || s > 60) { |
| | | throw new IllegalArgumentException("参数不正确!"); |
| | | } |
| | | String yearStr = String.valueOf(year); |
| | | String monthStr = String.valueOf(month); |
| | | String dayStr = String.valueOf(day); |
| | | String hStr = String.valueOf(h); |
| | | String mStr = String.valueOf(m); |
| | | String sStr = String.valueOf(s); |
| | | |
| | | return parseToDate(yearStr + "-" + monthStr + "-" + dayStr + " " + hStr + ":" + mStr + ":" + sStr); |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 按指定国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr, Locale locale) throws Exception { |
| | | if (dateTimeStr == null || dateTimeStr.trim().length() < 1 || locale == null) { |
| | | throw new IllegalArgumentException("参数dateTimeSt、locale不能是null或空格串!"); |
| | | } |
| | | int formatStrLength = formatStr.length; |
| | | int i = 0; |
| | | for (i = 0; i < formatStrLength; i++) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i], locale); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | } |
| | | } |
| | | throw new Exception("日期格式不正确!"); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateTimeStr) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateTimeStr, Locale locale) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按操作系统默认的国家内格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTime |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDateTimetoString(Date dateTime) { |
| | | return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTime |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDateTimetoString(Date dateTime, Locale locale) { |
| | | return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param date |
| | | * @param dateStr 日期串 |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDatetoString(Date date, String dateStr) throws Exception { |
| | | return formatDateTimetoString(dateStr, FMT_yyyyMMdd); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期字符串按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param dateStr 日期串 |
| | | * @param locale Locale |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDatetoString(String dateStr, Locale locale) throws Exception { |
| | | return formatDateTimetoString(dateStr, FMT_yyyyMMdd, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期按指定操作系统默认国家的风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param d 日期对象 |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDatetoString(Date d) { |
| | | return formatDateTimetoString(d, FMT_yyyyMMdd); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param d 日期对象 |
| | | * @param locale Locale |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDatetoString(Date d, Locale locale) { |
| | | return formatDateTimetoString(d, FMT_yyyyMMdd, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatTimetoString(String dateTimeStr) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按指定国家的风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatTimetoString(String dateTimeStr, Locale locale) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按指定操作系统默认国家的风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatTimetoString(Date dateTimeStr) { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按指定国家的风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatTimetoString(Date dateTimeStr, Locale locale) { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的年份整数 |
| | | * |
| | | * @param d |
| | | * @return 年份 |
| | | */ |
| | | public static int getYearOfDate(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.YEAR); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的月份整数 |
| | | * |
| | | * @param d |
| | | * @return 月份 |
| | | */ |
| | | public static int getMonthOfYear(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.MONTH) + 1; |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的天份整数,是这个月的第几天 |
| | | * |
| | | * @param d |
| | | * @return 天份 |
| | | */ |
| | | public static int getDayOfMonth(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.DAY_OF_MONTH); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的天份整数,是这个年份的第几天 |
| | | * |
| | | * @param d |
| | | * @return 天份 |
| | | */ |
| | | public static int getDayOfYear(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.DAY_OF_YEAR); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的天份整数,是这个周的第几天 |
| | | * |
| | | * @param d |
| | | * @return 天份 |
| | | */ |
| | | public static int getDayOfWeek(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.DAY_OF_WEEK) - 1; |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的周的整数,是这个月的第几周 |
| | | * |
| | | * @param d |
| | | * @return 周 |
| | | */ |
| | | public static int getWeekOfMonth(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.WEEK_OF_MONTH); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的周的整数,是这个年份的第几周 |
| | | * |
| | | * @param d |
| | | * @return 周 |
| | | */ |
| | | public static int getWeekOfYear(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.WEEK_OF_YEAR); |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的在一天中的小时数的整数,如当前(Date now)是下午3点,返回为15 |
| | | * |
| | | * @param d |
| | | * @return 小时 |
| | | */ |
| | | public static int getHoursOfDay(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int hours = calendar.get(Calendar.HOUR_OF_DAY); |
| | | return hours; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的在一天中的小时数的整数(采用12小时制),如当前(Date now)是下午3点,返回为3 |
| | | * |
| | | * @param d |
| | | * @return 小时 |
| | | */ |
| | | public static int getHoursOfDay12(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int hours = calendar.get(Calendar.HOUR); |
| | | return hours; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回该时间所对应的分钟数中的整数,如now是15点14分,则返回14 |
| | | * |
| | | * @param d |
| | | * @return 分钟 |
| | | */ |
| | | public static int getMinutesOfHour(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int minutes = calendar.get(Calendar.MINUTE); |
| | | |
| | | return minutes; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的秒数中的整数,如now是15点14分34秒,则返回34 |
| | | * |
| | | * @param d |
| | | * @return 秒 |
| | | */ |
| | | public static int getSecondsOfMinute(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int seconds = calendar.get(Calendar.SECOND); |
| | | |
| | | return seconds; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的毫秒数中的整数,如now是15点14分34秒470毫秒,则返回470 |
| | | * |
| | | * @param d |
| | | * @return 毫秒 |
| | | */ |
| | | public static int getMillisecondsOfSecond(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int millisecond = calendar.get(Calendar.MILLISECOND); |
| | | |
| | | return millisecond; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间相对于1970年1月1日开始计算的对应的毫秒数 |
| | | * |
| | | * @param d |
| | | * @return 毫秒数 |
| | | */ |
| | | public static long getTime(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | return d.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 比较两个时间的先后顺序。 |
| | | * 如果时间d1在d2之前,返回1, |
| | | * 如果时间d1在d2之后,返回-1, |
| | | * 如果二者相等,返回0 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 如果时间d1在d2之前,返回1, |
| | | * 如果时间d1在d2之后,返回-1, |
| | | * 如果二者相等,返回0 |
| | | */ |
| | | public static int compareTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | |
| | | long dI1 = d1.getTime(); |
| | | long dI2 = d2.getTime(); |
| | | |
| | | if (dI1 > dI2) { |
| | | return -1; |
| | | } else if (dI1 < dI2) { |
| | | return 1; |
| | | } else { |
| | | return 0; |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 返回两个日期之间的毫秒数的差距 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 二者至1970年1.1后的毫秒数的差值 |
| | | */ |
| | | public static long getMillisecondsOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long dI1 = d1.getTime(); |
| | | long dI2 = d2.getTime(); |
| | | return (dI1 - dI2); |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的秒数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的秒数 |
| | | */ |
| | | public static double getSecondsOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long i = getMillisecondsOfTwoDate(d1, d2); |
| | | |
| | | return (double) i / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的分钟数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的分钟数 |
| | | */ |
| | | public static double getMinutesOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return (double) millions / 60 / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的小时数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的小时数 |
| | | */ |
| | | public static double getHoursOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return (double) millions / 60 / 60 / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的天数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的天数 |
| | | */ |
| | | public static double getDaysOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return (double) millions / 24 / 60 / 60 / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的天数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的天数 |
| | | */ |
| | | public static Long daysOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return millions / 24 / 60 / 60 / 1000; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的时间值,可以为负。 |
| | | * |
| | | * @param d 日期对象 |
| | | * @param times 时间值 |
| | | * @param type 类型, |
| | | * Calendar.MILLISECOND,毫秒<BR> |
| | | * Calendar.SECOND,秒<BR> |
| | | * Calendar.MINUTE,分钟<BR> |
| | | * Calendar.HOUR,小时<BR> |
| | | * Calendar.DATE,日<BR> |
| | | * @return 如果d为null,返回null |
| | | */ |
| | | public static Date addTime(Date d, double times, int type) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | long qv = 1; |
| | | switch (type) { |
| | | case Calendar.MILLISECOND: |
| | | qv = 1; |
| | | break; |
| | | case Calendar.SECOND: |
| | | qv = 1000; |
| | | break; |
| | | case Calendar.MINUTE: |
| | | qv = 1000 * 60; |
| | | break; |
| | | case Calendar.HOUR: |
| | | qv = 1000 * 60 * 60; |
| | | break; |
| | | case Calendar.DATE: |
| | | qv = 1000 * 60 * 60 * 24; |
| | | break; |
| | | default: |
| | | throw new RuntimeException("时间类型不正确!type=" + type); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | long milliseconds = (long) Math.round(Math.abs(times) * qv); |
| | | if (times > 0) { |
| | | for (; milliseconds > 0; milliseconds -= 2147483647) { |
| | | if (milliseconds > 2147483647) { |
| | | calendar.add(Calendar.MILLISECOND, 2147483647); |
| | | } else { |
| | | calendar.add(Calendar.MILLISECOND, (int) milliseconds); |
| | | } |
| | | } |
| | | } else { |
| | | for (; milliseconds > 0; milliseconds -= 2147483647) { |
| | | if (milliseconds > 2147483647) { |
| | | calendar.add(Calendar.MILLISECOND, -2147483647); |
| | | } else { |
| | | calendar.add(Calendar.MILLISECOND, -(int) milliseconds); |
| | | } |
| | | } |
| | | } |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的年份,可以为负, 返回新的被加上了年份的日期对象,不影响参数日期对象值 |
| | | * Given a certain time and a specified year, which can be negative, returns a new date object with the added year, without affecting the value of the original date object. |
| | | * @param d |
| | | * @param years |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addYears(Date d, int years) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.YEAR, years); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的月份,可以为负 |
| | | * Adding the specified number of month to the given time is possible, including negative values. |
| | | * @param d |
| | | * @param months |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addMonths(Date d, int months) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.MONTH, months); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的天数,可以为负 |
| | | * Adding the specified number of day to the given time is possible, including negative values. |
| | | * @param d 日期对象 |
| | | * @param days |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addDays(Date d, int days) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.HOUR, days * 24); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的小时,可以为负 |
| | | * Adding the specified number of hour to the given time is possible, including negative values. |
| | | * @param d 日期对象 |
| | | * @param hours |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addHours(Date d, int hours) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.HOUR, hours); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的分钟,可以为负 |
| | | * Adding the specified number of minute to the given time is possible, including negative values. |
| | | * @param d |
| | | * @param minutes |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addMinutes(Date d, int minutes) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.MINUTE, minutes); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的秒数,可以为负 |
| | | * Adding the specified number of seconds to the given time is possible, including negative values. |
| | | * @param d |
| | | * @param seconds |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addSeconds(Date d, int seconds) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.SECOND, seconds); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的毫秒数,可以为负 |
| | | * Adding the specified number of milliseconds to the given time can result in a negative value. |
| | | * @param d |
| | | * @param milliseconds |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addMilliseconds(Date d, int milliseconds) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.MILLISECOND, milliseconds); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的年份是新的给定的年份 |
| | | * Setting the year of a date object to a new given year. |
| | | * @param d 需要设定的日期对象 |
| | | * @param year 新的年份 |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date setYearOfDate(Date d, int year) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.YEAR, year); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的月份是新的给定的月份 |
| | | * Set the month of a date object to a new given month. |
| | | * @param d 需要设定的日期对象 |
| | | * @param month 新的月份 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setMonthOfDate(Date d, int month) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.MONTH, month); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的天是新的给定的天 |
| | | * Set the day of a date object to a new given day. |
| | | * @param d 需要设定的日期对象 |
| | | * @param day 新的天 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setDayOfDate(Date d, int day) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.DAY_OF_MONTH, day); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的小时是新的给定的小时 |
| | | * Setting the hour of a date object to a new given hour. |
| | | * @param d 需要设定的日期对象 |
| | | * @param hour 新的小时数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setHourOfDate(Date d, int hour) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.HOUR_OF_DAY, hour); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的分钟是新的给定的分钟数 |
| | | * Set the minutes of a date object to a new given minute value. |
| | | * @param d 需要设定的日期对象 |
| | | * @param minute 新的分钟数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setMinuteOfDate(Date d, int minute) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.MINUTE, minute); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的秒数是新的给定的分钟数 |
| | | * Setting the seconds of a date object to the new given minute value. |
| | | * |
| | | * @param d 需要设定的日期对象 |
| | | * @param second 新的秒数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setSecondOfDate(Date d, int second) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.SECOND, second); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的毫秒数是新的给定的分钟数 |
| | | * Setting the milliseconds of a date object to a new given minute value. |
| | | * @param d 需要设定的日期对象 |
| | | * @param millisecond 新的毫秒数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setMillisecondOfDate(Date d, int millisecond) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.MILLISECOND, millisecond); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回指定日期的月份的天数量 |
| | | * Retrieve the number of days in the month of the specified date. |
| | | * @param d 日期对象 |
| | | */ |
| | | public static int getDaysOfMonth(Date d) { |
| | | int year = getYearOfDate(d); |
| | | int month = getMonthOfYear(d); |
| | | return getDaysOfMonth(year, month); |
| | | } |
| | | |
| | | /** |
| | | * 返回指定日期的月份的天数量 |
| | | * Retrieve the number of days in the month of the specified date. |
| | | * @param year 年 |
| | | * @param month 月 |
| | | */ |
| | | public static int getDaysOfMonth(int year, int month) { |
| | | int days = 0; |
| | | if (month == 2) { |
| | | if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { |
| | | days = 29; |
| | | } else { |
| | | days = 28; |
| | | } |
| | | } |
| | | if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) { |
| | | days = 30; |
| | | } |
| | | if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) { |
| | | days = 31; |
| | | } |
| | | return days; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回系统时间,以日期对象形式返回 |
| | | * |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date getSystemDate() { |
| | | return new Date(System.currentTimeMillis()); |
| | | } |
| | | |
| | | /** |
| | | * 返回系统时间,以毫秒形式返回 |
| | | * |
| | | * @return 毫秒数 |
| | | */ |
| | | public static long getSystemTime() { |
| | | return System.currentTimeMillis(); |
| | | } |
| | | |
| | | /** |
| | | * 返回24小时前的时间 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getLastDay(Date date) { |
| | | long day = date.getTime(); |
| | | long lastDay = day - 24 * 60 * 60 * 1000; |
| | | return new Date(lastDay); |
| | | } |
| | | |
| | | /** |
| | | * 返回24小时后的时间 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getTomorrow(Date date) { |
| | | long day = date.getTime(); |
| | | long tomorrow = day + 24 * 60 * 60 * 1000; |
| | | return new Date(tomorrow); |
| | | } |
| | | |
| | | /** |
| | | * 取得30天前的这个时间 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDayLastMonth() { |
| | | long day = new Date().getTime(); |
| | | long dayLastMonth = day - 24 * 60 * 60 * 1000 * 20; |
| | | return new Date(dayLastMonth); |
| | | } |
| | | |
| | | /** |
| | | * 取得30天后的这个时间 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDayNextMonth() { |
| | | long day = new Date().getTime(); |
| | | long dayNextMonth = day + 20 * 24 * 60 * 60 * 1000; |
| | | return new Date(dayNextMonth); |
| | | } |
| | | |
| | | public static int getMonthCount(Date sDate, Date eDate) { |
| | | String sDateStr = DateTimeHelper.formatDateTimetoString(sDate, "MM"); |
| | | String eDateStr = DateTimeHelper.formatDateTimetoString(eDate, "MM"); |
| | | int monthCount = Integer.parseInt(eDateStr) - Integer.parseInt(sDateStr) + 1; |
| | | return monthCount; |
| | | } |
| | | |
| | | /** |
| | | * 取得下个月的这天,比如2月1日可取得3月1日,此方法有很大局限性,不能用于月末的天数 |
| | | * Obtain the same day of the following month, for example, February 1st can obtain March 1st. This method has significant limitations and cannot be used for the last days of the month. |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getDayNextMonth(Date date) { |
| | | String yearStr = DateTimeHelper.formatDateTimetoString(date, "yyyy"); |
| | | String monthStr = DateTimeHelper.formatDateTimetoString(date, "MM"); |
| | | String dayStr = DateTimeHelper.formatDateTimetoString(date, "dd"); |
| | | int year = Integer.parseInt(yearStr); |
| | | int month = Integer.parseInt(monthStr); |
| | | if (month == 12) { |
| | | month = 1; |
| | | year = year + 1; |
| | | yearStr = String.valueOf(year); |
| | | monthStr = String.valueOf(month); |
| | | } |
| | | |
| | | String dateStr = yearStr + "-" + monthStr + "-" + dayStr; |
| | | try { |
| | | date = DateTimeHelper.parseToDate(dateStr); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return date; |
| | | } |
| | | |
| | | /** |
| | | * 获取当月开始时0点0分0秒 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getCurrentMouthStart() { |
| | | Date d = getSystemDate(); |
| | | d = setDayOfDate(d, 1); |
| | | d = setHourOfDate(d, 0); |
| | | d = setMinuteOfDate(d, 0); |
| | | d = setSecondOfDate(d, 0); |
| | | return d; |
| | | } |
| | | |
| | | /** |
| | | * 返回下月的这天 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getDateNextMonth(Date date) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.add(Calendar.MONTH, +1); |
| | | return cal.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 根据时间获取和当前时间的差距. |
| | | * Obtain the difference between the current time and the time in question. |
| | | * @param date - 待比较实际 |
| | | * @return 时间差距字符串 |
| | | */ |
| | | public static String getPassdTime(Date date) { |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | String ret = null; |
| | | |
| | | // 计算和当前相差秒数 |
| | | // Calculate the difference in seconds from the current time. |
| | | long currentTimeMillis = System.currentTimeMillis(); |
| | | long timeDiff = (currentTimeMillis - date.getTime()); |
| | | |
| | | int seconds = (int) (timeDiff / 1000); |
| | | int minutes = seconds / 60; |
| | | int hours = minutes / 60; |
| | | int days = hours / 24; |
| | | int months = days / 30; |
| | | |
| | | if (days <= 7) { |
| | | if (days != 0) { |
| | | ret = days + "天前"; |
| | | } else if (hours != 0) { |
| | | ret = hours + "小时前"; |
| | | } else if (minutes != 0) { |
| | | ret = minutes + "分钟前"; |
| | | } else { |
| | | ret = "刚刚"; |
| | | } |
| | | } else { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// HH:mm:ss"); |
| | | ret = sdf.format(date); |
| | | } |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前日期后几天的日期 |
| | | * Obtaining the date of the day after several days from the current date. |
| | | * @param day 天数 |
| | | * @return |
| | | */ |
| | | public static Date getCurrentNextDays(int day) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.add(Calendar.DAY_OF_YEAR, day); |
| | | Date date = calendar.getTime(); |
| | | return date; |
| | | } |
| | | |
| | | public static String getCurrentStringDate() { |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | String dateString = simpleDateFormat.format(new Date()); |
| | | return dateString; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前日期是星期几<br> |
| | | * Obtain the day of the week for the current date. |
| | | * @param dt |
| | | * @return 当前日期是星期几 |
| | | */ |
| | | public static String getWeekOfDate(Date dt) { |
| | | String[] weekDays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"}; |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(dt); |
| | | int w = cal.get(Calendar.DAY_OF_WEEK) - 1; |
| | | if (w < 0) { |
| | | w = 0; |
| | | } |
| | | return weekDays[w]; |
| | | } |
| | | |
| | | /** |
| | | * 获取今天时间 2017-11-20 00:00:00 |
| | | */ |
| | | public static Date todayDate() { |
| | | try { |
| | | String date = formatDatetoString(new Date()); |
| | | String todayString = date + " 00:00:00"; |
| | | return parseToDate(todayString, FMT_yyyyMMdd); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return new Date(); |
| | | } |
| | | |
| | | /** |
| | | * 获取指定日期的 时间 2017-11-20 00:00:00 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date createDate(Date date) { |
| | | try { |
| | | String dates = formatDatetoString(date); |
| | | String todayString = dates + " 00:00:00"; |
| | | return parseToDate(todayString, FMT_yyyyMMdd); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return new Date(); |
| | | } |
| | | |
| | | |
| | | public static String createDateTime(Date date) { |
| | | try { |
| | | String dates = formatDatetoString(date); |
| | | String time = DateTimeHelper.formatDateTimetoString(new Date(), FMT_HHmmss); |
| | | String todayString = dates + " " + time; |
| | | return todayString; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static String getTimeHint(Date time) { |
| | | String hint = ""; |
| | | double minutes = DateTimeHelper.getMinutesOfTwoDate(new Date(), time); |
| | | double hours = DateTimeHelper.getHoursOfTwoDate(new Date(), time); |
| | | double days = DateTimeHelper.getDaysOfTwoDate(new Date(), time); |
| | | if (minutes < 1) { |
| | | hint = "刚刚"; |
| | | } else if (hours < 1) { |
| | | hint = new Double(minutes).intValue() + "分钟前"; |
| | | } else if (days < 1) { |
| | | hint = new Double(hours).intValue() + "小时前"; |
| | | } else if (days < 7) { |
| | | hint = new Double(days).intValue() + "天前"; |
| | | } else { |
| | | hint = DateTimeHelper.formatDateTimetoString(time, DateTimeHelper.FMT_yyyyMMdd); |
| | | } |
| | | return hint; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据时间获取和当前时间的差距. |
| | | * Obtain the difference between the current time and the time in question. |
| | | * @param date - 待比较实际 |
| | | * @return 时间差距字符串 |
| | | */ |
| | | public static String getLoginTime(Date date) { |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | String ret = null; |
| | | |
| | | // 计算和当前相差秒数 |
| | | //Calculate the difference in seconds from the current time. |
| | | long currentTimeMillis = System.currentTimeMillis(); |
| | | long timeDiff = (currentTimeMillis - date.getTime()); |
| | | |
| | | int seconds = (int) (timeDiff / 1000); |
| | | int minutes = seconds / 60; |
| | | int hours = minutes / 60; |
| | | int days = hours / 24; |
| | | int months = days / 30; |
| | | |
| | | if (months != 0) { |
| | | ret = "1个月前"; |
| | | } else if (days != 0) { |
| | | ret = days + "天前"; |
| | | } else if (hours != 0) { |
| | | ret = hours + "小时前"; |
| | | } else if (minutes != 0) { |
| | | ret = minutes + "分钟前"; |
| | | } else { |
| | | ret = "刚刚"; |
| | | } |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | |
| | | public static Date getWXTime() { |
| | | |
| | | Calendar calendar = Calendar.getInstance(Locale.CHINA); |
| | | Date date = calendar.getTime(); |
| | | |
| | | return date; |
| | | } |
| | | |
| | | /** |
| | | * 是否是同一天 |
| | | * it the same day |
| | | * @param first |
| | | * @param second |
| | | * @return |
| | | */ |
| | | public static Boolean isSameDay(Date first, Date second) { |
| | | |
| | | if (first == null || second == null) { |
| | | return false; |
| | | } |
| | | |
| | | int day1 = getDayOfYear(first); |
| | | int day2 = getDayOfYear(second); |
| | | if (day1 != day2) { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 是否超过指定时刻 |
| | | * Has the specified time limit been exceeded |
| | | * @param day 时间 |
| | | * @param time 指定时刻 |
| | | * @return |
| | | */ |
| | | public static Boolean expireDayTime(Date day, Integer time) { |
| | | if (null == day) { |
| | | return false; |
| | | } |
| | | try { |
| | | String dates = formatDatetoString(day); |
| | | String timeHour = ""; |
| | | for (int i = 0; i <= 23; i++) { |
| | | if (i == time) { |
| | | if (i < 10) { |
| | | timeHour += " 0" + time + ":00:00"; |
| | | } else if (i < 23) { |
| | | timeHour += " " + time + ":00:00"; |
| | | } else { |
| | | timeHour += " 00" + time + ":00:00"; |
| | | } |
| | | } |
| | | } |
| | | String todayString = dates + timeHour; |
| | | Date esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss); |
| | | if (DateTimeHelper.compareTwoDate(day, esDayTime) != 1) { |
| | | int i = compareTwoDate(day, esDayTime); |
| | | System.out.println(i); |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 指定一天哪一个小时 |
| | | * Specify which hour of a particular day. |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static Date createDayTime(Integer time) { |
| | | String dates = formatDatetoString(new Date()); |
| | | String timeHour = ""; |
| | | for (int i = 0; i <= 23; i++) { |
| | | if (i == time) { |
| | | if (i < 10) { |
| | | timeHour += " 0" + time + ":00:00"; |
| | | } else if (i < 23) { |
| | | timeHour += " " + time + ":00:00"; |
| | | } else { |
| | | timeHour += " 00" + time + ":00:00"; |
| | | } |
| | | } |
| | | } |
| | | String todayString = dates + timeHour; |
| | | Date esDayTime = new Date(); |
| | | try { |
| | | esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | |
| | | return esDayTime; |
| | | } |
| | | |
| | | /** |
| | | * 数字换算成中文(周) |
| | | * Conversion of numbers to Chinese (weeks) |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static String getWeekString(Integer time) { |
| | | if (time == 1) { |
| | | return "一"; |
| | | } else if (time == 2) { |
| | | return "二"; |
| | | } else if (time == 3) { |
| | | return "三"; |
| | | } else if (time == 4) { |
| | | return "四"; |
| | | } else if (time == 5) { |
| | | return "五"; |
| | | } else if (time == 6) { |
| | | return "六"; |
| | | } else if (time == 0 || time == 7) { |
| | | return "日"; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * LocalDateTime -> Date |
| | | * |
| | | * @param localDateTime |
| | | * @return |
| | | */ |
| | | public static Date asDate(LocalDateTime localDateTime) { |
| | | return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); |
| | | } |
| | | |
| | | /** |
| | | * Date -> LocalDateTime |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static LocalDateTime asLocalDateTime(Date date) { |
| | | return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取两个时间的间隔(秒) |
| | | * Obtain the time difference between two instances (in seconds). |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return |
| | | */ |
| | | public static long getDateBetween(Date d1, Date d2) { |
| | | return Math.abs((d1.getTime() - d2.getTime()) / 1000);//取绝对值 |
| | | } |
| | | |
| | | /** |
| | | * @param date |
| | | * @return 获取今天最后的时间 |
| | | * Obtain the final time of today. |
| | | */ |
| | | public static Date getEndDate(Date date) { |
| | | if (date == null) { |
| | | return null; |
| | | } |
| | | Calendar c = Calendar.getInstance(); |
| | | c.setTime(date); |
| | | c.set(Calendar.HOUR_OF_DAY, 23); |
| | | c.set(Calendar.MINUTE, 59); |
| | | c.set(Calendar.SECOND, 59); |
| | | return c.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 日期天数差 |
| | | * Days Difference |
| | | */ |
| | | public static int daysBetween(Date today, Date endDate) throws ParseException { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | today = sdf.parse(sdf.format(today)); |
| | | endDate = sdf.parse(sdf.format(endDate)); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(today); |
| | | long time1 = cal.getTimeInMillis(); |
| | | cal.setTime(endDate); |
| | | long time2 = cal.getTimeInMillis(); |
| | | long between_days = (time2 - time1) / (1000 * 3600 * 24); |
| | | return Integer.parseInt(String.valueOf(between_days)); |
| | | } |
| | | |
| | | /** |
| | | * 获取到当月所有日期 |
| | | * Obtain all dates of the current month |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static List<Date> getAllTheDateOftheMonth(Date date) { |
| | | List<Date> list = new ArrayList<Date>(); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.set(Calendar.DATE, 1); |
| | | |
| | | int month = cal.get(Calendar.MONTH); |
| | | while (cal.get(Calendar.MONTH) == month) { |
| | | list.add(cal.getTime()); |
| | | cal.add(Calendar.DATE, 1); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | /*public static void main(String[] args) throws ParseException { |
| | | List<Date> allTheDateOftheMonth = getAllTheDateOftheMonth(new Date()); |
| | | Date date = allTheDateOftheMonth.get(11); |
| | | System.out.println(date.toLocaleString()); |
| | | int i = daysBetween(new Date(), date); |
| | | System.out.println(i); |
| | | }*/ |
| | | |
| | | |
| | | } |
New file |
| | |
| | | /** |
| | | * Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com). |
| | | * <p> |
| | | * Licensed under the Apache License, Version 2.0 (the "License"); |
| | | * you may not use this file except in compliance with the License. |
| | | * You may obtain a copy of the License at |
| | | * <p> |
| | | * http://www.apache.org/licenses/LICENSE-2.0 |
| | | * <p> |
| | | * Unless required by applicable law or agreed to in writing, software |
| | | * distributed under the License is distributed on an "AS IS" BASIS, |
| | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | * See the License for the specific language governing permissions and |
| | | * limitations under the License. |
| | | */ |
| | | package com.dsh.competition.util; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.commons.lang3.time.DateFormatUtils; |
| | | import org.apache.commons.lang3.time.DateUtils; |
| | | |
| | | import java.sql.Timestamp; |
| | | import java.text.DateFormat; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.Objects; |
| | | import java.util.TimeZone; |
| | | |
| | | public class DateUtil { |
| | | |
| | | private static TimeZone tz = TimeZone.getTimeZone("GMT+8"); |
| | | |
| | | /** |
| | | * 获取YYYY格式 |
| | | */ |
| | | public static String getYear() { |
| | | return formatDate(new Date(), "yyyy"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY格式 |
| | | */ |
| | | public static String getYear(Date date) { |
| | | return formatDate(date, "yyyy"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD格式 |
| | | */ |
| | | public static String getDay() { |
| | | return formatDate(new Date(), "yyyy-MM-dd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD格式 |
| | | */ |
| | | public static String getDay(Date date) { |
| | | return formatDate(date, "yyyy-MM-dd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYYMMDD格式 |
| | | */ |
| | | public static String getDays() { |
| | | return formatDate(new Date(), "yyyyMMdd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYYMMDD格式 |
| | | */ |
| | | public static String getDays(Date date) { |
| | | return formatDate(date, "yyyyMMdd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD HH:mm:ss格式 |
| | | */ |
| | | public static String getTime() { |
| | | return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD HH:mm:ss.SSS格式 |
| | | */ |
| | | public static String getMsTime() { |
| | | return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYYMMDDHHmmss格式 |
| | | */ |
| | | public static String getAllTime() { |
| | | return formatDate(new Date(), "yyyyMMddHHmmss"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD HH:mm:ss格式 |
| | | */ |
| | | public static String getTime(Date date) { |
| | | return formatDate(date, "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | public static String formatDate(Date date, String pattern) { |
| | | String formatDate = null; |
| | | if (StringUtils.isNotBlank(pattern)) { |
| | | formatDate = DateFormatUtils.format(date, pattern); |
| | | } else { |
| | | formatDate = DateFormatUtils.format(date, "yyyy-MM-dd"); |
| | | } |
| | | return formatDate; |
| | | } |
| | | |
| | | /** |
| | | * 日期比较,如果s>=e 返回true 否则返回false) |
| | | * |
| | | * @author luguosui |
| | | */ |
| | | public static boolean compareDate(String s, String e) { |
| | | if (parseDate(s) == null || parseDate(e) == null) { |
| | | return false; |
| | | } |
| | | return parseDate(s).getTime() >= parseDate(e).getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parseDate(String date) { |
| | | return parse(date, "yyyy-MM-dd"); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parseTimeMinutes(String date) { |
| | | return parse(date, "yyyy-MM-dd HH:mm"); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parseTime(String date) { |
| | | return parse(date, "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parse(String date, String pattern) { |
| | | try { |
| | | if(Objects.nonNull(date)) { |
| | | return DateUtils.parseDate(date, pattern); |
| | | } |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static String format(Date date, String pattern) { |
| | | return DateFormatUtils.format(date, pattern); |
| | | } |
| | | |
| | | /** |
| | | * 把日期转换为Timestamp |
| | | */ |
| | | public static Timestamp format(Date date) { |
| | | return new Timestamp(date.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * 校验日期是否合法 |
| | | */ |
| | | public static boolean isValidDate(String s) { |
| | | return parse(s, "yyyy-MM-dd HH:mm:ss") != null; |
| | | } |
| | | |
| | | /** |
| | | * 校验日期是否合法 |
| | | */ |
| | | public static boolean isValidDate(String s, String pattern) { |
| | | return parse(s, pattern) != null; |
| | | } |
| | | |
| | | public static int getDiffYear(String startTime, String endTime) { |
| | | DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); |
| | | try { |
| | | int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse( |
| | | startTime).getTime()) / (1000 * 60 * 60 * 24)) / 365); |
| | | return years; |
| | | } catch (Exception e) { |
| | | // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对 |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * <li>功能描述:时间相减得到天数 |
| | | */ |
| | | public static long getDaySub(String beginDateStr, String endDateStr) { |
| | | long day = 0; |
| | | SimpleDateFormat format = new SimpleDateFormat( |
| | | "yyyy-MM-dd"); |
| | | Date beginDate = null; |
| | | Date endDate = null; |
| | | |
| | | try { |
| | | beginDate = format.parse(beginDateStr); |
| | | endDate = format.parse(endDateStr); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000); |
| | | // System.out.println("相隔的天数="+day); |
| | | |
| | | return day; |
| | | } |
| | | |
| | | /** |
| | | * 得到n天之后的日期 |
| | | */ |
| | | public static String getAfterDayDate(String days) { |
| | | int daysInt = Integer.parseInt(days); |
| | | |
| | | Calendar canlendar = Calendar.getInstance(); // java.util包 |
| | | canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 |
| | | Date date = canlendar.getTime(); |
| | | |
| | | SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | String dateStr = sdfd.format(date); |
| | | |
| | | return dateStr; |
| | | } |
| | | |
| | | /** |
| | | * 得到n天之后是周几 |
| | | */ |
| | | public static String getAfterDayWeek(String days) { |
| | | int daysInt = Integer.parseInt(days); |
| | | |
| | | Calendar canlendar = Calendar.getInstance(); // java.util包 |
| | | canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 |
| | | Date date = canlendar.getTime(); |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat("E"); |
| | | String dateStr = sdf.format(date); |
| | | |
| | | return dateStr; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 得到系统日期 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDate() { |
| | | TimeZone.setDefault(tz); |
| | | return new Date(); |
| | | } |
| | | |
| | | /** |
| | | * 获取当前毫秒数 |
| | | * |
| | | * @return long |
| | | */ |
| | | public static long getCurMilli() { |
| | | long millisecond = 0; |
| | | Calendar cal = Calendar.getInstance(); |
| | | millisecond = cal.getTimeInMillis(); |
| | | return millisecond; |
| | | } |
| | | |
| | | /** |
| | | * 得到系统Calendar日期 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Calendar getCalendar() { |
| | | TimeZone.setDefault(tz); |
| | | Calendar cal = Calendar.getInstance(); |
| | | return cal; |
| | | } |
| | | /** |
| | | * 毫秒转日期时间 |
| | | * |
| | | * @param millisecond |
| | | * @return |
| | | */ |
| | | public static String getDateTime(long millisecond) { |
| | | if (millisecond == 0) { |
| | | millisecond = getCurMilli(); |
| | | } |
| | | SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | Calendar calendar = getCalendar(); |
| | | calendar.setTimeInMillis(millisecond); |
| | | return dateformat.format(calendar.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * 日期转毫秒(加分钟) |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static long getMillisecond_fz(String date, Integer day) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | String newDate = ""; |
| | | if ("".equals(date)) { |
| | | newDate = sdf.format(DateUtil.getDate()); |
| | | } else { |
| | | newDate = getDateTime(Long.parseLong(date)); |
| | | } |
| | | Date dt = null; |
| | | try { |
| | | dt = sdf.parse(newDate); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | Calendar rightNow = Calendar.getInstance(); |
| | | rightNow.setTime(dt); |
| | | rightNow.add(Calendar.MINUTE, day); |
| | | Date dt1 = rightNow.getTime(); |
| | | return dt1.getTime(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * Double文档 |
| | | */ |
| | | public class DoubleUtil { |
| | | |
| | | public static Double format(Double num) { |
| | | BigDecimal b = new BigDecimal(num); |
| | | num = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | return num; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLDecoder; |
| | | import java.net.URLEncoder; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | public class EmojiUtil { |
| | | /** |
| | | * 编码 |
| | | * |
| | | * @param str 待转换字符串 |
| | | * @return 转换后字符串 |
| | | * @throws UnsupportedEncodingException exception |
| | | * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集) |
| | | */ |
| | | public static String emojiEncode(String str) |
| | | throws UnsupportedEncodingException { |
| | | String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])"; |
| | | |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | Matcher matcher = pattern.matcher(str); |
| | | StringBuffer sb = new StringBuffer(); |
| | | while (matcher.find()) { |
| | | try { |
| | | matcher.appendReplacement( |
| | | sb, |
| | | "[[" |
| | | + URLEncoder.encode(matcher.group(1), |
| | | "UTF-8") + "]]"); |
| | | } catch (UnsupportedEncodingException e) { |
| | | // LOG.error("emojiConvert error", e); |
| | | throw e; |
| | | } |
| | | } |
| | | matcher.appendTail(sb); |
| | | // LOG.debug("emojiConvert " + str + " to " + sb.toString() |
| | | // + ", len:" + sb.length()); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 解码 |
| | | * |
| | | * @param str 转换后的字符串 |
| | | * @return 转换前的字符串 |
| | | * @throws UnsupportedEncodingException exception |
| | | * @Description 还原utf8数据库中保存的含转换后emoji表情的字符串 |
| | | */ |
| | | public static String emojiDecode(String str) |
| | | throws UnsupportedEncodingException { |
| | | String patternString = "\\[\\[(.*?)\\]\\]"; |
| | | |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | if (str == null) { |
| | | return str; |
| | | } |
| | | Matcher matcher = pattern.matcher(str); |
| | | |
| | | StringBuffer sb = new StringBuffer(); |
| | | while (matcher.find()) { |
| | | try { |
| | | matcher.appendReplacement(sb, |
| | | URLDecoder.decode(matcher.group(1), "UTF-8")); |
| | | } catch (UnsupportedEncodingException e) { |
| | | // LOG.error("emojiRecovery error", e); |
| | | throw e; |
| | | } |
| | | } |
| | | matcher.appendTail(sb); |
| | | // LOG.debug("emojiRecovery " + str + " to " + sb.toString()); |
| | | // System.out.println("emojiRecovery " + str + " to " + sb.toString()); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * @param str 待过滤字符串 |
| | | * @return 过滤后字符串 |
| | | * exception |
| | | * @Description 将字符串中的emoji表情过滤掉 |
| | | */ |
| | | public static String emojiSub(String str) { |
| | | String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])"; |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | Matcher matcher = pattern.matcher(str); |
| | | StringBuffer sb = new StringBuffer(); |
| | | while (matcher.find()) { |
| | | matcher.appendReplacement(sb, ""); |
| | | } |
| | | matcher.appendTail(sb); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | public class HeaderAuthUtil { |
| | | |
| | | /** |
| | | * 用户UserId变量 |
| | | */ |
| | | protected final static String HEADER_USERID = "userId"; |
| | | |
| | | /** |
| | | * 获取Request请求头UserId |
| | | * @return |
| | | */ |
| | | public static String getLoginAuthUserId (HttpServletRequest request) { |
| | | String userId = request.getHeader(HEADER_USERID); |
| | | return userId; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.serializer.SerializerFeature; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import com.fasterxml.jackson.databind.JavaType; |
| | | import com.fasterxml.jackson.databind.JsonNode; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.HashMap; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * |
| | | * 返回json数据封装工具类 |
| | | * |
| | | * @ClassName: JsonUtil |
| | | * @author: yuds |
| | | * @date: 2019-09-20 09:19:27 |
| | | * @version: V1.0.0 |
| | | */ |
| | | public class JsonUtil { |
| | | |
| | | /** |
| | | * <li>将对象转化为json输出 |
| | | * <li>QuoteFieldNames ———-输出key时是否使用双引号,默认为true |
| | | * <li>WriteMapNullValue ——–是否输出值为null的字段,默认为false |
| | | * <li>WriteNullNumberAsZero —-数值字段如果为null,输出为0,而非null |
| | | * <li>WriteNullListAsEmpty —–List字段如果为null,输出为[],而非null |
| | | * <li>WriteNullStringAsEmpty —字符类型字段如果为null,输出为”“,而非null |
| | | * <li>WriteNullBooleanAsFalse –Boolean字段如果为null,输出为false,而非null |
| | | * <li>DisableCircularReferenceDetect 禁止循环引用检测 |
| | | */ |
| | | private static SerializerFeature[] serializerFeaturess = { SerializerFeature.WriteMapNullValue, |
| | | SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullListAsEmpty, |
| | | SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullBooleanAsFalse, |
| | | SerializerFeature.DisableCircularReferenceDetect, }; |
| | | |
| | | private JsonUtil() { |
| | | |
| | | } |
| | | |
| | | /** |
| | | * fastJson Object转json |
| | | * |
| | | * @param obj |
| | | * @return |
| | | */ |
| | | public static String objToJson(Object obj) { |
| | | return JSON.toJSONString(obj, serializerFeaturess); |
| | | } |
| | | |
| | | /** |
| | | * fastJson Object转json |
| | | * |
| | | * @param obj |
| | | * @param dateFormat 时间格式化 |
| | | * @return |
| | | */ |
| | | public static String objToJson(Object obj, String dateFormat) { |
| | | return JSON.toJSONStringWithDateFormat(obj, dateFormat, serializerFeaturess); |
| | | } |
| | | |
| | | // 定义jackson对象 |
| | | private static final ObjectMapper MAPPER = new ObjectMapper(); |
| | | |
| | | /** |
| | | * 将对象转换成json字符串。 |
| | | * <p> |
| | | * Title: pojoToJson |
| | | * </p> |
| | | * <p> |
| | | * Description: |
| | | * </p> |
| | | * |
| | | * @param data |
| | | * @return |
| | | */ |
| | | public static String objectToJson(Object data) { |
| | | try { |
| | | SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm"); |
| | | MAPPER.setDateFormat(fmt); |
| | | String string = MAPPER.writeValueAsString(data); |
| | | return string; |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 将json结果集转化为对象 |
| | | * |
| | | * @param jsonData json数据 |
| | | * @param beanType 对象中的object类型 |
| | | * @return |
| | | */ |
| | | public static <T> T jsonToPojo(String jsonData, Class<T> beanType) { |
| | | try { |
| | | T t = MAPPER.readValue(jsonData, beanType); |
| | | return t; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 将json数据转换成pojo对象list |
| | | * <p> |
| | | * Title: jsonToList |
| | | * </p> |
| | | * <p> |
| | | * Description: |
| | | * </p> |
| | | * |
| | | * @param jsonData |
| | | * @param beanType |
| | | * @return |
| | | */ |
| | | public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) { |
| | | JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType); |
| | | try { |
| | | List<T> list = MAPPER.readValue(jsonData, javaType); |
| | | return list; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | public static JsonNode jsonToNode(String jsonData) { |
| | | try { |
| | | return MAPPER.readTree(jsonData); |
| | | } catch (Exception ex) { |
| | | ex.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public static Map<String, String> jsonToMap(String json) { |
| | | JsonNode nodes = jsonToNode(json); |
| | | Iterator<Map.Entry<String, JsonNode>> fields = nodes.fields(); |
| | | Map<String, String> map = new HashMap<>(); |
| | | while (fields.hasNext()) { |
| | | Map.Entry<String, JsonNode> next = fields.next(); |
| | | String value = next.getValue().asText(""); |
| | | map.put(next.getKey(), value); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.time.Duration; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * LocalDateTimeUtils |
| | | * LocalDateTime 时间工具 |
| | | * |
| | | * @author yudeshan |
| | | * @version V1.0 |
| | | */ |
| | | public class LocalDateTimeUtils { |
| | | private final static int[] dayArr = new int[] { 20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22 }; |
| | | private final static String[] constellationArr = new String[] { "摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座" }; |
| | | |
| | | |
| | | /** |
| | | * 取两个时间相差毫秒数 |
| | | * |
| | | * @param start 开始时间 |
| | | * @param end 结束时间 |
| | | * @return |
| | | */ |
| | | public static long betweenMillis(LocalDateTime start, LocalDateTime end) { |
| | | Duration duration = Duration.between(start, end); |
| | | return duration.toMillis(); |
| | | } |
| | | |
| | | /** |
| | | * 通过生日计算年龄 |
| | | * @param birthDay 生日 |
| | | * @return |
| | | * @throws ParseException |
| | | */ |
| | | public static int getAgeByBirth(LocalDate birthDay) throws ParseException { |
| | | int age = 0; |
| | | //出生日期晚于当前时间,无法计算 |
| | | LocalDate now=LocalDate.now(); |
| | | if (birthDay.isAfter(now)) { |
| | | throw new IllegalArgumentException( "生日大于当前时间!"); |
| | | } |
| | | //当前年份 |
| | | int yearNow = now.getYear(); |
| | | //当前月份 |
| | | int monthNow = now.getMonthValue(); |
| | | //当前日期 |
| | | int dayOfMonthNow = now.getDayOfMonth(); |
| | | |
| | | int yearBirth =birthDay.getYear(); |
| | | int monthBirth = birthDay.getMonthValue(); |
| | | int dayOfMonthBirth = birthDay.getDayOfMonth(); |
| | | //计算整岁数 |
| | | age = yearNow - yearBirth; |
| | | if (monthNow <= monthBirth) { |
| | | if (monthNow == monthBirth) { |
| | | if (dayOfMonthNow < dayOfMonthBirth){ |
| | | //当前日期在生日之前,年龄减一 |
| | | age--; |
| | | } |
| | | } else { |
| | | //当前月份在生日之前,年龄减一 |
| | | age--; |
| | | } |
| | | } |
| | | return age; |
| | | } |
| | | |
| | | /** |
| | | * 根据月份计算星座 |
| | | */ |
| | | |
| | | public static String getConstellation(LocalDate date) { |
| | | Integer month=date.getMonthValue(); |
| | | Integer day=date.getDayOfMonth(); |
| | | return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month]; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.MessageSource; |
| | | import org.springframework.context.i18n.LocaleContextHolder; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | |
| | | @Component |
| | | public class MessageUtils { |
| | | |
| | | @Autowired |
| | | private MessageSource messageSource; |
| | | |
| | | /** |
| | | * 根据消息键和参数 获取消息 委托给spring messageSource |
| | | * |
| | | * @param code 消息键 |
| | | * @param args 参数 |
| | | * @return 获取国际化翻译值 |
| | | */ |
| | | public String get(String code, Object... args) { |
| | | return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import com.alibaba.csp.sentinel.util.StringUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import redis.clients.jedis.Jedis; |
| | | import redis.clients.jedis.JedisPool; |
| | | import redis.clients.jedis.Pipeline; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | |
| | | /** |
| | | * Redis工具类 |
| | | */ |
| | | @Component |
| | | public class RedisUtil { |
| | | |
| | | @Autowired |
| | | private JedisPool jedisPool; |
| | | |
| | | |
| | | /** |
| | | * 向redis中存储字符串没有过期时间 |
| | | * Storing strings in Redis without an expiration time. |
| | | * @param key |
| | | * @param value |
| | | */ |
| | | public void setStrValue(String key, String value){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String set = resource.set(key, value); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 以分钟为单位设置存储值(设置过期时间) |
| | | * Set storage value in minutes (set expiration time) as units. |
| | | * @param key |
| | | * @param value |
| | | * @param time 秒 |
| | | */ |
| | | public void setStrValue(String key, String value, int time){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String setex = resource.setex(key, time, value); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 从redis中获取值 |
| | | * @param key |
| | | * @return |
| | | */ |
| | | public String getValue(String key){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String data = resource.get(key); |
| | | closeJedis(resource); |
| | | return data; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 批量获取 |
| | | * @param kes |
| | | * @return |
| | | */ |
| | | public List<Object> getValues(List<String> kes){ |
| | | if(null != kes){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | Pipeline pipelined = resource.pipelined(); |
| | | for(String key : kes){ |
| | | pipelined.get(key); |
| | | } |
| | | List<Object> list = pipelined.syncAndReturnAll(); |
| | | |
| | | closeJedis(resource); |
| | | pipelined.clear(); |
| | | try { |
| | | pipelined.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | List<Object> data = new ArrayList<>(); |
| | | for(Object o : list){ |
| | | if(null != o){ |
| | | data.add(o); |
| | | } |
| | | } |
| | | return data; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除key |
| | | * @param key |
| | | */ |
| | | public void remove(String key){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | Long del = resource.del(key); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除资源 |
| | | * @param jedis |
| | | */ |
| | | public void closeJedis(Jedis jedis){ |
| | | if(null != jedis){ |
| | | jedis.close(); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | |
| | | /** |
| | | * 定义统一返回对象 |
| | | */ |
| | | @ApiModel(value = "统一返回结果集") |
| | | public class ResultUtil<T> { |
| | | |
| | | public static final Integer SUCCESS = 200; |
| | | |
| | | public static final Integer PARAM_ERROR = 300; |
| | | |
| | | public static final Integer RUNTIME_ERROR = 400; |
| | | |
| | | public static final Integer ERROR = 500; |
| | | |
| | | public static final Integer TOKEN_ERROR = 600; |
| | | |
| | | public static final Integer SIGN_ERROR = 700; |
| | | |
| | | public static final String Token = "TOKEN_INVALID"; |
| | | |
| | | public static final String SIGN = "SIGN_INVALID"; |
| | | |
| | | @ApiModelProperty(name = "code", value = "业务状态码 200:成功,300:参数错误,400:运行异常,500:其他异常, 600:token无效,需重新登录,700:签名无效") |
| | | private Integer code;//备用状态码 |
| | | |
| | | @ApiModelProperty(name = "msg", value = "返回结果说明") |
| | | private String msg;//返回说明 |
| | | |
| | | @ApiModelProperty(name = "data", value = "返回结果值") |
| | | private T data;//返回数据 |
| | | |
| | | |
| | | |
| | | public String getMsg() { |
| | | return msg; |
| | | } |
| | | |
| | | public T getData() { |
| | | return data; |
| | | } |
| | | |
| | | |
| | | public Integer getCode() { |
| | | return code; |
| | | } |
| | | |
| | | private ResultUtil(Integer code, String msg) { |
| | | this.code = code; |
| | | this.msg = msg; |
| | | } |
| | | |
| | | private ResultUtil(Integer code, String msg, T data) { |
| | | this.code = code; |
| | | this.msg = msg; |
| | | this.data = data; |
| | | } |
| | | |
| | | |
| | | public static <T> ResultUtil<T> getResult(Integer code, String msg){ |
| | | return new ResultUtil<>(code, msg); |
| | | } |
| | | |
| | | public static <T> ResultUtil<T> getResult(Integer code, String msg, T data){ |
| | | return new ResultUtil<>(code, msg, data); |
| | | } |
| | | |
| | | /** |
| | | * 错误信息 |
| | | * @return |
| | | */ |
| | | public static ResultUtil error(String mag){ |
| | | return ResultUtil.getResult(ResultUtil.ERROR, mag, new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * 错误信息 |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil <T> error(String mag, T obj){ |
| | | return ResultUtil.getResult(ResultUtil.ERROR, mag, obj); |
| | | } |
| | | |
| | | /** |
| | | * token失效 |
| | | * @return |
| | | */ |
| | | public static ResultUtil tokenErr(){ |
| | | return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, ResultUtil.Token, new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * token失效 |
| | | * @return |
| | | */ |
| | | public static ResultUtil tokenErr(String msg){ |
| | | return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, msg, new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * 参数异常 |
| | | * @return |
| | | */ |
| | | public static ResultUtil paranErr(){ |
| | | return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "PARAM_ERROR", new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * 参数异常 |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> paranErr(T data){ |
| | | return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "SYSTEM_RUN_ERROR", data); |
| | | } |
| | | |
| | | @Autowired |
| | | private static MessageUtils messageUtils; |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static ResultUtil runErr(){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", new JSONObject()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static <T>ResultUtil<T> runErr(T data){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", data); |
| | | } |
| | | |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static <T>ResultUtil<T> runErr(T data, String msg){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, msg, data); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param |
| | | * @return |
| | | */ |
| | | public static ResultUtil success(){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new JSONObject()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param data |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> success(T data){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", data); |
| | | } |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param msg |
| | | * @param data |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> success(String msg, T data){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, msg, data); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 签名无效 |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> sign(){ |
| | | return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Random; |
| | | |
| | | |
| | | public class StrUtils { |
| | | /** |
| | | * 把逗号分隔的字符串转换字符串数组 |
| | | * Convert comma-separated string to string array. |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static String[] splitStr2StrArr(String str,String split) { |
| | | if (str != null && !str.equals("")) { |
| | | return str.split(split); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把逗号分隔字符串转换List的Long |
| | | * |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static List<Long> splitStr2LongArr(String str) { |
| | | String[] strings = splitStr2StrArr(str,","); |
| | | if (strings == null) return null; |
| | | |
| | | List<Long> result = new ArrayList<>(); |
| | | for (String string : strings) { |
| | | result.add(Long.parseLong(string)); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | /** |
| | | * 把逗号分隔字符串转换List的Long |
| | | * |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static List<Long> splitStr2LongArr(String str,String split) { |
| | | String[] strings = splitStr2StrArr(str,split); |
| | | if (strings == null) return null; |
| | | |
| | | List<Long> result = new ArrayList<>(); |
| | | for (String string : strings) { |
| | | result.add(Long.parseLong(string)); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | public static String getRandomString(int length) { |
| | | String str = "0123456789"; |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int number = random.nextInt(10); |
| | | sb.append(str.charAt(number)); |
| | | } |
| | | return sb.toString(); |
| | | |
| | | } |
| | | |
| | | public static String getComplexRandomString(int length) { |
| | | String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int number = random.nextInt(62); |
| | | sb.append(str.charAt(number)); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | public static String getClassCodeString(int length) { |
| | | String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int number =random.nextInt(36); |
| | | sb.append(str.charAt(number)); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | public static String convertPropertiesToHtml(String properties){ |
| | | //1:容量:6:32GB_4:样式:12:塑料壳 |
| | | StringBuilder sBuilder = new StringBuilder(); |
| | | String[] propArr = properties.split("_"); |
| | | for (String props : propArr) { |
| | | String[] valueArr = props.split(":"); |
| | | sBuilder.append(valueArr[1]).append(":").append(valueArr[3]).append("<br>"); |
| | | } |
| | | return sBuilder.toString(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import cn.mb.cloud.common.core.exception.BusinessException; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | /** |
| | | * 判断字符串不能为空和null,以及号码格式效验, |
| | | * 否则则抛出异常信息 |
| | | */ |
| | | public class StringUtil { |
| | | private StringUtil() { |
| | | } |
| | | |
| | | public static void checkNull(String str, String message) throws BusinessException { |
| | | if (!StringUtils.hasLength(str)) { |
| | | throw new BusinessException(message); |
| | | } |
| | | } |
| | | |
| | | public static void checkFormat(String str, String message) throws BusinessException { |
| | | if (!str.matches("^1[2|3|4|5|6|7|8|9][0-9]{9}$")) { |
| | | throw new BusinessException(message); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.Date; |
| | | |
| | | |
| | | //根据当前传入的时间,返回距离当前时间多少天 |
| | | |
| | | public class StudyTimeUtil { |
| | | private StudyTimeUtil() { |
| | | } |
| | | |
| | | /** |
| | | * 获取两个时间的间隔(秒)Obtain the time difference between two instances (in seconds). |
| | | * |
| | | * @param startDate 开始的时间 |
| | | * @return 返回当前时间与开始时间的相差天数 |
| | | */ |
| | | public static int getDateBetween(Date startDate) throws ParseException { |
| | | Date endDate = new Date(); |
| | | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | long startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime(); |
| | | long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime(); |
| | | int days = (int)((endDateTime - startDateTime) / (1000 * 3600 * 24)); |
| | | return days; |
| | | } |
| | | |
| | | public static Date getStartDate(LocalDateTime localDate) { |
| | | Date date = Date.from(localDate.atZone(ZoneId.systemDefault()).toInstant()); |
| | | return date; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | @Component |
| | | public class TokenUtil { |
| | | |
| | | @Autowired |
| | | private RedisUtil redisUtil; |
| | | |
| | | |
| | | public Integer getUserIdFormRedis(HttpServletRequest request) throws Exception { |
| | | String requestHeader = request.getHeader("Authorization"); |
| | | if (requestHeader != null && requestHeader.startsWith("Bearer ")) { |
| | | requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1); |
| | | String key = null; |
| | | int length = requestHeader.length(); |
| | | if(length > 32){ |
| | | key = requestHeader.substring(length - 32); |
| | | }else{ |
| | | key = requestHeader; |
| | | } |
| | | String value = redisUtil.getValue(key); |
| | | return null != value ? Integer.valueOf(value) : null; |
| | | }else{ |
| | | return null; |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util.akeylogin; |
| | | |
| | | import java.nio.charset.Charset; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.Base64; |
| | | |
| | | public class Base64Utils { |
| | | private static final Charset DEFAULT_CHARSET; |
| | | |
| | | public Base64Utils() { |
| | | } |
| | | |
| | | public static byte[] encode(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getEncoder().encode(src); |
| | | } |
| | | |
| | | public static byte[] decode(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getDecoder().decode(src); |
| | | } |
| | | |
| | | public static byte[] encodeUrlSafe(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getUrlEncoder().encode(src); |
| | | } |
| | | |
| | | public static byte[] decodeUrlSafe(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getUrlDecoder().decode(src); |
| | | } |
| | | |
| | | public static String encodeToString(byte[] src) { |
| | | return src.length == 0 ? "" : new String(encode(src), DEFAULT_CHARSET); |
| | | } |
| | | |
| | | public static byte[] decodeFromString(String src) { |
| | | return src.isEmpty() ? new byte[0] : decode(src.getBytes(DEFAULT_CHARSET)); |
| | | } |
| | | |
| | | public static String encodeToUrlSafeString(byte[] src) { |
| | | return new String(encodeUrlSafe(src), DEFAULT_CHARSET); |
| | | } |
| | | |
| | | public static byte[] decodeFromUrlSafeString(String src) { |
| | | return decodeUrlSafe(src.getBytes(DEFAULT_CHARSET)); |
| | | } |
| | | |
| | | static { |
| | | DEFAULT_CHARSET = StandardCharsets.UTF_8; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util.akeylogin; |
| | | |
| | | import java.lang.reflect.Array; |
| | | import java.util.Collection; |
| | | import java.util.Map; |
| | | |
| | | public class BaseUtils { |
| | | public static boolean isEmpty(Object target) { |
| | | if (target == null) { |
| | | return true; |
| | | } |
| | | if (target instanceof String && "".equals(target)) { |
| | | return true; |
| | | } else if (target instanceof Collection) { |
| | | return ((Collection<?>) target).isEmpty(); |
| | | } else if (target instanceof Map) { |
| | | return ((Map<?, ?>) target).isEmpty(); |
| | | } else if (target.getClass().isArray()) { |
| | | return Array.getLength(target) == 0; |
| | | } |
| | | return false; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util.akeylogin; |
| | | |
| | | import javax.crypto.Cipher; |
| | | import javax.crypto.SecretKey; |
| | | import javax.crypto.SecretKeyFactory; |
| | | import javax.crypto.spec.DESKeySpec; |
| | | import javax.crypto.spec.IvParameterSpec; |
| | | import java.security.Key; |
| | | import java.security.spec.AlgorithmParameterSpec; |
| | | |
| | | public class DES { |
| | | public static final String ALGORITHM = "DES"; |
| | | public static final String PADDING = "DES/CBC/PKCS5Padding"; |
| | | private static final byte[] DEFAULT_INITIALIZATION_VECTOR = ("00000000".getBytes()); |
| | | |
| | | private String padding = PADDING; |
| | | private byte[] initializationVectorBytes = DEFAULT_INITIALIZATION_VECTOR; |
| | | private AlgorithmParameterSpec paramSpec; |
| | | |
| | | public DES() { |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | public DES(String padding) { |
| | | this.padding = padding; |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | public DES(String padding, byte[] initializationVectorBytes) { |
| | | this.padding = padding; |
| | | this.initializationVectorBytes = initializationVectorBytes; |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | public DES(byte[] initializationVectorBytes) { |
| | | this.initializationVectorBytes = initializationVectorBytes; |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | |
| | | public byte[] encodeBytes(byte[] data, byte[] key) throws Exception { |
| | | Key secretKey = getKey(key); |
| | | Cipher cipher = Cipher.getInstance(padding); |
| | | cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec); |
| | | byte[] bytes = cipher.doFinal(data); |
| | | return bytes; |
| | | } |
| | | |
| | | public byte[] decodeBytes(byte[] data, byte[] key) throws Exception { |
| | | Key secretKey = getKey(key); |
| | | Cipher cipher = Cipher.getInstance(padding); |
| | | cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec); |
| | | return cipher.doFinal(data); |
| | | |
| | | } |
| | | |
| | | public String getPadding() { |
| | | return padding; |
| | | } |
| | | |
| | | public byte[] getInitializationVectorBytes() { |
| | | return initializationVectorBytes; |
| | | } |
| | | |
| | | private static Key getKey(byte[] key) throws Exception { |
| | | DESKeySpec dks = new DESKeySpec(key); |
| | | SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); |
| | | SecretKey secretKey = keyFactory.generateSecret(dks); |
| | | return secretKey; |
| | | } |
| | | |
| | | public static byte[] decode(byte[] data, byte[] key) throws Exception { |
| | | return decode(data, key, DEFAULT_INITIALIZATION_VECTOR); |
| | | } |
| | | |
| | | |
| | | public static byte[] encode(byte[] data, byte[] key) throws Exception { |
| | | return encode(data, key, DEFAULT_INITIALIZATION_VECTOR); |
| | | } |
| | | |
| | | public static byte[] decode(byte[] data, byte[] key, byte[] ivBytes) throws Exception { |
| | | DES des = new DES(PADDING, ivBytes); |
| | | return des.decodeBytes(data, key); |
| | | } |
| | | |
| | | public static byte[] encode(byte[] data, byte[] key, byte[] ivBytes) throws Exception { |
| | | DES des = new DES(PADDING, ivBytes); |
| | | return des.encodeBytes(data, key); |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util.akeylogin; |
| | | |
| | | import java.security.MessageDigest; |
| | | |
| | | public class Md5Util { |
| | | private static final String hexDigIts[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; |
| | | |
| | | /** |
| | | * MD5加密 |
| | | * |
| | | * @param origin 字符 |
| | | * @param charsetname 编码 |
| | | * @return |
| | | */ |
| | | public static String MD5Encode(String origin, String charsetname) { |
| | | String resultString = null; |
| | | try { |
| | | resultString = new String(origin); |
| | | MessageDigest md = MessageDigest.getInstance("MD5"); |
| | | if (null == charsetname || "".equals(charsetname)) { |
| | | resultString = byteArrayToHexString(md.digest(resultString.getBytes())); |
| | | } else { |
| | | resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname))); |
| | | } |
| | | } catch (Exception e) { |
| | | } |
| | | return resultString; |
| | | } |
| | | |
| | | |
| | | public static String byteArrayToHexString(byte b[]) { |
| | | StringBuffer resultSb = new StringBuffer(); |
| | | for (int i = 0; i < b.length; i++) { |
| | | resultSb.append(byteToHexString(b[i])); |
| | | } |
| | | return resultSb.toString(); |
| | | } |
| | | |
| | | public static String byteToHexString(byte b) { |
| | | int n = b; |
| | | if (n < 0) { |
| | | n += 256; |
| | | } |
| | | int d1 = n / 16; |
| | | int d2 = n % 16; |
| | | return hexDigIts[d1] + hexDigIts[d2]; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.competition.util.akeylogin; |
| | | |
| | | import java.util.Map; |
| | | import java.util.TreeMap; |
| | | |
| | | public class SignUtil { |
| | | private static String charset = "utf8"; |
| | | |
| | | public static String getSign(Map<String, Object> data, String secret) { |
| | | if (data == null) { |
| | | return null; |
| | | } |
| | | //排序参数 |
| | | Map<String, Object> mappingList = new TreeMap<>(data); |
| | | StringBuilder plainText= new StringBuilder(); |
| | | mappingList.forEach((k, v) -> { |
| | | if (!"sign".equals(k) && !BaseUtils.isEmpty(v)) { |
| | | plainText.append(String.format("%s=%s&", k, v)); |
| | | } |
| | | }); |
| | | String substring = plainText.substring(0, plainText.length() - 1); |
| | | return Md5Util.MD5Encode(substring + secret, charset); |
| | | } |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <parent> |
| | | <groupId>cn.mb.cloud</groupId> |
| | | <artifactId>mb-cloud-parent</artifactId> |
| | | <version>1.1.3</version> |
| | | <relativePath>../cloud-server-parent/pom.xml</relativePath> |
| | | </parent> |
| | | |
| | | <artifactId>mb-cloud-gateway</artifactId> |
| | | <packaging>jar</packaging> |
| | | <name>网关</name> |
| | | <description>网关</description> |
| | | |
| | | |
| | | <dependencies> |
| | | <dependency> |
| | | <groupId>cn.mb.cloud</groupId> |
| | | <artifactId>mb-cloud-common-gateway</artifactId> |
| | | </dependency> |
| | | <!--更改mybatis版本--> |
| | | <dependency> |
| | | <groupId>org.mybatis</groupId> |
| | | <artifactId>mybatis</artifactId> |
| | | <version>3.5.6</version> |
| | | </dependency> |
| | | <dependency> <!--swagger2--> |
| | | <groupId>io.springfox</groupId> |
| | | <artifactId>springfox-swagger2</artifactId> |
| | | <version>2.9.2</version> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>io.swagge</groupId> |
| | | <artifactId>swagger-annotations</artifactId> |
| | | </exclusion> |
| | | <exclusion> |
| | | <groupId>io.swagge</groupId> |
| | | <artifactId>swagger-models</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>io.swagger</groupId> |
| | | <artifactId>swagger-annotations</artifactId> |
| | | <version>1.5.22</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>io.swagger</groupId> |
| | | <artifactId>swagger-models</artifactId> |
| | | <version>1.5.22</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>redis.clients</groupId> |
| | | <artifactId>jedis</artifactId> |
| | | <version>2.9.0</version> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | <build> |
| | | <plugins> |
| | | <plugin> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-maven-plugin</artifactId> |
| | | <executions> |
| | | <execution> |
| | | <goals> |
| | | <goal>repackage</goal> |
| | | </goals> |
| | | </execution> |
| | | </executions> |
| | | </plugin> |
| | | <plugin> |
| | | <groupId>com.spotify</groupId> |
| | | <artifactId>docker-maven-plugin</artifactId> |
| | | </plugin> |
| | | </plugins> |
| | | </build> |
| | | |
| | | <repositories> |
| | | <repository> |
| | | <id>magic-beans-releases</id> |
| | | <url>http://maven.magic-beans.cn/nexus/content/repositories/releases/</url> |
| | | </repository> |
| | | <repository> |
| | | <id>aliyun</id> |
| | | <name>aliyun</name> |
| | | <url>https://maven.aliyun.com/repository/public</url> |
| | | </repository> |
| | | </repositories> |
| | | </project> |
New file |
| | |
| | | package cn.mb.cloud.gateway; |
| | | |
| | | |
| | | import cn.mb.cloud.common.core.annotation.MBCloudApplication; |
| | | import org.springframework.boot.SpringApplication; |
| | | import org.springframework.context.annotation.ComponentScan; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import java.util.TimeZone; |
| | | |
| | | /** |
| | | * @author jason |
| | | * 网关应用 |
| | | */ |
| | | |
| | | @MBCloudApplication |
| | | @ComponentScan({"cn.mb.cloud"}) |
| | | public class GatewayApplication { |
| | | |
| | | public static void main(String[] args) { |
| | | SpringApplication.run(GatewayApplication.class, args); |
| | | } |
| | | |
| | | @PostConstruct |
| | | void started() { |
| | | TimeZone.setDefault(TimeZone.getTimeZone("GMT+7")); |
| | | } |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.auth; |
| | | |
| | | |
| | | import org.apache.commons.lang.StringUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.net.URLDecoder; |
| | | import java.util.Map; |
| | | |
| | | |
| | | @Service |
| | | public class AuthService { |
| | | |
| | | private final static Logger log = LoggerFactory.getLogger(AuthService.class); |
| | | |
| | | public static final AuthService me = new AuthService(); |
| | | |
| | | /** |
| | | * 鉴权 |
| | | * @param appid |
| | | * @param sign |
| | | * @return |
| | | */ |
| | | public ResultUtil checkSyncAuth(String appid, String uri, String sign, Map<String, Object> queryParams) { |
| | | try { |
| | | sign = URLDecoder.decode(sign, "UTF-8"); |
| | | if (StringUtils.isBlank(sign)) { |
| | | return ResultUtil.sign(); |
| | | } |
| | | // 1.鉴权 |
| | | String signUrl = AuthenticationKit.getSignUrl(uri, queryParams, "sign"); |
| | | signUrl = signUrl.replaceAll("& #40;", "\\("); |
| | | signUrl = signUrl.replaceAll("& #41;", "\\)"); |
| | | String signUrlEncode = AuthenticationKit.signUrlEncode(signUrl, appid); |
| | | if(sign.indexOf(" ") != -1 && signUrlEncode.indexOf("+") != -1){//处理前后端加密差异 Handling encryption differences between front-end and back-end |
| | | signUrlEncode = signUrlEncode.replaceAll("\\+", " "); |
| | | } |
| | | |
| | | // 签名无 not sign |
| | | if (StringUtils.isBlank(sign) || !sign.equals(signUrlEncode)) { |
| | | return ResultUtil.sign(); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return ResultUtil.runErr(); |
| | | } |
| | | return ResultUtil.success(); |
| | | } |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.auth; |
| | | |
| | | import org.springframework.http.server.reactive.ServerHttpRequest; |
| | | import org.springframework.util.MultiValueMap; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * |
| | | * 接口鉴权工具类 |
| | | * |
| | | * @author gwx 2017-12-23 |
| | | * |
| | | */ |
| | | public class AuthenticationKit { |
| | | public static final String utf8="UTF-8"; |
| | | |
| | | /** |
| | | * 返回64 位 token |
| | | * |
| | | * @param key 自定义安全字符 |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static String getToken(String key) throws Exception { |
| | | // 随机生成 32位字符 |
| | | String salt = HashKit.generateSaltForSha256(); |
| | | // 获取当前时间 |
| | | long cur = System.currentTimeMillis(); |
| | | // 生成64位token |
| | | String access_token = getToken256(key, salt, cur); |
| | | return access_token; |
| | | } |
| | | |
| | | /** |
| | | * 返回64 位 token |
| | | * |
| | | * @param key |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static String getToken256(String key, String salt, long cur) throws Exception { |
| | | // 生成64位token |
| | | String access_token = HashKit.sha256(salt + cur + key); |
| | | return access_token; |
| | | } |
| | | |
| | | /** |
| | | * 返回到秒 |
| | | * |
| | | * @return |
| | | */ |
| | | public static String createTimestamp() { |
| | | long l = System.currentTimeMillis(); |
| | | return Long.toString(l / 1000); |
| | | } |
| | | |
| | | /** |
| | | * 返回noce 不带 短杠"-" |
| | | * |
| | | * @return |
| | | */ |
| | | public static String createNonceStr() { |
| | | return getUUID(); |
| | | } |
| | | |
| | | public static String getUUID() { |
| | | UUID uuid = UUID.randomUUID(); |
| | | String str = uuid.toString(); |
| | | str = str.replaceAll("-", ""); |
| | | return str; |
| | | } |
| | | |
| | | /** |
| | | * 组装路径 |
| | | * |
| | | * @param params |
| | | * @return |
| | | */ |
| | | public static String localSignParam(Map<String, Object> params) { |
| | | return localSignUrl(null, params, false); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 组装签名路径 |
| | | * @param url |
| | | * @param params |
| | | * @return |
| | | */ |
| | | public static String localSignUrl(String url, Map<String, Object> params, boolean urlEncode) { |
| | | Set<Map.Entry<String, Object>> entries = params.entrySet(); |
| | | List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries); |
| | | // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) |
| | | //Sort all incoming parameters in ascending order according to the ASCII code of the field name (lexicographic order). |
| | | Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() { |
| | | public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) { |
| | | return (o1.getKey()).toString().compareTo(o2.getKey()); |
| | | } |
| | | }); |
| | | // 构造签名键值对的格式 |
| | | // Format for constructing key-value pairs for signatures |
| | | StringBuilder sb = new StringBuilder(); |
| | | for (Map.Entry<String, Object> item : infoIds) { |
| | | if (item.getKey() != null || item.getKey() != "") { |
| | | String key = item.getKey(); |
| | | Object val = item.getValue(); |
| | | if (!(val == "" || val == null)) { |
| | | sb.append(key + "=" + val + "&"); |
| | | } |
| | | } |
| | | } |
| | | return sb.substring(0, sb.length() - 1); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 加密签名路径生成签名 |
| | | * |
| | | * @param signUrl |
| | | * /token?appid=12345×tamp=1512440267&nonce=12345 |
| | | * @param encryptKey |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static String signUrlEncode(String signUrl, String encryptKey) throws Exception { |
| | | byte[] signByte = HMACSHA1.HmacSHA1Encrypt(signUrl, encryptKey); |
| | | String localSign = Base64.getEncoder().encodeToString(signByte); |
| | | return localSign; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 服务端 获取 客户端请求 组装验证签名 |
| | | * @param delParams 移除不相关 的签名参数 |
| | | * @return |
| | | */ |
| | | public static String getSignUrl(String url, Map<String, Object> queryParams, String... delParams) { |
| | | // 获取相对的访问路径 |
| | | //Get the relative access path |
| | | if (queryParams.size() > 0) { |
| | | // 删除 Delete |
| | | for (int i = 0, len = delParams.length; i < len; i++) { |
| | | queryParams.remove(delParams[i]); |
| | | } |
| | | return localSignUrl(url, queryParams, false); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 组装签名路径 客户端测试用 |
| | | * @param url api访问地址 "/apid" |
| | | * @param appid |
| | | * @return |
| | | */ |
| | | public static String getSignUrl(String url, String appid, Map<String, String> queryParas) { |
| | | Map<String, Object> params = new TreeMap<String, Object>(); |
| | | params.put("appid", appid); |
| | | params.put("nonce", createNonceStr()); |
| | | params.put("timestamp", createTimestamp()); |
| | | if(queryParas!=null && queryParas.size()>0){ |
| | | params.putAll(queryParas); |
| | | } |
| | | return localSignUrl(url, params, false); |
| | | } |
| | | |
| | | /** |
| | | * 组装签名路径 客户端测试用 |
| | | * @param url api访问地址 "/apid" |
| | | * @param appid |
| | | * @return |
| | | */ |
| | | public static String getSignUrl(String url, String appid) { |
| | | return getSignUrl(url, appid, ""); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @param url |
| | | * @param appid |
| | | * @param params |
| | | * @return |
| | | */ |
| | | public static String getSignUrl(String url, String appid, String params) { |
| | | String urlTmp = getSignUrl(url, appid, new HashMap<String,String>()); |
| | | return urlTmp + UrlEncoderUtils.encode(params); |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.auth; |
| | | |
| | | |
| | | import javax.crypto.Mac; |
| | | import javax.crypto.SecretKey; |
| | | import javax.crypto.spec.SecretKeySpec; |
| | | import java.util.Base64; |
| | | |
| | | public class HMACSHA1 { |
| | | |
| | | private static final String MAC_NAME = "HmacSHA1"; |
| | | private static final String ENCODING = "UTF-8"; |
| | | |
| | | /* |
| | | * 展示了一个生成指定算法密钥的过程 初始化HMAC密钥 |
| | | * |
| | | * @return |
| | | * |
| | | * @throws Exception |
| | | * |
| | | * public static String initMacKey() throws Exception { //得到一个 指定算法密钥的密钥生成器 |
| | | * KeyGenerator KeyGenerator keyGenerator |
| | | * =KeyGenerator.getInstance(MAC_NAME); //生成一个密钥 SecretKey secretKey |
| | | * =keyGenerator.generateKey(); return null; } |
| | | */ |
| | | |
| | | /** |
| | | * 使用 HMAC-SHA1 签名方法对对encryptText进行签名 |
| | | * |
| | | * @param encryptText |
| | | * 被签名的字符串 |
| | | * @param encryptKey |
| | | * 密钥 |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception { |
| | | byte[] data = encryptKey.getBytes(ENCODING); |
| | | // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称 |
| | | Mac mac = Mac.getInstance(MAC_NAME); |
| | | SecretKey secretKey = new SecretKeySpec(data, MAC_NAME); |
| | | // 生成一个指定 Mac 算法 的 Mac 对象 |
| | | // 用给定密钥初始化 Mac 对象 |
| | | mac.init(secretKey); |
| | | |
| | | byte[] text = encryptText.getBytes(ENCODING); |
| | | // 完成 Mac 操作 |
| | | return mac.doFinal(text); |
| | | } |
| | | |
| | | // public static void main(String[] args) { |
| | | // |
| | | // String encryptText = "123"; |
| | | // String encryptKey = "adc"; |
| | | // try { |
| | | // byte[] b = HmacSHA1Encrypt(encryptText, encryptKey); |
| | | // String str = HashKit.toHex(b); |
| | | // String str2 = new String(Base64.getEncoder().encodeToString(b)); |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.auth; |
| | | /** |
| | | * Copyright (c) 2011-2017, James Zhan 詹波 (jfinal@126.com). |
| | | * |
| | | * Licensed under the Apache License, Version 2.0 (the "License"); |
| | | * you may not use this file except in compliance with the License. |
| | | * You may obtain a copy of the License at |
| | | * |
| | | * http://www.apache.org/licenses/LICENSE-2.0 |
| | | * |
| | | * Unless required by applicable law or agreed to in writing, software |
| | | * distributed under the License is distributed on an "AS IS" BASIS, |
| | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | * See the License for the specific language governing permissions and |
| | | * limitations under the License. |
| | | */ |
| | | |
| | | import java.security.MessageDigest; |
| | | |
| | | public class HashKit { |
| | | |
| | | public static final long FNV_OFFSET_BASIS_64 = 0xcbf29ce484222325L; |
| | | public static final long FNV_PRIME_64 = 0x100000001b3L; |
| | | |
| | | private static final java.security.SecureRandom random = new java.security.SecureRandom(); |
| | | private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray(); |
| | | private static final char[] CHAR_ARRAY = "_-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" |
| | | .toCharArray(); |
| | | |
| | | public static long fnv1a64(String key) { |
| | | long hash = FNV_OFFSET_BASIS_64; |
| | | for (int i = 0, size = key.length(); i < size; i++) { |
| | | hash ^= key.charAt(i); |
| | | hash *= FNV_PRIME_64; |
| | | } |
| | | return hash; |
| | | } |
| | | |
| | | public static String md5(String srcStr) { |
| | | return hash("MD5", srcStr); |
| | | } |
| | | |
| | | public static String sha1(String srcStr) { |
| | | return hash("SHA-1", srcStr); |
| | | } |
| | | |
| | | public static String sha256(String srcStr) { |
| | | return hash("SHA-256", srcStr); |
| | | } |
| | | |
| | | public static String sha384(String srcStr) { |
| | | return hash("SHA-384", srcStr); |
| | | } |
| | | |
| | | public static String sha512(String srcStr) { |
| | | return hash("SHA-512", srcStr); |
| | | } |
| | | |
| | | public static String hash(String algorithm, String srcStr) { |
| | | try { |
| | | MessageDigest md = MessageDigest.getInstance(algorithm); |
| | | byte[] bytes = md.digest(srcStr.getBytes("utf-8")); |
| | | return toHex(bytes); |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | |
| | | public static String toHex(byte[] bytes) { |
| | | StringBuilder ret = new StringBuilder(bytes.length * 2); |
| | | for (int i = 0; i < bytes.length; i++) { |
| | | ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]); |
| | | ret.append(HEX_DIGITS[bytes[i] & 0x0f]); |
| | | } |
| | | return ret.toString(); |
| | | } |
| | | |
| | | /** |
| | | * md5 128bit 16bytes sha1 160bit 20bytes sha256 256bit 32bytes sha384 |
| | | * 384bit 48bytes sha512 512bit 64bytes |
| | | */ |
| | | public static String generateSalt(int saltLength) { |
| | | StringBuilder salt = new StringBuilder(saltLength); |
| | | for (int i = 0; i < saltLength; i++) { |
| | | salt.append(CHAR_ARRAY[random.nextInt(CHAR_ARRAY.length)]); |
| | | } |
| | | return salt.toString(); |
| | | } |
| | | |
| | | public static String generateSaltForSha256() { |
| | | return generateSalt(32); |
| | | } |
| | | |
| | | public static String generateSaltForSha512() { |
| | | return generateSalt(64); |
| | | } |
| | | |
| | | public static boolean slowEquals(byte[] a, byte[] b) { |
| | | if (a == null || b == null) { |
| | | return false; |
| | | } |
| | | |
| | | int diff = a.length ^ b.length; |
| | | for (int i = 0; i < a.length && i < b.length; i++) { |
| | | diff |= a[i] ^ b[i]; |
| | | } |
| | | return diff == 0; |
| | | } |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.auth; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | |
| | | /** |
| | | * 定义统一返回对象 |
| | | */ |
| | | @ApiModel(value = "统一返回结果集") |
| | | public class ResultUtil<T> { |
| | | |
| | | public static final Integer SUCCESS = 200; |
| | | |
| | | public static final Integer PARAM_ERROR = 300; |
| | | |
| | | public static final Integer RUNTIME_ERROR = 400; |
| | | |
| | | public static final Integer ERROR = 500; |
| | | |
| | | public static final Integer TOKEN_ERROR = 600; |
| | | |
| | | public static final Integer SIGN_ERROR = 700; |
| | | |
| | | public static final String Token = "TOKEN_INVALID"; |
| | | |
| | | public static final String SIGN = "SIGN_INVALID"; |
| | | |
| | | @ApiModelProperty(name = "code", value = "业务状态码 200:成功,300:参数错误,400:运行异常,500:其他异常, 600:token无效,需重新登录,700:签名无效") |
| | | private Integer code;//备用状态码 |
| | | |
| | | @ApiModelProperty(name = "msg", value = "返回结果说明") |
| | | private String msg;//返回说明 |
| | | |
| | | @ApiModelProperty(name = "data", value = "返回结果值") |
| | | private T data;//返回数据 |
| | | |
| | | |
| | | |
| | | public String getMsg() { |
| | | return msg; |
| | | } |
| | | |
| | | public T getData() { |
| | | return data; |
| | | } |
| | | |
| | | |
| | | public Integer getCode() { |
| | | return code; |
| | | } |
| | | |
| | | |
| | | |
| | | private ResultUtil(Integer code, String msg, T data) { |
| | | this.code = code; |
| | | this.msg = msg; |
| | | this.data = data; |
| | | } |
| | | |
| | | |
| | | public static ResultUtil getResult(Integer code, String msg){ |
| | | return new ResultUtil<>(code, msg, new Object()); |
| | | } |
| | | |
| | | public static <T> ResultUtil<T> getResult(Integer code, String msg, T data){ |
| | | return new ResultUtil<>(code, msg, data); |
| | | } |
| | | |
| | | /** |
| | | * 错误信息 |
| | | * @return |
| | | */ |
| | | public static ResultUtil error(String mag){ |
| | | return ResultUtil.getResult(ResultUtil.ERROR, mag, new Object()); |
| | | } |
| | | |
| | | /** |
| | | * 错误信息 |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil <T> error(String mag, T obj){ |
| | | return ResultUtil.getResult(ResultUtil.ERROR, mag, obj); |
| | | } |
| | | |
| | | /** |
| | | * token失效 |
| | | * @return |
| | | */ |
| | | public static ResultUtil tokenErr(){ |
| | | return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, ResultUtil.Token, new Object()); |
| | | } |
| | | |
| | | /** |
| | | * token失效 |
| | | * @return |
| | | */ |
| | | public static ResultUtil tokenErr(String msg){ |
| | | return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, msg, new Object()); |
| | | } |
| | | |
| | | /** |
| | | * 参数异常 |
| | | * @return |
| | | */ |
| | | public static ResultUtil paranErr(){ |
| | | return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "PARAM_ERROR", new Object()); |
| | | } |
| | | |
| | | /** |
| | | * 参数异常 |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> paranErr(T data){ |
| | | return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "SYSTEM_RUN_ERROR", data); |
| | | } |
| | | |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static ResultUtil runErr(){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", new Object()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static <T>ResultUtil<T> runErr(T data){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", data); |
| | | } |
| | | |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static <T>ResultUtil<T> runErr(T data, String msg){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, msg, data); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param |
| | | * @return |
| | | */ |
| | | public static ResultUtil success(){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new Object()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param data |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> success(T data){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", data); |
| | | } |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param msg |
| | | * @param data |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> success(String msg, T data){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, msg, data); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 签名无效 |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> sign(){ |
| | | return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.auth; |
| | | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLEncoder; |
| | | |
| | | public class UrlEncoderUtils { |
| | | |
| | | private static final String PATH_DELIMITER = "/"; |
| | | private static final Logger log = LoggerFactory.getLogger(UrlEncoderUtils.class); |
| | | |
| | | public static String encode(String originUrl) { |
| | | try { |
| | | return URLEncoder.encode(originUrl, "UTF-8").replace("+", "%20").replace("*", "%2A") |
| | | .replace("%7E", "~"); |
| | | } catch (UnsupportedEncodingException e) { |
| | | log.error("URLEncoder error, encode utf8, exception: {}", e); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | // encode路径, 不包括分隔符 |
| | | public static String encodeEscapeDelimiter(String urlPath) { |
| | | StringBuilder pathBuilder = new StringBuilder(); |
| | | String[] pathSegmentsArr = urlPath.split(PATH_DELIMITER); |
| | | |
| | | boolean isFirstSegMent = true; |
| | | for (String pathSegment : pathSegmentsArr) { |
| | | if (isFirstSegMent) { |
| | | pathBuilder.append(encode(pathSegment)); |
| | | isFirstSegMent = false; |
| | | } else { |
| | | pathBuilder.append(PATH_DELIMITER).append(encode(pathSegment)); |
| | | } |
| | | } |
| | | if (urlPath.endsWith(PATH_DELIMITER)) { |
| | | pathBuilder.append(PATH_DELIMITER); |
| | | } |
| | | return pathBuilder.toString(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.config; |
| | | |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.context.annotation.PropertySource; |
| | | import redis.clients.jedis.JedisPool; |
| | | import redis.clients.jedis.JedisPoolConfig; |
| | | |
| | | @Configuration |
| | | @PropertySource("classpath:redis.properties") |
| | | public class RedisConfig { |
| | | @Value("${spring.redis.host}") |
| | | private String host; |
| | | |
| | | @Value("${spring.redis.port}") |
| | | private int port; |
| | | |
| | | @Value("${spring.redis.timeout}") |
| | | private int timeout; |
| | | |
| | | @Value("${spring.redis.jedis.pool.max-idle}") |
| | | private int maxIdle; |
| | | |
| | | @Value("${spring.redis.jedis.pool.min-idle}") |
| | | private int minIdle; |
| | | |
| | | @Value("${spring.redis.jedis.pool.max-wait}") |
| | | private long maxWaitMillis; |
| | | |
| | | @Value("${spring.redis.jedis.pool.max-active}") |
| | | private int maxTotal; |
| | | |
| | | @Value("${spring.redis.password}") |
| | | private String password; |
| | | |
| | | @Value("${spring.redis.block-when-exhausted}") |
| | | private boolean blockWhenExhausted; |
| | | |
| | | @Bean |
| | | public JedisPool redisPoolFactory() throws Exception{ |
| | | JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); |
| | | jedisPoolConfig.setMaxIdle(maxIdle); |
| | | jedisPoolConfig.setMinIdle(minIdle); |
| | | jedisPoolConfig.setMaxTotal(maxTotal); |
| | | jedisPoolConfig.setMaxWaitMillis(maxWaitMillis); |
| | | // 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true |
| | | //When the connection is exhausted, if it is set to false, it will throw an exception. If set to true, it will block until timeout. By default, it is set to true. |
| | | jedisPoolConfig.setBlockWhenExhausted(blockWhenExhausted); |
| | | // 是否启用pool的jmx管理功能, 默认true |
| | | //Enable JMX management for pool, default is set to true. |
| | | jedisPoolConfig.setJmxEnabled(true); |
| | | JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password); |
| | | return jedisPool; |
| | | } |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.config; |
| | | |
| | | import cn.mb.cloud.common.gateway.config.SwaggerProvider; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.http.ResponseEntity; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import springfox.documentation.swagger.web.*; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * swagger聚合接口,swagger-ui.html需要访问的接口 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/swagger-resources") |
| | | public class SwaggerResourceController { |
| | | private SwaggerProvider swaggerProvider; |
| | | |
| | | @Autowired |
| | | public SwaggerResourceController(SwaggerProvider swaggerProvider) { |
| | | this.swaggerProvider = swaggerProvider; |
| | | } |
| | | |
| | | @RequestMapping(value = "/configuration/security") |
| | | public ResponseEntity<SecurityConfiguration> securityConfiguration() { |
| | | return new ResponseEntity<>(SecurityConfigurationBuilder.builder().build(), HttpStatus.OK); |
| | | } |
| | | |
| | | @RequestMapping(value = "/configuration/ui") |
| | | public ResponseEntity<UiConfiguration> uiConfiguration() { |
| | | return new ResponseEntity<>(UiConfigurationBuilder.builder().build(), HttpStatus.OK); |
| | | } |
| | | |
| | | @RequestMapping |
| | | public ResponseEntity<List<SwaggerResource>> swaggerResources() { |
| | | return new ResponseEntity<>(swaggerProvider.get(), HttpStatus.OK); |
| | | } |
| | | } |
New file |
| | |
| | | /* |
| | | * Copyright 2018-2020 by jason. All Rights Reserved. |
| | | * |
| | | * Permission to use, copy, modify, and distribute this software and its |
| | | * documentation for any purpose and without fee is hereby granted, |
| | | * provided that the above copyright notice appear in all copies and that |
| | | * both that copyright notice and this permission notice appear in |
| | | * supporting documentation, and that the name of Vinay Sajip |
| | | * not be used in advertising or publicity pertaining to distribution |
| | | * of the software without specific, written prior permission. |
| | | * VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING |
| | | * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL |
| | | * VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR |
| | | * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER |
| | | * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT |
| | | * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| | | * |
| | | */ |
| | | |
| | | package cn.mb.cloud.gateway.filter; |
| | | |
| | | import cn.mb.cloud.common.gateway.common.PermissionResult; |
| | | import cn.mb.cloud.common.gateway.config.FilterIgnorePropertiesConfig; |
| | | import cn.mb.cloud.gateway.auth.AuthService; |
| | | import cn.mb.cloud.gateway.auth.ResultUtil; |
| | | import cn.mb.cloud.gateway.handler.AppTypeContextHolder; |
| | | import cn.mb.cloud.gateway.util.RedisUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.cloud.gateway.filter.GatewayFilterChain; |
| | | import org.springframework.cloud.gateway.filter.GlobalFilter; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.core.Ordered; |
| | | import org.springframework.core.io.buffer.DataBuffer; |
| | | import org.springframework.data.redis.connection.RedisConnectionFactory; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.server.reactive.ServerHttpRequest; |
| | | import org.springframework.http.server.reactive.ServerHttpResponse; |
| | | import org.springframework.security.oauth2.common.OAuth2AccessToken; |
| | | import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.AntPathMatcher; |
| | | import org.springframework.web.server.ServerWebExchange; |
| | | import reactor.core.publisher.Mono; |
| | | |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * @author: jason |
| | | * @Date: 2019-05-20 15:50 |
| | | * @Description: |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class PermissionsFilter implements GlobalFilter, Ordered { |
| | | |
| | | @Autowired |
| | | private RedisUtil redisUtil; |
| | | |
| | | @Autowired |
| | | private FilterIgnorePropertiesConfig filterIgnorePropertiesConfig; |
| | | |
| | | @Autowired |
| | | AuthService authService; |
| | | |
| | | @Value("${cn.mbcloud.gateway.permissions.basic}") |
| | | private Boolean isBasic = Boolean.FALSE; |
| | | |
| | | |
| | | private AntPathMatcher pathMatcher = new AntPathMatcher(); |
| | | |
| | | /** |
| | | * Redis Token 仓库前缀 |
| | | */ |
| | | private String REDIS_TOKEN_STORE_PREFIX = "oauth2_"; |
| | | |
| | | /** |
| | | * 账户 |
| | | */ |
| | | @Value("${ignore.account.prefix}") |
| | | private String IGNORE_ACCOUNT_PREFIX; |
| | | /** |
| | | * 账户 |
| | | */ |
| | | @Value("${ignore.account.uris}") |
| | | private String IGNORE_ACCOUNT_URIS; |
| | | /** |
| | | * 福利 |
| | | */ |
| | | @Value("${ignore.activity.prefix}") |
| | | private String IGNORE_ACTIVITY_PREFIX; |
| | | /** |
| | | * 福利 |
| | | */ |
| | | @Value("${ignore.activity.uris}") |
| | | private String IGNORE_ACTIVITY_URIS; |
| | | /** |
| | | * 赛事 |
| | | */ |
| | | @Value("${ignore.competition.prefix}") |
| | | private String IGNORE_COMPETITION_PREFIX; |
| | | /** |
| | | * 赛事 |
| | | */ |
| | | @Value("${ignore.competition.uris}") |
| | | private String IGNORE_COMPETITION_URIS; |
| | | /** |
| | | * 课程 |
| | | */ |
| | | @Value(("${ignore.course.prefix}")) |
| | | private String IGNORE_COURSE_PREFIX; |
| | | /** |
| | | * 课程 |
| | | */ |
| | | @Value(("${ignore.course.uris}")) |
| | | private String IGNORE_COURSE_URIS; |
| | | /** |
| | | * 其他 |
| | | */ |
| | | @Value(("${ignore.other.prefix}")) |
| | | private String IGNORE_OTHER_PREFIX; |
| | | /** |
| | | * 其他 |
| | | */ |
| | | @Value(("${ignore.other.uris}")) |
| | | private String IGNORE_OTHER_URIS; |
| | | /** |
| | | * 管理后台 |
| | | */ |
| | | @Value(("${ignore.management.prefix}")) |
| | | private String IGNORE_MANAGEMENT_PREFIX; |
| | | /** |
| | | * 管理后台 |
| | | */ |
| | | @Value(("${ignore.management.uris}")) |
| | | private String IGNORE_MANAGEMENT_URIS; |
| | | |
| | | |
| | | |
| | | |
| | | @Override |
| | | public int getOrder() { |
| | | return -1; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { |
| | | ServerHttpRequest request = exchange.getRequest(); |
| | | ServerHttpResponse response = exchange.getResponse(); |
| | | String appType = request.getHeaders().getFirst(AppTypeContextHolder.APP_TYPE); |
| | | AppTypeContextHolder.setDeviceType(appType); |
| | | PermissionResult permissionResult = hasPermission(exchange, request); |
| | | AppTypeContextHolder.clear(); |
| | | |
| | | //token无效 invaild token |
| | | if (permissionResult == PermissionResult.TOKEN_INVALID) { |
| | | response.setRawStatusCode(200); |
| | | byte[] bits = JSON.toJSONBytes(ResultUtil.tokenErr()); |
| | | DataBuffer buffer = response.bufferFactory().wrap(bits); |
| | | HttpHeaders headers = response.getHeaders(); |
| | | String first = headers.getFirst("Content-Type"); |
| | | if(StringUtils.isEmpty(first)){ |
| | | headers.add("Content-Type", "application/json;charset=UTF-8"); |
| | | } |
| | | return response.writeWith(Mono.just(buffer)); |
| | | } |
| | | |
| | | if (permissionResult != PermissionResult.PASS) { |
| | | response.setRawStatusCode(permissionResult.getValue()); |
| | | byte[] bits = JSON.toJSONBytes(permissionResult.getName()); |
| | | DataBuffer buffer = response.bufferFactory().wrap(bits); |
| | | HttpHeaders headers = response.getHeaders(); |
| | | String first = headers.getFirst("Content-Type"); |
| | | if(StringUtils.isEmpty(first)){ |
| | | headers.add("Content-Type", "application/json;charset=UTF-8"); |
| | | } |
| | | return response.writeWith(Mono.just(buffer)); |
| | | } |
| | | |
| | | //校验参数签名 Verify parameter signature |
| | | ResultUtil resultUtil = preHandle(request); |
| | | if(resultUtil.getCode() != 200){ |
| | | log.info("签名异常"); |
| | | response.setRawStatusCode(resultUtil.getCode()); |
| | | byte[] bits = JSON.toJSONBytes(resultUtil); |
| | | DataBuffer buffer = response.bufferFactory().wrap(bits); |
| | | HttpHeaders headers = response.getHeaders(); |
| | | String first = headers.getFirst("Content-Type"); |
| | | if(StringUtils.isEmpty(first)){ |
| | | headers.add("Content-Type", "application/json;charset=UTF-8"); |
| | | } |
| | | |
| | | return response.writeWith(Mono.just(buffer)); |
| | | } |
| | | |
| | | return chain.filter(exchange.mutate().request(request.mutate().build()).build()); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | public ResultUtil preHandle(ServerHttpRequest req) { |
| | | String uri = req.getURI().getRawPath(); |
| | | if(uri.contains("v2/api-docs")){ |
| | | return ResultUtil.success(); |
| | | } |
| | | if(uri.contains("/oauth")){ |
| | | return ResultUtil.success(); |
| | | } |
| | | if(uri.contains("/base")){ |
| | | return ResultUtil.success(); |
| | | } |
| | | String appid = "BT7NPhA0f775uzcUuftWjCE1TYZlWmHZ"; |
| | | Map<String, Object> queryParams = QueryParamsUtil.getQueryParams(req); |
| | | String sign = (String)queryParams.get("sign"); |
| | | if(org.springframework.util.StringUtils.isEmpty(sign)){ |
| | | return ResultUtil.sign(); |
| | | } |
| | | return authService.checkSyncAuth(appid, uri, sign, queryParams); |
| | | } |
| | | |
| | | |
| | | public PermissionResult hasPermission(ServerWebExchange exchange, ServerHttpRequest request) { |
| | | String uri = request.getURI().getRawPath(); |
| | | if(uri.contains("v2/api-docs")){ |
| | | return PermissionResult.PASS; |
| | | } |
| | | |
| | | String token = getAccessToken(request); |
| | | //账户 |
| | | if (uri.startsWith(IGNORE_ACCOUNT_PREFIX)) { |
| | | if(!StringUtils.isEmpty(IGNORE_ACCOUNT_URIS)){ |
| | | String[] split = IGNORE_ACCOUNT_URIS.split(","); |
| | | for (String s : split) { |
| | | if (uri.contains(s)) { |
| | | return PermissionResult.PASS; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | //福利 |
| | | if (uri.startsWith(IGNORE_ACTIVITY_PREFIX)) { |
| | | if(!StringUtils.isEmpty(IGNORE_ACTIVITY_URIS)){ |
| | | String[] split = IGNORE_ACTIVITY_URIS.split(","); |
| | | for (String s : split) { |
| | | if (uri.contains(s)) { |
| | | return PermissionResult.PASS; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | //赛事 |
| | | if (uri.startsWith(IGNORE_COMPETITION_PREFIX)) { |
| | | if(!StringUtils.isEmpty(IGNORE_COMPETITION_URIS)){ |
| | | String[] split = IGNORE_COMPETITION_URIS.split(","); |
| | | for (String s : split) { |
| | | if (uri.contains(s)) { |
| | | return PermissionResult.PASS; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | //课程 |
| | | if (uri.startsWith(IGNORE_COURSE_URIS)) { |
| | | if(!StringUtils.isEmpty(IGNORE_COURSE_URIS)){ |
| | | String[] split = IGNORE_COURSE_URIS.split(","); |
| | | for (String s : split) { |
| | | if (uri.contains(s)) { |
| | | return PermissionResult.PASS; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | //其他 |
| | | if (uri.startsWith(IGNORE_OTHER_PREFIX)) { |
| | | if(!StringUtils.isEmpty(IGNORE_OTHER_URIS)){ |
| | | String[] split = IGNORE_OTHER_URIS.split(","); |
| | | for (String s : split) { |
| | | if (uri.contains(s)) { |
| | | return PermissionResult.PASS; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | // ----------------------------------------------------------------- 放行综合后台授权登录-UPMS |
| | | if (uri.startsWith(IGNORE_MANAGEMENT_PREFIX)) { |
| | | if(!StringUtils.isEmpty(IGNORE_MANAGEMENT_URIS)){ |
| | | String[] split = IGNORE_MANAGEMENT_URIS.split(","); |
| | | for (String s : split) { |
| | | if (uri.contains(s)) { |
| | | return PermissionResult.PASS; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | String value = redisUtil.getValue(token.substring(token.length() - 32)); |
| | | if(StringUtils.isEmpty(value)){ |
| | | log.warn("Redis Token Store未找到对应的令牌,accessToken:" + token); |
| | | return PermissionResult.TOKEN_INVALID; |
| | | } |
| | | return PermissionResult.PASS; |
| | | |
| | | // String accessToken = getAccessToken(request); |
| | | // if (StringUtils.isEmpty(accessToken)) { |
| | | // log.warn("访问令牌为空,accessToken:" + accessToken); |
| | | // return PermissionResult.TOKEN_INVALID; |
| | | // } |
| | | // |
| | | // boolean hasAuth = LoginHelper.userExist(accessToken); |
| | | // if (!hasAuth) { |
| | | // log.warn("Redis Token Store未找到对应的令牌,accessToken:" + accessToken); |
| | | // return PermissionResult.TOKEN_INVALID; |
| | | // } else { |
| | | // if (!LoginHelper.isExpired(LoginHelper.getUser(accessToken))) { |
| | | // log.warn("访问令牌已过期,accessToken:" + accessToken); |
| | | // return PermissionResult.TOKEN_EXPIRED; |
| | | // } |
| | | // LoginHelper.update(LoginHelper.getUser(accessToken), 86400000L); |
| | | // return PermissionResult.PASS; |
| | | // } |
| | | } |
| | | |
| | | // 判断是否是忽略列表中的 |
| | | //Check if it is in the ignore list. |
| | | if (!filterIgnorePropertiesConfig.getPermissionUrls().isEmpty()) { |
| | | Optional<String> optional = filterIgnorePropertiesConfig.getPermissionUrls().stream().filter(url -> pathMatcher.match(url, uri)).findFirst(); |
| | | if (optional.isPresent()) { |
| | | return PermissionResult.PASS; |
| | | } |
| | | } |
| | | |
| | | if (StringUtils.isEmpty(token)) { |
| | | log.warn("访问令牌为空,accessToken:" + token); |
| | | return PermissionResult.TOKEN_INVALID; |
| | | } |
| | | |
| | | // OAuth2AccessToken oAuth2AccessToken = redisTokenStore.readAccessToken(token); |
| | | // if (oAuth2AccessToken == null) { |
| | | // log.warn("Redis Token Store未找到对应的令牌,accessToken:" + token); |
| | | // return PermissionResult.TOKEN_INVALID; |
| | | // } |
| | | // if (oAuth2AccessToken.isExpired()) { |
| | | // log.warn("访问令牌已过期,accessToken:" + token); |
| | | // return PermissionResult.TOKEN_EXPIRED; |
| | | // } |
| | | // Long userId = (Long) oAuth2AccessToken.getAdditionalInformation().get("user_id"); |
| | | // String username = (String) oAuth2AccessToken.getAdditionalInformation().get("username"); |
| | | // //用户令牌有效则进行用户信息的注入到头信息中 |
| | | // request.mutate().header("userId", userId.toString()).header("username", username); |
| | | // //是否开启简单认证模式如果开启则不验证URL权限只验证是否拥有token的合法性 |
| | | // if (isBasic) { |
| | | // return PermissionResult.PASS; |
| | | // } |
| | | // HashSet<String> permissions = (HashSet<String>) redisTemplate.opsForValue().get(SecurityConstants.CACHE_USER_PERMISSIONS_KEY + "urls:" + userId); |
| | | // if (permissions == null || permissions.isEmpty()) { |
| | | // log.warn("用户URL权限为空,urlSet:" + JSON.toJSONString(permissions)); |
| | | // return PermissionResult.FORBIDDEN; |
| | | // } |
| | | // Optional<String> optional = permissions.stream().filter(url -> pathMatcher.match(url, uri)).findFirst(); |
| | | |
| | | |
| | | String value = redisUtil.getValue(token.substring(token.length() - 32)); |
| | | if(StringUtils.isEmpty(value)){ |
| | | log.warn("Redis Token Store未找到对应的令牌,accessToken:" + token); |
| | | return PermissionResult.TOKEN_INVALID; |
| | | } |
| | | |
| | | return PermissionResult.PASS; |
| | | } |
| | | |
| | | /** |
| | | * 获取请求中token |
| | | * |
| | | * @param request |
| | | * @return token |
| | | */ |
| | | private String getAccessToken(ServerHttpRequest request) { |
| | | String headerValue = request.getHeaders().getFirst("Authorization"); |
| | | if (StringUtils.isEmpty(headerValue)) { |
| | | return null; |
| | | } |
| | | final String bearerType = OAuth2AccessToken.BEARER_TYPE.toLowerCase(); |
| | | if (headerValue.toLowerCase().startsWith(bearerType)) { |
| | | String substring = headerValue.substring(bearerType.length()); |
| | | return substring.trim(); |
| | | } else { |
| | | return headerValue; |
| | | } |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.filter; |
| | | |
| | | |
| | | import cn.mb.cloud.gateway.model.HeaderParams; |
| | | import org.springframework.core.io.buffer.DataBuffer; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.HttpMethod; |
| | | import org.springframework.http.server.reactive.ServerHttpRequest; |
| | | import org.springframework.util.MultiValueMap; |
| | | import reactor.core.publisher.Flux; |
| | | |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLDecoder; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | public class QueryParamsUtil { |
| | | |
| | | |
| | | /** |
| | | * 获取请求参数 |
| | | * @param request |
| | | * @return |
| | | */ |
| | | public static Map<String, Object> getQueryParams(ServerHttpRequest request) { |
| | | HttpMethod method = request.getMethod(); |
| | | Map<String, Object> map = new HashMap<>(); |
| | | if("POST".equals(method.name())){ |
| | | MultiValueMap<String, String> queryParams = request.getQueryParams(); |
| | | Set<String> keySet = queryParams.keySet(); |
| | | for (String s : keySet) { |
| | | try { |
| | | map.put(s, URLDecoder.decode(queryParams.getFirst(s), "UTF-8")); |
| | | } catch (UnsupportedEncodingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | Flux<DataBuffer> body = request.getBody(); |
| | | body.subscribe(dataBuffer -> { |
| | | byte[] bytes = new byte[dataBuffer.readableByteCount()]; |
| | | dataBuffer.read(bytes); |
| | | String bodyStr = new String(bytes, StandardCharsets.UTF_8); |
| | | String[] param = bodyStr.split("&"); |
| | | for (String s : param) { |
| | | String[] split = s.split("="); |
| | | try { |
| | | map.put(split[0], split.length == 1 ? "" : URLDecoder.decode(split[1], "UTF-8")); |
| | | } catch (UnsupportedEncodingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | }); |
| | | }else{ |
| | | MultiValueMap<String, String> queryParams = request.getQueryParams(); |
| | | Set<String> keySet = queryParams.keySet(); |
| | | for (String s : keySet) { |
| | | try { |
| | | map.put(s, URLDecoder.decode(queryParams.getFirst(s), "UTF-8")); |
| | | } catch (UnsupportedEncodingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取原始Header |
| | | * @param request |
| | | * @return |
| | | */ |
| | | public static Map<String, Object> getOriginalHeaderParams(ServerHttpRequest request) { |
| | | HttpHeaders headers = request.getHeaders(); |
| | | Map<String, Object> map = new HashMap<>(); |
| | | Set<String> keySet = headers.keySet(); |
| | | for (String s : keySet) { |
| | | map.put(s, headers.getFirst(s)); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 获取请求header |
| | | * @param request |
| | | * @return |
| | | */ |
| | | public static HeaderParams getHeaderParams(ServerHttpRequest request) { |
| | | String authorization = request.getHeaders().getFirst("Authorization"); |
| | | String role = request.getHeaders().getFirst("role"); |
| | | String from = request.getHeaders().getFirst("from"); |
| | | String version = request.getHeaders().getFirst("version"); |
| | | String deviceid = request.getHeaders().getFirst("deviceid"); |
| | | String nonce = request.getHeaders().getFirst("nonce"); |
| | | String timestamp = request.getHeaders().getFirst("timestamp"); |
| | | HeaderParams headerParams = new HeaderParams(); |
| | | headerParams.setAuthorization(authorization); |
| | | headerParams.setRole(role); |
| | | headerParams.setFrom(from); |
| | | headerParams.setVersion(version); |
| | | headerParams.setDeviceid(deviceid); |
| | | headerParams.setNonce(nonce); |
| | | headerParams.setTimestamp(timestamp); |
| | | return headerParams; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.filter; |
| | | |
| | | import cn.mb.cloud.gateway.model.HeaderParams; |
| | | import com.alibaba.fastjson.JSON; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.cloud.gateway.filter.GatewayFilterChain; |
| | | import org.springframework.cloud.gateway.filter.GlobalFilter; |
| | | import org.springframework.core.Ordered; |
| | | import org.springframework.http.server.reactive.ServerHttpRequest; |
| | | import org.springframework.http.server.reactive.ServerHttpResponse; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.server.ServerWebExchange; |
| | | import reactor.core.publisher.Mono; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 日志拦截器 |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class RequestParamFilter implements GlobalFilter, Ordered { |
| | | |
| | | @Override |
| | | public int getOrder() { |
| | | return -1; |
| | | } |
| | | |
| | | @Override |
| | | public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { |
| | | ServerHttpRequest request = exchange.getRequest(); |
| | | String uri = request.getURI().getRawPath(); |
| | | Map<String, Object> queryParams = QueryParamsUtil.getQueryParams(request); |
| | | Map<String, Object> headerParams = QueryParamsUtil.getOriginalHeaderParams(request); |
| | | log.info("请求操作 -> " + uri + " || 请求参数 -> " + JSON.toJSONString(queryParams) + " || Header信息 -> " + JSON.toJSONString(headerParams)); |
| | | return chain.filter(exchange); |
| | | } |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.filter; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.reactivestreams.Publisher; |
| | | import org.springframework.cloud.gateway.filter.GatewayFilterChain; |
| | | import org.springframework.cloud.gateway.filter.GlobalFilter; |
| | | import org.springframework.core.Ordered; |
| | | import org.springframework.core.io.buffer.DataBuffer; |
| | | import org.springframework.core.io.buffer.DataBufferFactory; |
| | | import org.springframework.core.io.buffer.DataBufferUtils; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.http.server.reactive.ServerHttpRequest; |
| | | import org.springframework.http.server.reactive.ServerHttpResponse; |
| | | import org.springframework.http.server.reactive.ServerHttpResponseDecorator; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.server.ServerWebExchange; |
| | | import reactor.core.publisher.Flux; |
| | | import reactor.core.publisher.Mono; |
| | | |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 日志拦截器 |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class ResponseParamFilter implements GlobalFilter, Ordered { |
| | | |
| | | @Override |
| | | public int getOrder() { |
| | | return -1; |
| | | } |
| | | |
| | | @Override |
| | | public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { |
| | | try { |
| | | ServerHttpRequest request = exchange.getRequest(); |
| | | String uri = request.getURI().getRawPath(); |
| | | ServerHttpResponse originalResponse = exchange.getResponse(); |
| | | DataBufferFactory bufferFactory = originalResponse.bufferFactory(); |
| | | HttpStatus statusCode = originalResponse.getStatusCode(); |
| | | if(statusCode == HttpStatus.OK){ |
| | | ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) { |
| | | @Override |
| | | public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) { |
| | | if (body instanceof Flux) { |
| | | Flux<? extends DataBuffer> fluxBody = Flux.from(body); |
| | | return super.writeWith(fluxBody.map(dataBuffer -> { |
| | | byte[] content = new byte[dataBuffer.readableByteCount()]; |
| | | dataBuffer.read(content); |
| | | DataBufferUtils.release(dataBuffer);//释放掉内存 Release memory |
| | | // 构建日志 build Journal |
| | | StringBuffer sb = new StringBuffer(); |
| | | sb.append(" 响应操作 -> " + uri + " || 响应参数-> {} \n"); |
| | | |
| | | List<Object> rspArgs = new ArrayList<>(); |
| | | rspArgs.add(originalResponse.getStatusCode()); |
| | | String data = new String(content, StandardCharsets.UTF_8);//data |
| | | sb.append(data); |
| | | log.info(sb.toString(), rspArgs.toArray()); |
| | | return bufferFactory.wrap(content); |
| | | })); |
| | | } else { |
| | | log.error("响应操作 -> " + uri + " || 响应参数-> {} \n", getStatusCode()); |
| | | } |
| | | return super.writeWith(body); |
| | | } |
| | | }; |
| | | return chain.filter(exchange.mutate().response(decoratedResponse).build()); |
| | | } |
| | | return chain.filter(exchange);//降级处理返回数据 Downgrade processing returns data |
| | | }catch (Exception e){ |
| | | log.error("gateway log exception.\n" + e); |
| | | return chain.filter(exchange); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.filter; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.cloud.gateway.filter.GatewayFilterChain; |
| | | import org.springframework.cloud.gateway.filter.GlobalFilter; |
| | | import org.springframework.core.Ordered; |
| | | import org.springframework.core.io.buffer.*; |
| | | import org.springframework.http.HttpMethod; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.http.server.reactive.ServerHttpRequest; |
| | | import org.springframework.http.server.reactive.ServerHttpRequestDecorator; |
| | | import org.springframework.http.server.reactive.ServerHttpResponse; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.server.ServerWebExchange; |
| | | import reactor.core.publisher.Flux; |
| | | import reactor.core.publisher.Mono; |
| | | |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.Set; |
| | | |
| | | |
| | | @Slf4j |
| | | @Component |
| | | public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered { |
| | | |
| | | @Override |
| | | public int getOrder() { |
| | | return Ordered.HIGHEST_PRECEDENCE; |
| | | } |
| | | |
| | | @Override |
| | | public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { |
| | | ServerHttpRequest req = exchange.getRequest(); |
| | | ServerHttpResponse res = exchange.getResponse(); |
| | | String method = req.getMethodValue(); |
| | | MediaType ct = req.getHeaders().getContentType(); |
| | | if (HttpMethod.POST.matches(method)) { |
| | | return DataBufferUtils.join(req.getBody()).flatMap(dataBuffer -> { |
| | | byte[] bytes = new byte[dataBuffer.readableByteCount()]; |
| | | dataBuffer.read(bytes); |
| | | // String bodyStr = new String(bytes, StandardCharsets.UTF_8); |
| | | // exchange.getAttributes().put("POST_BODY", bodyStr); |
| | | DataBufferUtils.release(dataBuffer); |
| | | Flux<DataBuffer> cachedFlux = Flux.defer(() -> { |
| | | DataBuffer buffer = res.bufferFactory().wrap(bytes); |
| | | return Mono.just(buffer); |
| | | }); |
| | | ServerHttpRequest mutateReq = new ServerHttpRequestDecorator(req) { |
| | | @Override |
| | | public Flux<DataBuffer> getBody() { |
| | | return cachedFlux; |
| | | } |
| | | }; |
| | | return chain.filter(exchange.mutate().request(mutateReq).build()); |
| | | }); |
| | | } |
| | | return chain.filter(exchange); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.handler; |
| | | |
| | | import com.alibaba.ttl.TransmittableThreadLocal; |
| | | |
| | | public class AppTypeContextHolder { |
| | | |
| | | private final static ThreadLocal<String> DEVEICE_LOCAL = new TransmittableThreadLocal<>(); |
| | | |
| | | public final static String APP_TYPE="AppType"; |
| | | |
| | | /** |
| | | * 上下文中获取当 |
| | | * @param tenantId |
| | | */ |
| | | public static void setDeviceType(String tenantId) { |
| | | DEVEICE_LOCAL.set(tenantId); |
| | | } |
| | | |
| | | |
| | | public static String getDeviceType() { |
| | | return DEVEICE_LOCAL.get(); |
| | | } |
| | | |
| | | public static void clear() { |
| | | DEVEICE_LOCAL.remove(); |
| | | } |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.model; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class HeaderParams { |
| | | /** |
| | | * token |
| | | */ |
| | | private String authorization; |
| | | /** |
| | | * 权限 |
| | | */ |
| | | private String role; |
| | | /** |
| | | * 请求对象 |
| | | */ |
| | | private String from; |
| | | /** |
| | | * 当前版本号 |
| | | */ |
| | | private String version; |
| | | /** |
| | | * 设备id |
| | | */ |
| | | private String deviceid; |
| | | /** |
| | | * 随机字符串 |
| | | */ |
| | | private String nonce; |
| | | /** |
| | | * 时间戳 |
| | | */ |
| | | private String timestamp; |
| | | } |
New file |
| | |
| | | package cn.mb.cloud.gateway.util; |
| | | |
| | | import com.alibaba.csp.sentinel.util.StringUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import redis.clients.jedis.Jedis; |
| | | import redis.clients.jedis.JedisPool; |
| | | import redis.clients.jedis.Pipeline; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | |
| | | /** |
| | | * Redis工具类 |
| | | */ |
| | | @Component |
| | | public class RedisUtil { |
| | | |
| | | @Autowired |
| | | private JedisPool jedisPool; |
| | | |
| | | |
| | | /** |
| | | * 向redis中存储字符串没有过期时间 |
| | | * @param key |
| | | * @param value |
| | | */ |
| | | public void setStrValue(String key, String value){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String set = resource.set(key, value); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 以分钟为单位设置存储值(设置过期时间) |
| | | * @param key |
| | | * @param value |
| | | * @param time 秒 |
| | | */ |
| | | public void setStrValue(String key, String value, int time){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String setex = resource.setex(key, time, value); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 从redis中获取值 |
| | | * @param key |
| | | * @return |
| | | */ |
| | | public String getValue(String key){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String data = resource.get(key); |
| | | closeJedis(resource); |
| | | return data; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 批量获取 |
| | | * @param kes |
| | | * @return |
| | | */ |
| | | public List<Object> getValues(List<String> kes){ |
| | | if(null != kes){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | Pipeline pipelined = resource.pipelined(); |
| | | for(String key : kes){ |
| | | pipelined.get(key); |
| | | } |
| | | List<Object> list = pipelined.syncAndReturnAll(); |
| | | |
| | | closeJedis(resource); |
| | | pipelined.clear(); |
| | | try { |
| | | pipelined.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | List<Object> data = new ArrayList<>(); |
| | | for(Object o : list){ |
| | | if(null != o){ |
| | | data.add(o); |
| | | } |
| | | } |
| | | return data; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除key |
| | | * @param key |
| | | */ |
| | | public void remove(String key){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | Long del = resource.del(key); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除资源 |
| | | * @param jedis |
| | | */ |
| | | public void closeJedis(Jedis jedis){ |
| | | if(null != jedis){ |
| | | jedis.close(); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | spring.profiles.active=@profiles.active@ |
| | | spring.application.name=@artifactId@ |
| | | spring.cloud.nacos.username=@profiles.nacos-username@ |
| | | spring.cloud.nacos.password=@profiles.nacos-password@ |
| | | spring.cloud.nacos.config.server-addr=@profiles.nacos-addr@ |
| | | spring.cloud.nacos.config.namespace=@profiles.nacos-namespace@ |
| | | spring.cloud.nacos.config.group=@profiles.group@ |
| | | spring.cloud.nacos.config.file-extension=properties |
| | | spring.cloud.nacos.config.extension-configs[0].data-id=${spring.application.name}.${spring.cloud.nacos.config.file-extension} |
| | | spring.cloud.nacos.config.extension-configs[0].group=@profiles.group@ |
| | | spring.cloud.nacos.config.extension-configs[0].refresh=true |
| | | spring.cloud.nacos.config.extension-configs[1].data-id=@profiles.global.config@.${spring.cloud.nacos.config.file-extension} |
| | | spring.cloud.nacos.config.extension-configs[1].group=@profiles.group@ |
| | | spring.cloud.nacos.config.extension-configs[1].refresh=true |
| | | spring.cloud.nacos.discovery.server-addr=@profiles.nacos-addr@ |
| | | spring.cloud.nacos.discovery.namespace=@profiles.nacos-namespace@ |
| | | spring.cloud.nacos.discovery.register-enabled=true |
| | | spring.cloud.nacos.discovery.group=@profiles.group@ |
| | | spring.main.allow-bean-definition-overriding=true |
| | | |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果设置为WARN,则低于WARN的信息都不会输出 --> |
| | | <!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true --> |
| | | <!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --> |
| | | <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --> |
| | | <configuration scan="true" scanPeriod="10 seconds"> |
| | | <contextName>logback</contextName> |
| | | |
| | | <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 --> |
| | | <property name="log.path" value="/usr/local/server/logs"/> |
| | | |
| | | <!--0. 日志格式和颜色渲染 --> |
| | | <!-- 彩色日志依赖的渲染类 --> |
| | | <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> |
| | | <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> |
| | | <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> |
| | | <!-- 彩色日志格式 --> |
| | | <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> |
| | | |
| | | <!--1. 输出到控制台--> |
| | | <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> |
| | | <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--> |
| | | <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> |
| | | <level>debug</level> |
| | | </filter> |
| | | <encoder> |
| | | <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> |
| | | <!-- 设置字符集 --> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <!--2. 输出到文档--> |
| | | <!-- 2.1 level为 DEBUG 日志,时间滚动输出 --> |
| | | <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <!-- 正在记录的日志文档的路径及文档名 --> |
| | | <file>${log.path}/${artifactId}/debug.log</file> |
| | | <!--日志文档输出格式 Output format of the log document.--> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | <charset>UTF-8</charset> <!-- 设置字符集 --> |
| | | </encoder> |
| | | <!-- 日志记录器的滚动策略,按日期,按大小记录 Rolling strategy of the logger, recording by date or by size.--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <!-- 日志归档 --> |
| | | <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> |
| | | <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> |
| | | <maxFileSize>100MB</maxFileSize> |
| | | </timeBasedFileNamingAndTriggeringPolicy> |
| | | <!--日志文档保留天数--> |
| | | <maxHistory>15</maxHistory> |
| | | </rollingPolicy> |
| | | <!-- 此日志文档只记录debug级别的 --> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>debug</level> |
| | | <onMatch>ACCEPT</onMatch> |
| | | <onMismatch>DENY</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | |
| | | <!-- 2.2 level为 INFO 日志,时间滚动输出 --> |
| | | <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <!-- 正在记录的日志文档的路径及文档名 --> |
| | | <file>${log.path}/${artifactId}/info.log</file> |
| | | <!--日志文档输出格式 Output format of the log document.--> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | <!-- 日志记录器的滚动策略,按日期,按大小记录 Rolling strategy of the logger, recording by date or by size.--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <!-- 每天日志归档路径以及格式 --> |
| | | <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> |
| | | <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> |
| | | <maxFileSize>100MB</maxFileSize> |
| | | </timeBasedFileNamingAndTriggeringPolicy> |
| | | <!--日志文档保留天数--> |
| | | <maxHistory>15</maxHistory> |
| | | </rollingPolicy> |
| | | <!-- 此日志文档只记录info级别的 --> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>info</level> |
| | | <onMatch>ACCEPT</onMatch> |
| | | <onMismatch>DENY</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | |
| | | <!-- 2.3 level为 WARN 日志,时间滚动输出 --> |
| | | <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <!-- 正在记录的日志文档的路径及文档名 --> |
| | | <file>${log.path}/${artifactId}/warn.log</file> |
| | | <!--日志文档输出格式 Output format of the log document.--> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | <charset>UTF-8</charset> <!-- 此处设置字符集 --> |
| | | </encoder> |
| | | <!-- 日志记录器的滚动策略,按日期,按大小记录 Rolling strategy of the logger, recording by date or by size.--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> |
| | | <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> |
| | | <maxFileSize>100MB</maxFileSize> |
| | | </timeBasedFileNamingAndTriggeringPolicy> |
| | | <!--日志文档保留天数--> |
| | | <maxHistory>15</maxHistory> |
| | | </rollingPolicy> |
| | | <!-- 此日志文档只记录warn级别的 --> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>warn</level> |
| | | <onMatch>ACCEPT</onMatch> |
| | | <onMismatch>DENY</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | |
| | | <!-- 2.4 level为 ERROR 日志,时间滚动输出 --> |
| | | <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <!-- 正在记录的日志文档的路径及文档名 --> |
| | | <file>${log.path}/${artifactId}/error.log</file> |
| | | <!--日志文档输出格式 Output format of the log document.--> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | <charset>UTF-8</charset> <!-- 此处设置字符集 --> |
| | | </encoder> |
| | | <!-- 日志记录器的滚动策略,按日期,按大小记录 Rolling strategy of the logger, recording by date or by size.--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> |
| | | <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> |
| | | <maxFileSize>100MB</maxFileSize> |
| | | </timeBasedFileNamingAndTriggeringPolicy> |
| | | <!--日志文档保留天数--> |
| | | <maxHistory>15</maxHistory> |
| | | </rollingPolicy> |
| | | <!-- 此日志文档只记录ERROR级别的 --> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>ERROR</level> |
| | | <onMatch>ACCEPT</onMatch> |
| | | <onMismatch>DENY</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | |
| | | <!-- 2.5 所有 除了DEBUG级别的其它高于DEBUG的 日志,记录到一个文件 --> |
| | | <appender name="ALL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <!-- 正在记录的日志文档的路径及文档名 --> |
| | | <file>${log.path}/${artifactId}/all.log</file> |
| | | <!--日志文档输出格式 Output format of the log document.--> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | <charset>UTF-8</charset> <!-- 此处设置字符集 --> |
| | | </encoder> |
| | | <!-- 日志记录器的滚动策略,按日期,按大小记录 Rolling strategy of the logger, recording by date or by size.--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/all-%d{yyyy-MM-dd}.%i.log</fileNamePattern> |
| | | <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> |
| | | <maxFileSize>100MB</maxFileSize> |
| | | </timeBasedFileNamingAndTriggeringPolicy> |
| | | <!--日志文档保留天数--> |
| | | <maxHistory>15</maxHistory> |
| | | </rollingPolicy> |
| | | <!-- 此日志文档记录除了DEBUG级别的其它高于DEBUG的 --> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>DEBUG</level> |
| | | <onMatch>DENY</onMatch> |
| | | <onMismatch>ACCEPT</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | |
| | | <!-- |
| | | <logger>用来设置某一个包或者具体的某一个类的日志打印级别、 |
| | | 以及指定<appender>。<logger>仅有一个name属性, |
| | | 一个可选的level和一个可选的addtivity属性。 |
| | | name:用来指定受此logger约束的某一个包或者具体的某一个类。 |
| | | level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, |
| | | 还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。 |
| | | 如果未设置此属性,那么当前logger将会继承上级的级别。 |
| | | addtivity:是否向上级logger传递打印信息。默认是true。 |
| | | <logger name="org.springframework.web" level="info"/> |
| | | <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/> |
| | | --> |
| | | |
| | | <!-- |
| | | root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 |
| | | level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, |
| | | 不能设置为INHERITED或者同义词NULL。默认是DEBUG |
| | | 可以包含零个或多个元素,标识这个appender将会添加到这个logger。 |
| | | --> |
| | | |
| | | <!-- 4 最终的策略: |
| | | 基本策略(root级) + 根据profile在启动时, logger标签中定制化package日志级别(优先级高于上面的root级)--> |
| | | <springProfile name="dev"> |
| | | <root level="info"> |
| | | <appender-ref ref="CONSOLE" /> |
| | | <appender-ref ref="DEBUG_FILE" /> |
| | | <appender-ref ref="INFO_FILE" /> |
| | | <appender-ref ref="WARN_FILE" /> |
| | | <appender-ref ref="ERROR_FILE" /> |
| | | <appender-ref ref="ALL_FILE" /> |
| | | </root> |
| | | <logger name="com.dsh" level="debug"/> |
| | | <logger name="business-log" level="warn"/> |
| | | </springProfile> |
| | | |
| | | <springProfile name="fat"> |
| | | <root level="info"> |
| | | <appender-ref ref="CONSOLE" /> |
| | | <appender-ref ref="DEBUG_FILE" /> |
| | | <appender-ref ref="INFO_FILE" /> |
| | | <appender-ref ref="WARN_FILE" /> |
| | | <appender-ref ref="ERROR_FILE" /> |
| | | <appender-ref ref="ALL_FILE" /> |
| | | </root> |
| | | <logger name="com.dsh.course.mapper" level="error"/> |
| | | <logger name="business-log" level="warn"/> |
| | | </springProfile> |
| | | |
| | | <springProfile name="prod"> |
| | | <root level="warn"> |
| | | <!-- 生产环境最好不配置console写文件 --> |
| | | <appender-ref ref="DEBUG_FILE" /> |
| | | <appender-ref ref="INFO_FILE" /> |
| | | <appender-ref ref="WARN_FILE" /> |
| | | <appender-ref ref="ERROR_FILE" /> |
| | | <appender-ref ref="ALL_FILE" /> |
| | | </root> |
| | | <logger name="com.dsh.course.mapper" level="error"/> |
| | | <logger name="business-log" level="warn"/> |
| | | </springProfile> |
| | | |
| | | </configuration> |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | |
| | | <!-- |
| | | This is the JRebel configuration file. It maps the running application to your IDE workspace, enabling JRebel reloading for this project. |
| | | Refer to https://manuals.jrebel.com/jrebel/standalone/config.html for more information. |
| | | --> |
| | | <application generated-by="intellij" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://update.zeroturnaround.com/jrebel/rebel-2_1.xsd"> |
| | | |
| | | <classpath> |
| | | <dir name="/Users/dengyao/Documents/workSpace/java/MBCLOUD/Cloud/mb-cloud-parent/mb-cloud-services/mb-cloud-gateway/target/classes"> |
| | | </dir> |
| | | </classpath> |
| | | |
| | | </application> |
New file |
| | |
| | | spring.redis.database=0 |
| | | # Redis·þÎñÆ÷µØÖ· |
| | | spring.redis.host=@redis.addr@ |
| | | # Redis·þÎñÆ÷Á¬½Ó¶Ë¿Ú |
| | | spring.redis.port=@redis.port@ |
| | | # Redis·þÎñÆ÷Á¬½ÓÃÜÂ루ĬÈÏΪ¿Õ£© |
| | | spring.redis.password=@redis.password@ |
| | | spring.redis.jedis.pool.max-active=1024 |
| | | spring.redis.jedis.pool.max-wait=10000 |
| | | spring.redis.jedis.pool.max-idle=200 |
| | | spring.redis.jedis.pool.min-idle=50 |
| | | spring.redis.timeout=10000 |
| | | spring.redis.block-when-exhausted=true |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8" ?> |
| | | <assembly> |
| | | <id>dist</id> |
| | | <formats> |
| | | <format>tar.gz</format> |
| | | </formats> |
| | | <fileSets> |
| | | <fileSet> |
| | | <directory>src/main/resources/script</directory> |
| | | <outputDirectory>/</outputDirectory> |
| | | <includes> |
| | | <include>start_bash.sh</include> |
| | | </includes> |
| | | <fileMode>0777</fileMode> |
| | | <lineEnding>unix</lineEnding> |
| | | </fileSet> |
| | | <fileSet> |
| | | <directory>${project.build.directory}/</directory> |
| | | <includes> |
| | | <include>*.jar</include> |
| | | </includes> |
| | | <outputDirectory>/</outputDirectory> |
| | | </fileSet> |
| | | </fileSets> |
| | | </assembly> |
New file |
| | |
| | | #!/bin/bash |
| | | APP_NAME=mb-cloud-gateway.jar |
| | | |
| | | |
| | | usage() { |
| | | echo "Usage: sh ?D???.sh [start|stop|restart|status]" |
| | | exit 1 |
| | | } |
| | | |
| | | |
| | | is_exist(){ |
| | | pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' ` |
| | | if [ -z "${pid}" ]; then |
| | | return 1 |
| | | else |
| | | return 0 |
| | | fi |
| | | } |
| | | |
| | | start(){ |
| | | is_exist |
| | | if [ $? -eq "0" ]; then |
| | | echo "${APP_NAME} is already running. pid=${pid} ." |
| | | else |
| | | JAVA_CMD="nohup java -Xms128m -Xmn256m -Xmx512m -server -jar $APP_NAME >/dev/null 2>&1 &" |
| | | eval $JAVA_CMD |
| | | fi |
| | | } |
| | | |
| | | debug(){ |
| | | is_exist |
| | | if [ $? -eq "0" ]; then |
| | | echo "${APP_NAME} is already running. pid=${pid} ." |
| | | else |
| | | JAVA_CMD="java -Xms128m -Xmn256m -Xmx512m -server -jar $APP_NAME " |
| | | eval $JAVA_CMD |
| | | fi |
| | | } |
| | | |
| | | |
| | | |
| | | stop(){ |
| | | is_exist |
| | | if [ $? -eq "0" ]; then |
| | | kill -9 $pid |
| | | else |
| | | echo "${APP_NAME} is not running" |
| | | fi |
| | | } |
| | | |
| | | |
| | | status(){ |
| | | is_exist |
| | | if [ $? -eq "0" ]; then |
| | | echo "${APP_NAME} is running. Pid is ${pid}" |
| | | else |
| | | echo "${APP_NAME} is NOT running." |
| | | fi |
| | | } |
| | | |
| | | |
| | | restart(){ |
| | | stop |
| | | start |
| | | } |
| | | |
| | | |
| | | case "$1" in |
| | | "start") |
| | | start |
| | | ;; |
| | | "debug") |
| | | debug |
| | | ;; |
| | | "stop") |
| | | stop |
| | | ;; |
| | | "status") |
| | | status |
| | | ;; |
| | | "restart") |
| | | restart |
| | | ;; |
| | | *) |
| | | usage |
| | | ;; |
| | | esac |
| | | |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <parent> |
| | | <groupId>cn.mb.cloud</groupId> |
| | | <artifactId>mb-cloud-parent</artifactId> |
| | | <version>1.1.3</version> |
| | | <relativePath>../cloud-server-parent/pom.xml</relativePath> |
| | | </parent> |
| | | <artifactId>mb-cloud-other</artifactId> |
| | | <packaging>jar</packaging> |
| | | <version>${parent.version}</version> |
| | | <name>其他</name> |
| | | <description>其他</description> |
| | | <dependencies> |
| | | <!--日志处理--> |
| | | <dependency> |
| | | <groupId>cn.mb.cloud</groupId> |
| | | <artifactId>mb-cloud-common-log</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>cn.mb.cloud</groupId> |
| | | <artifactId>mb-cloud-common-data</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>cn.mb.cloud</groupId> |
| | | <artifactId>mb-cloud-common-api</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>cn.mb.cloud</groupId> |
| | | <artifactId>mb-cloud-common-sentinel</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.flywaydb</groupId> |
| | | <artifactId>flyway-core</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>redis.clients</groupId> |
| | | <artifactId>jedis</artifactId> |
| | | <version>2.9.0</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.jdom</groupId> |
| | | <artifactId>jdom</artifactId> |
| | | <version>1.1.3</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>commons-beanutils</groupId> |
| | | <artifactId>commons-beanutils</artifactId> |
| | | <version>1.9.2</version> |
| | | </dependency> |
| | | <dependency> <!--swagger2--> |
| | | <groupId>io.springfox</groupId> |
| | | <artifactId>springfox-swagger2</artifactId> |
| | | <version>2.9.2</version> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>io.swagge</groupId> |
| | | <artifactId>swagger-annotations</artifactId> |
| | | </exclusion> |
| | | <exclusion> |
| | | <groupId>io.swagge</groupId> |
| | | <artifactId>swagger-models</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>io.swagger</groupId> |
| | | <artifactId>swagger-annotations</artifactId> |
| | | <version>1.5.22</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>io.swagger</groupId> |
| | | <artifactId>swagger-models</artifactId> |
| | | <version>1.5.22</version> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | <build> |
| | | <plugins> |
| | | <plugin> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-maven-plugin</artifactId> |
| | | <executions> |
| | | <execution> |
| | | <goals> |
| | | <goal>repackage</goal> |
| | | </goals> |
| | | </execution> |
| | | </executions> |
| | | </plugin> |
| | | |
| | | <plugin> |
| | | <groupId>com.spotify</groupId> |
| | | <artifactId>docker-maven-plugin</artifactId> |
| | | </plugin> |
| | | </plugins> |
| | | </build> |
| | | <repositories> |
| | | <repository> |
| | | <id>magic-beans-releases</id> |
| | | <url>http://maven.magic-beans.cn/nexus/content/repositories/releases/</url> |
| | | </repository> |
| | | <repository> |
| | | <id>aliyun</id> |
| | | <name>aliyun</name> |
| | | <url>https://maven.aliyun.com/repository/public</url> |
| | | </repository> |
| | | <repository> |
| | | <id>magic-beans-thirdparty</id> |
| | | <url>http://maven.magic-beans.cn/nexus/content/repositories/thirdparty/</url> |
| | | </repository> |
| | | |
| | | </repositories> |
| | | </project> |
New file |
| | |
| | | |
| | | |
| | | package com.dsh; |
| | | |
| | | |
| | | import cn.mb.cloud.common.core.annotation.MBCloudApplication; |
| | | import cn.mb.cloud.common.data.web.WebConfig; |
| | | import org.mybatis.spring.annotation.MapperScan; |
| | | import org.springframework.boot.SpringApplication; |
| | | import org.springframework.cloud.openfeign.EnableFeignClients; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Import; |
| | | import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; |
| | | import springfox.documentation.swagger2.annotations.EnableSwagger2; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import java.util.TimeZone; |
| | | |
| | | /** |
| | | * @author jason |
| | | */ |
| | | @EnableSwagger2 |
| | | @EnableFeignClients |
| | | @MBCloudApplication |
| | | @Import({WebConfig.class}) |
| | | @MapperScan("com.dsh.other.mapper") |
| | | public class OtherApplication { |
| | | public static void main(String[] args) { |
| | | SpringApplication.run(OtherApplication.class, args); |
| | | } |
| | | |
| | | @Bean |
| | | public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { |
| | | PropertySourcesPlaceholderConfigurer c = new PropertySourcesPlaceholderConfigurer(); |
| | | c.setIgnoreUnresolvablePlaceholders(true); |
| | | return c; |
| | | } |
| | | |
| | | @PostConstruct |
| | | void started() { |
| | | TimeZone.setDefault(TimeZone.getTimeZone("GMT+8")); |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.config; |
| | | |
| | | import com.fasterxml.jackson.core.JsonGenerator; |
| | | import com.fasterxml.jackson.databind.JsonSerializer; |
| | | import com.fasterxml.jackson.databind.SerializerProvider; |
| | | |
| | | import java.io.IOException; |
| | | |
| | | /** |
| | | * @author 张鹏 |
| | | * @date 2020/9/2 11:12 |
| | | * |
| | | * 重新封装实体时,ID 丢失精度,在重写的 ID 上添加注解 @JsonSerialize(using = JsonLongSerializer.class) |
| | | */ |
| | | public class JsonLongSerializer extends JsonSerializer<Long> { |
| | | @Override |
| | | public void serialize(Long aLong, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { |
| | | jsonGenerator.writeString(Long.toString(aLong)); |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.config; |
| | | |
| | | import org.springframework.boot.autoconfigure.context.MessageSourceProperties; |
| | | import org.springframework.context.MessageSource; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.context.support.ResourceBundleMessageSource; |
| | | import org.springframework.util.StringUtils; |
| | | import org.springframework.web.servlet.LocaleResolver; |
| | | |
| | | import java.time.Duration; |
| | | |
| | | |
| | | /** |
| | | * 国际化配置 |
| | | */ |
| | | @Configuration |
| | | public class MessageLocalConfig { |
| | | |
| | | @Bean |
| | | public MessageSource messageSource(MessageSourceProperties properties) { |
| | | ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); |
| | | if (StringUtils.hasText(properties.getBasename())) { |
| | | messageSource.setBasenames(StringUtils |
| | | .commaDelimitedListToStringArray(StringUtils.trimAllWhitespace(properties.getBasename()))); |
| | | } |
| | | if (properties.getEncoding() != null) { |
| | | messageSource.setDefaultEncoding(properties.getEncoding().name()); |
| | | } |
| | | messageSource.setFallbackToSystemLocale(properties.isFallbackToSystemLocale()); |
| | | Duration cacheDuration = properties.getCacheDuration(); |
| | | if (cacheDuration != null) { |
| | | messageSource.setCacheMillis(cacheDuration.toMillis()); |
| | | } |
| | | messageSource.setAlwaysUseMessageFormat(properties.isAlwaysUseMessageFormat()); |
| | | messageSource.setUseCodeAsDefaultMessage(properties.isUseCodeAsDefaultMessage()); |
| | | return messageSource; |
| | | } |
| | | |
| | | |
| | | @Bean//注册国际化组件 |
| | | public LocaleResolver localeResolver(){ |
| | | return new MyLocaleResolver(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.config; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import org.springframework.util.StringUtils; |
| | | import org.springframework.web.servlet.LocaleResolver; |
| | | |
| | | import javax.servlet.ServletInputStream; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.BufferedReader; |
| | | import java.io.InputStreamReader; |
| | | import java.util.Locale; |
| | | |
| | | public class MyLocaleResolver implements LocaleResolver { |
| | | |
| | | @Override |
| | | public Locale resolveLocale(HttpServletRequest request) { |
| | | //1=中文,2=英文,3=印尼文 |
| | | String language = getQueryParams(request, "language"); |
| | | |
| | | Locale locale = null; |
| | | if (StringUtils.isEmpty(language)) { |
| | | locale = Locale.getDefault(); |
| | | } |
| | | //如果请求不为空 |
| | | if (language.equals("1")) { |
| | | locale = new Locale("zh", "CN"); |
| | | } else if (language.equals("2")) { |
| | | locale = new Locale("en", "US"); |
| | | } else { |
| | | locale = new Locale("in", "ID"); |
| | | } |
| | | return locale; |
| | | } |
| | | |
| | | @Override |
| | | public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) { |
| | | } |
| | | |
| | | |
| | | public String getQueryParams(HttpServletRequest request, String key) { |
| | | try { |
| | | String method = request.getMethod(); |
| | | if("POST".equals(method)){ |
| | | String parameter = request.getParameter(key); |
| | | if(!StringUtils.isEmpty(parameter)){ |
| | | return parameter; |
| | | } |
| | | Object attribute = request.getAttribute(key); |
| | | if(null != attribute){ |
| | | return attribute.toString(); |
| | | } |
| | | StringBuffer sb = new StringBuffer(); |
| | | ServletInputStream inputStream = request.getInputStream(); |
| | | BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); |
| | | String s; |
| | | while ((s = bufferedReader.readLine()) != null){ |
| | | sb.append(s); |
| | | } |
| | | bufferedReader.close(); |
| | | inputStream.close(); |
| | | JSONObject jsonObject = JSON.parseObject(sb.toString()); |
| | | return jsonObject.getString(key); |
| | | }else{ |
| | | String parameter = request.getParameter(key); |
| | | if(!StringUtils.isEmpty(parameter)){ |
| | | return parameter; |
| | | } |
| | | Object attribute = request.getAttribute(key); |
| | | if(null != attribute){ |
| | | return attribute.toString(); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.config; |
| | | |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.context.annotation.PropertySource; |
| | | import redis.clients.jedis.JedisPool; |
| | | import redis.clients.jedis.JedisPoolConfig; |
| | | |
| | | @Configuration |
| | | @PropertySource("classpath:redis.properties") |
| | | public class RedisConfig { |
| | | @Value("${spring.redis.host}") |
| | | private String host; |
| | | |
| | | @Value("${spring.redis.port}") |
| | | private int port; |
| | | |
| | | @Value("${spring.redis.timeout}") |
| | | private int timeout; |
| | | |
| | | @Value("${spring.redis.jedis.pool.max-idle}") |
| | | private int maxIdle; |
| | | |
| | | @Value("${spring.redis.jedis.pool.min-idle}") |
| | | private int minIdle; |
| | | |
| | | @Value("${spring.redis.jedis.pool.max-wait}") |
| | | private long maxWaitMillis; |
| | | |
| | | @Value("${spring.redis.jedis.pool.max-active}") |
| | | private int maxTotal; |
| | | |
| | | @Value("${spring.redis.password}") |
| | | private String password; |
| | | |
| | | @Value("${spring.redis.block-when-exhausted}") |
| | | private boolean blockWhenExhausted; |
| | | |
| | | @Bean |
| | | public JedisPool redisPoolFactory() throws Exception{ |
| | | JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); |
| | | jedisPoolConfig.setMaxIdle(maxIdle); |
| | | jedisPoolConfig.setMinIdle(minIdle); |
| | | jedisPoolConfig.setMaxTotal(maxTotal); |
| | | jedisPoolConfig.setMaxWaitMillis(maxWaitMillis); |
| | | // 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true |
| | | //When the connection is exhausted, if it is set to false, it will throw an exception. If set to true, it will block until timeout. By default, it is set to true. |
| | | jedisPoolConfig.setBlockWhenExhausted(blockWhenExhausted); |
| | | // 是否启用pool的jmx管理功能, 默认true |
| | | //Enable JMX management for pool, default is set to true. |
| | | jedisPoolConfig.setJmxEnabled(true); |
| | | JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password); |
| | | return jedisPool; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.config; |
| | | |
| | | |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import springfox.documentation.builders.ApiInfoBuilder; |
| | | import springfox.documentation.builders.ParameterBuilder; |
| | | import springfox.documentation.builders.PathSelectors; |
| | | import springfox.documentation.builders.RequestHandlerSelectors; |
| | | import springfox.documentation.schema.ModelRef; |
| | | import springfox.documentation.service.ApiInfo; |
| | | import springfox.documentation.service.Parameter; |
| | | import springfox.documentation.spi.DocumentationType; |
| | | import springfox.documentation.spring.web.plugins.Docket; |
| | | import springfox.documentation.swagger2.annotations.EnableSwagger2; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * swagger配置类 |
| | | * |
| | | * @author fengshuonan |
| | | * @date 2017年6月1日19:42:59 |
| | | */ |
| | | @Configuration |
| | | @EnableSwagger2 |
| | | @ConditionalOnProperty(prefix = "guns", name = "swagger-open", havingValue = "true") |
| | | public class SwaggerConfig{ |
| | | |
| | | @Bean |
| | | public Docket systemApi() { |
| | | List<Parameter> parameters = new ArrayList<>(); |
| | | // 添加header头 |
| | | ParameterBuilder type = new ParameterBuilder(); |
| | | type.name("Authorization").description("登录token").modelRef(new ModelRef("string")) |
| | | .parameterType("header").required(true).build(); |
| | | parameters.add(type.build()); |
| | | return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.stylefeng.guns.rest.controller.api")) |
| | | .paths(PathSelectors.any()).build().groupName("登录后API调用").globalOperationParameters(parameters).apiInfo(apiInfo("登录后API调用", "文档中可以查询及测试接口调用参数和结果", "1.0.0版本")); |
| | | } |
| | | |
| | | @Bean |
| | | public Docket commonApi() { |
| | | return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.stylefeng.guns.rest.controller.common")) |
| | | .paths(PathSelectors.any()).build().groupName("公共Aip接口") |
| | | .apiInfo(apiInfo("公共Aip接口", "文档中可以查询及测试接口调用参数和结果", "1.0.0版本")); |
| | | } |
| | | |
| | | |
| | | |
| | | private ApiInfo apiInfo(String name, String description, String version) { |
| | | ApiInfo apiInfo = new ApiInfoBuilder().title(name).description(description).version(version).build(); |
| | | return apiInfo; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.other.advice; |
| | | |
| | | import cn.mb.cloud.common.core.constant.enums.ErrorCodeConstants; |
| | | import cn.mb.cloud.common.core.exception.BusinessException; |
| | | import cn.mb.cloud.common.core.util.ResponseData; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | @Slf4j |
| | | @RestControllerAdvice |
| | | public class ControllerException { |
| | | |
| | | @ExceptionHandler(BusinessException.class) |
| | | @ResponseStatus(HttpStatus.OK) |
| | | @ResponseBody |
| | | public ResponseData bussiness(BusinessException e) { |
| | | log.error("业务异常 message= " + e.getMessage() + " code= " + e.getErrorCode(), e); |
| | | return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()). |
| | | msg(e.getMessage()).build(); |
| | | } |
| | | |
| | | @ExceptionHandler(RuntimeException.class) |
| | | @ResponseStatus(HttpStatus.OK) |
| | | @ResponseBody |
| | | public ResponseData runtimeException(RuntimeException e) { |
| | | log.error("运行时异常信息" + e.getMessage(), e); |
| | | return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()).msg(e.getMessage()).build(); |
| | | } |
| | | |
| | | /** |
| | | * 全局异常. |
| | | * |
| | | * @param e the e |
| | | * @return R |
| | | */ |
| | | |
| | | @ExceptionHandler(Exception.class) |
| | | @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) |
| | | @ResponseBody |
| | | public ResponseData exception(Exception e) { |
| | | log.error("全局异常信息" + e.getMessage(), e); |
| | | return ResponseData.fail(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.Instant; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.*; |
| | | |
| | | |
| | | /** |
| | | * 日期时间类型的工具类,提供对日期和时间基于毫秒及以上精度的格式化方法、 |
| | | * 运算方法、比较方法等。注意:大部分对日期对象(java.util.Date)操作的方法, |
| | | * 不会修改原日期对象,而以一个新的日期对象返回。 |
| | | * <p> |
| | | * <p> |
| | | * <p><pre><b> |
| | | * 历史更新记录:</b> |
| | | * 2004-6-17 创建此类型 |
| | | * 2005-9-30 修改方法:parseToDate(),去掉了对年份从(1970-9999)这个范围的限制。抛出异常:IllegalArgumentException(),JThinkRuntimeException() |
| | | * 2005-10-2 修改方法: 其它方法,抛出异常:IllegalArgumentException(),JThinkRuntimeException() |
| | | * 2005-10-2 增加方法: addTime(Date d, double times, int type) |
| | | * 2005-10-2 增加方法: addSystemTime() |
| | | * 2005-10-2 修改方法, 对于所有以日期对象类型java.util.Date为参数的方法,如果日期为null,都抛出异常:IllegalArgumentException() |
| | | * <p> |
| | | * </pre></p> |
| | | */ |
| | | |
| | | public final class DateTimeHelper { |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8:26:30.400 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmssSa_12 = "yyyy-MM-dd KK:mm:ss.S a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8:26:16 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmssa_12 = "yyyy-MM-dd KK:mm:ss a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8:26 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmma_12 = "yyyy-MM-dd KK:mm a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 8 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHa_12 = "yyyy-MM-dd KK a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-07-05 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMdda_12 = "yyyy-MM-dd a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08:26:30.400 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmssS = "yyyy-MM-dd HH:mm:ss.S"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08:26:16 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08:26 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHHmm = "yyyy-MM-dd HH:mm"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-08-03 08 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMddHH = "yyyy-MM-dd HH"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002-07-05 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMMdd = "yyyy-MM-dd"; |
| | | /** |
| | | * 把时间格式化成如:2002-07 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyMM = "yyyy-MM"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:07.19 格式的字符串 |
| | | */ |
| | | public final static String FMT_MMdd = "MM.dd"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:12:08 PM(下午) 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmA_12 = "KK:mm a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:55 AM上午, CST 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmAz_12 = "KK:mm a,z"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:56 AM上午, 中国标准时间 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmAzzzz_12 = "KK:mm a,zzzz"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:12:08:23 am 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssA_12 = "KK:mm:ss a"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:55:33 AM上午, CST 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssAz_12 = "KK:mm:ss a,z"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:0:56:23 AM上午, 中国标准时间 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssAzzzz_12 = "KK:mm:ss a,zzzz"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04:45 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmss = "HH:mm:ss"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04:45.824 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmssS = "HH:mm:ss.S"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmm = "HH:mm"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04,CST 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmz = "HH:mm,z"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:22:04,中国标准时间 格式的字符串 |
| | | */ |
| | | public final static String FMT_HHmmzzzz = "HH:mm,zzzz"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串 |
| | | */ |
| | | public final static String FMT_WWMMDDYY_EN = "EEE,MMM d,''yyyy"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串 |
| | | */ |
| | | public final static String FMT_WWMMDDYY_CN = "EEE,yyyy年MMMd号"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串 |
| | | */ |
| | | public final static String FMT_MMDDYY_EN = "MMM d,''yyyy"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串 |
| | | */ |
| | | public final static String FMT_MMDDYY_CN = "yyyy年MMMd号"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:星期几 格式的字符串,即可获得该日这个时间是星期几 |
| | | */ |
| | | public final static String FMT_WW = "EEE"; |
| | | |
| | | public final static String FMT_ddMMyyyy = "dd-MM-yyyy"; |
| | | |
| | | /** |
| | | * 把时间格式成日期数字,如:20120606 |
| | | */ |
| | | public final static String FMT_yyyyMMdd_noseparator = "yyyyMMdd"; |
| | | |
| | | public final static String FMT_yyyyMMdd_Zh = "yyyy年MM月dd日"; |
| | | |
| | | public final static String FMT_yyyyMMddHH_noseparator = "yyyyMMddHH"; |
| | | |
| | | /** |
| | | * 把时间格式成日期数字,如:20120606121212 |
| | | */ |
| | | public final static String FMT_yyyyMMddhhmmss_noseparator = "yyyyMMddHHmmss"; |
| | | |
| | | /** |
| | | * 把时间格式化成如:2002.07.05 格式的字符串 |
| | | */ |
| | | public final static String FMT_yyyyxMMxdd = "yyyy.MM.dd"; |
| | | /** |
| | | * 常用的格式化时间的格式组,用于本类中格式化字符串成时间型 |
| | | */ |
| | | private final static String[] formatStr = { |
| | | FMT_ddMMyyyy, |
| | | FMT_yyyyMMddHHmmssS, |
| | | FMT_yyyyMMddHHmmss, |
| | | FMT_yyyyMMddHHmm, |
| | | FMT_yyyyMMddHH, |
| | | FMT_yyyyMMdd, |
| | | FMT_HHmmss, |
| | | FMT_HHmmssS, |
| | | FMT_HHmm, |
| | | FMT_HHmmz, |
| | | FMT_HHmmzzzz, |
| | | FMT_yyyyMMddHHmmssSa_12, |
| | | FMT_yyyyMMddHHmmssa_12, |
| | | FMT_yyyyMMddHHmma_12, |
| | | FMT_yyyyMMddHHa_12, |
| | | FMT_yyyyMMdda_12, |
| | | FMT_HHmmA_12, |
| | | FMT_HHmmAz_12, |
| | | FMT_HHmmAzzzz_12, |
| | | FMT_HHmmssA_12, |
| | | FMT_HHmmssAz_12, |
| | | FMT_HHmmssAzzzz_12 |
| | | }; |
| | | |
| | | |
| | | /** |
| | | * 私有化构造器,使得不能产生该类对象,类中所有的方法均为静态方法 |
| | | */ |
| | | private DateTimeHelper() { |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param date |
| | | * @param formatStr |
| | | * @return 如果为null,返回字符串"" |
| | | */ |
| | | public static String formatDateTimetoString(Date date, String formatStr) { |
| | | String reStr = ""; |
| | | if (date == null || formatStr == null || formatStr.trim().length() < 1) { |
| | | return reStr; |
| | | } |
| | | SimpleDateFormat sdf = new SimpleDateFormat(); |
| | | sdf.applyPattern(formatStr); |
| | | reStr = sdf.format(date); |
| | | return reStr; |
| | | } |
| | | |
| | | public static Date getSystemDate(String fmtstr) { |
| | | try { |
| | | return parseToDate(formatDateTimetoString(getSystemDate(), fmtstr)); |
| | | } catch (Exception e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | return getSystemDate(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值和格式串采用给定的国家所在的国家风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param date 日期对象 |
| | | * @param formatStr 日期格式 |
| | | * @return 如果为null,返回字符串"" |
| | | */ |
| | | public static String formatDateTimetoString(Date date, String formatStr, Locale locale) { |
| | | String reStr = ""; |
| | | if (date == null || formatStr == null || locale == null || formatStr.trim().length() < 1) { |
| | | return reStr; |
| | | } |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale); |
| | | reStr = sdf.format(date); |
| | | return reStr; |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值字符串和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param dateStr 日期串 |
| | | * @param formatStr 日期格式 |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateStr, String formatStr) throws Exception { |
| | | String dStr = ""; |
| | | if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0) { |
| | | dStr = formatDateTimetoString(parseToDate(dateStr), formatStr); |
| | | } |
| | | return dStr; |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的Date值字符串和格式串采用指定国家的风格来格式化时间,并返回相应的字符串 |
| | | * |
| | | * @param dateStr 日期串 |
| | | * @param formatStr 日期格式 |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateStr, String formatStr, Locale locale) throws Exception { |
| | | String dStr = ""; |
| | | if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0 && locale != null) { |
| | | dStr = formatDateTimetoString(parseToDate(dateStr, locale), formatStr, locale); |
| | | } |
| | | return dStr; |
| | | } |
| | | |
| | | /** |
| | | * 按指定的格式和操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @param formatStr |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr, String formatStr) throws Exception { |
| | | if (dateTimeStr == null || formatStr == null || dateTimeStr.trim().length() < 1 || formatStr.trim().length() < 1) { |
| | | throw new IllegalArgumentException("参数dateTimeStr、formatStr不能是null或空格串!"); |
| | | } |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | throw new Exception(e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 按指定的格式和指定国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @param formatStr |
| | | * @param locale |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr, String formatStr, Locale locale) throws Exception { |
| | | if (dateTimeStr != null && formatStr != null && locale != null && dateTimeStr.trim().length() > 0 && formatStr.trim().length() > 0) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | throw new Exception(e); |
| | | } |
| | | } else { |
| | | throw new IllegalArgumentException("参数dateTimeStr、formatStr、locale不能是null或空格串!"); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 按操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr) throws Exception { |
| | | if (dateTimeStr == null || dateTimeStr.trim().length() < 1) { |
| | | throw new IllegalArgumentException("参数dateTimeSt不能是null或空格串!"); |
| | | } |
| | | int formatStrLength = formatStr.length; |
| | | int i = 0; |
| | | |
| | | for (i = 0; i < formatStrLength; i++) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i]); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | } |
| | | } |
| | | throw new Exception("日期格式不正确!"); |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的年月和日返回一个日期型的对象 |
| | | * |
| | | * @param year 年 |
| | | * @param month 月 ,1到12 |
| | | * @param day 日 ,1到31 |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(int year, int month, int day) throws Exception { |
| | | if (month < 1 || month > 12 || day < 1 || day > 31) { |
| | | throw new IllegalArgumentException("参数不正确!"); |
| | | } |
| | | String yearStr = String.valueOf(year); |
| | | String monthStr = String.valueOf(month); |
| | | String dayStr = String.valueOf(day); |
| | | |
| | | return parseToDate(yearStr + "-" + monthStr + "-" + dayStr); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 根据给出的年月日、时分秒、返回一个对应的Date型对象 |
| | | * |
| | | * @param year 年 |
| | | * @param month 月 ,1到12 |
| | | * @param day 日 ,1到31 |
| | | * @param h 小时,从0到23 |
| | | * @param m 分,从0到60 |
| | | * @param s 秒,从0到60 |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(int year, int month, int day, int h, int m, int s) throws Exception { |
| | | if (month < 1 || month > 12 || day < 1 || day > 31 || h < 0 || h > 23 || m < 0 || m > 60 || s < 0 || s > 60) { |
| | | throw new IllegalArgumentException("参数不正确!"); |
| | | } |
| | | String yearStr = String.valueOf(year); |
| | | String monthStr = String.valueOf(month); |
| | | String dayStr = String.valueOf(day); |
| | | String hStr = String.valueOf(h); |
| | | String mStr = String.valueOf(m); |
| | | String sStr = String.valueOf(s); |
| | | |
| | | return parseToDate(yearStr + "-" + monthStr + "-" + dayStr + " " + hStr + ":" + mStr + ":" + sStr); |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 按指定国家的风格把给定的日期字符串格式化为一个Date型日期 |
| | | * |
| | | * @param dateTimeStr |
| | | * @return java.util.Date类型对象 |
| | | * @throws Exception |
| | | */ |
| | | public static Date parseToDate(String dateTimeStr, Locale locale) throws Exception { |
| | | if (dateTimeStr == null || dateTimeStr.trim().length() < 1 || locale == null) { |
| | | throw new IllegalArgumentException("参数dateTimeSt、locale不能是null或空格串!"); |
| | | } |
| | | int formatStrLength = formatStr.length; |
| | | int i = 0; |
| | | for (i = 0; i < formatStrLength; i++) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i], locale); |
| | | try { |
| | | return sdf.parse(dateTimeStr); |
| | | } catch (ParseException e) { |
| | | } |
| | | } |
| | | throw new Exception("日期格式不正确!"); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateTimeStr) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDateTimetoString(String dateTimeStr, Locale locale) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按操作系统默认的国家内格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTime |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDateTimetoString(Date dateTime) { |
| | | return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串; |
| | | * |
| | | * @param dateTime |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDateTimetoString(Date dateTime, Locale locale) { |
| | | return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param date |
| | | * @param dateStr 日期串 |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDatetoString(Date date, String dateStr) throws Exception { |
| | | return formatDateTimetoString(dateStr, FMT_yyyyMMdd); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期字符串按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param dateStr 日期串 |
| | | * @param locale Locale |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatDatetoString(String dateStr, Locale locale) throws Exception { |
| | | return formatDateTimetoString(dateStr, FMT_yyyyMMdd, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期按指定操作系统默认国家的风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param d 日期对象 |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDatetoString(Date d) { |
| | | return formatDateTimetoString(d, FMT_yyyyMMdd); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串; |
| | | * |
| | | * @param d 日期对象 |
| | | * @param locale Locale |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatDatetoString(Date d, Locale locale) { |
| | | return formatDateTimetoString(d, FMT_yyyyMMdd, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatTimetoString(String dateTimeStr) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间字符串按指定国家的风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | * @throws Exception |
| | | */ |
| | | public static String formatTimetoString(String dateTimeStr, Locale locale) throws Exception { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按指定操作系统默认国家的风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatTimetoString(Date dateTimeStr) { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的日期时间按指定国家的风格格式化成"HH:mm:ss"格式的时间串; |
| | | * |
| | | * @param dateTimeStr |
| | | * @param locale |
| | | * @return 如果为null,返回"" |
| | | */ |
| | | public static String formatTimetoString(Date dateTimeStr, Locale locale) { |
| | | return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的年份整数 |
| | | * |
| | | * @param d |
| | | * @return 年份 |
| | | */ |
| | | public static int getYearOfDate(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.YEAR); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的月份整数 |
| | | * |
| | | * @param d |
| | | * @return 月份 |
| | | */ |
| | | public static int getMonthOfYear(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.MONTH) + 1; |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的天份整数,是这个月的第几天 |
| | | * |
| | | * @param d |
| | | * @return 天份 |
| | | */ |
| | | public static int getDayOfMonth(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.DAY_OF_MONTH); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的天份整数,是这个年份的第几天 |
| | | * |
| | | * @param d |
| | | * @return 天份 |
| | | */ |
| | | public static int getDayOfYear(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.DAY_OF_YEAR); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的天份整数,是这个周的第几天 |
| | | * |
| | | * @param d |
| | | * @return 天份 |
| | | */ |
| | | public static int getDayOfWeek(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.DAY_OF_WEEK) - 1; |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的周的整数,是这个月的第几周 |
| | | * |
| | | * @param d |
| | | * @return 周 |
| | | */ |
| | | public static int getWeekOfMonth(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.WEEK_OF_MONTH); |
| | | } |
| | | |
| | | /** |
| | | * 返回一个时间的周的整数,是这个年份的第几周 |
| | | * |
| | | * @param d |
| | | * @return 周 |
| | | */ |
| | | public static int getWeekOfYear(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | return calendar.get(Calendar.WEEK_OF_YEAR); |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的在一天中的小时数的整数,如当前(Date now)是下午3点,返回为15 |
| | | * |
| | | * @param d |
| | | * @return 小时 |
| | | */ |
| | | public static int getHoursOfDay(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int hours = calendar.get(Calendar.HOUR_OF_DAY); |
| | | return hours; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的在一天中的小时数的整数(采用12小时制),如当前(Date now)是下午3点,返回为3 |
| | | * |
| | | * @param d |
| | | * @return 小时 |
| | | */ |
| | | public static int getHoursOfDay12(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int hours = calendar.get(Calendar.HOUR); |
| | | return hours; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回该时间所对应的分钟数中的整数,如now是15点14分,则返回14 |
| | | * |
| | | * @param d |
| | | * @return 分钟 |
| | | */ |
| | | public static int getMinutesOfHour(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int minutes = calendar.get(Calendar.MINUTE); |
| | | |
| | | return minutes; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的秒数中的整数,如now是15点14分34秒,则返回34 |
| | | * |
| | | * @param d |
| | | * @return 秒 |
| | | */ |
| | | public static int getSecondsOfMinute(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int seconds = calendar.get(Calendar.SECOND); |
| | | |
| | | return seconds; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间所对应的毫秒数中的整数,如now是15点14分34秒470毫秒,则返回470 |
| | | * |
| | | * @param d |
| | | * @return 毫秒 |
| | | */ |
| | | public static int getMillisecondsOfSecond(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | int millisecond = calendar.get(Calendar.MILLISECOND); |
| | | |
| | | return millisecond; |
| | | } |
| | | |
| | | /** |
| | | * 返回该时间相对于1970年1月1日开始计算的对应的毫秒数 |
| | | * |
| | | * @param d |
| | | * @return 毫秒数 |
| | | */ |
| | | public static long getTime(Date d) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | return d.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 比较两个时间的先后顺序。 |
| | | * 如果时间d1在d2之前,返回1, |
| | | * 如果时间d1在d2之后,返回-1, |
| | | * 如果二者相等,返回0 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 如果时间d1在d2之前,返回1, |
| | | * 如果时间d1在d2之后,返回-1, |
| | | * 如果二者相等,返回0 |
| | | */ |
| | | public static int compareTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | |
| | | long dI1 = d1.getTime(); |
| | | long dI2 = d2.getTime(); |
| | | |
| | | if (dI1 > dI2) { |
| | | return -1; |
| | | } else if (dI1 < dI2) { |
| | | return 1; |
| | | } else { |
| | | return 0; |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 返回两个日期之间的毫秒数的差距 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 二者至1970年1.1后的毫秒数的差值 |
| | | */ |
| | | public static long getMillisecondsOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long dI1 = d1.getTime(); |
| | | long dI2 = d2.getTime(); |
| | | return (dI1 - dI2); |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的秒数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的秒数 |
| | | */ |
| | | public static double getSecondsOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long i = getMillisecondsOfTwoDate(d1, d2); |
| | | |
| | | return (double) i / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的分钟数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的分钟数 |
| | | */ |
| | | public static double getMinutesOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return (double) millions / 60 / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的小时数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的小时数 |
| | | */ |
| | | public static double getHoursOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return (double) millions / 60 / 60 / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的天数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的天数 |
| | | */ |
| | | public static double getDaysOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return (double) millions / 24 / 60 / 60 / 1000; |
| | | } |
| | | |
| | | /** |
| | | * 获得两个日期之间相差的天数 |
| | | * |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return 两日期之间相差的天数 |
| | | */ |
| | | public static Long daysOfTwoDate(Date d1, Date d2) { |
| | | if (d1 == null || d2 == null) { |
| | | throw new IllegalArgumentException("参数d1或d2不能是null对象!"); |
| | | } |
| | | long millions = getMillisecondsOfTwoDate(d1, d2); |
| | | return millions / 24 / 60 / 60 / 1000; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的时间值,可以为负。 |
| | | * |
| | | * @param d 日期对象 |
| | | * @param times 时间值 |
| | | * @param type 类型, |
| | | * Calendar.MILLISECOND,毫秒<BR> |
| | | * Calendar.SECOND,秒<BR> |
| | | * Calendar.MINUTE,分钟<BR> |
| | | * Calendar.HOUR,小时<BR> |
| | | * Calendar.DATE,日<BR> |
| | | * @return 如果d为null,返回null |
| | | */ |
| | | public static Date addTime(Date d, double times, int type) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | long qv = 1; |
| | | switch (type) { |
| | | case Calendar.MILLISECOND: |
| | | qv = 1; |
| | | break; |
| | | case Calendar.SECOND: |
| | | qv = 1000; |
| | | break; |
| | | case Calendar.MINUTE: |
| | | qv = 1000 * 60; |
| | | break; |
| | | case Calendar.HOUR: |
| | | qv = 1000 * 60 * 60; |
| | | break; |
| | | case Calendar.DATE: |
| | | qv = 1000 * 60 * 60 * 24; |
| | | break; |
| | | default: |
| | | throw new RuntimeException("时间类型不正确!type=" + type); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | long milliseconds = (long) Math.round(Math.abs(times) * qv); |
| | | if (times > 0) { |
| | | for (; milliseconds > 0; milliseconds -= 2147483647) { |
| | | if (milliseconds > 2147483647) { |
| | | calendar.add(Calendar.MILLISECOND, 2147483647); |
| | | } else { |
| | | calendar.add(Calendar.MILLISECOND, (int) milliseconds); |
| | | } |
| | | } |
| | | } else { |
| | | for (; milliseconds > 0; milliseconds -= 2147483647) { |
| | | if (milliseconds > 2147483647) { |
| | | calendar.add(Calendar.MILLISECOND, -2147483647); |
| | | } else { |
| | | calendar.add(Calendar.MILLISECOND, -(int) milliseconds); |
| | | } |
| | | } |
| | | } |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的年份,可以为负, 返回新的被加上了年份的日期对象,不影响参数日期对象值 |
| | | * Given a certain time and a specified year, which can be negative, returns a new date object with the added year, without affecting the value of the original date object. |
| | | * @param d |
| | | * @param years |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addYears(Date d, int years) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.YEAR, years); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的月份,可以为负 |
| | | * Adding the specified number of month to the given time is possible, including negative values. |
| | | * @param d |
| | | * @param months |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addMonths(Date d, int months) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.MONTH, months); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的天数,可以为负 |
| | | * Adding the specified number of day to the given time is possible, including negative values. |
| | | * @param d 日期对象 |
| | | * @param days |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addDays(Date d, int days) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.HOUR, days * 24); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的小时,可以为负 |
| | | * Adding the specified number of hour to the given time is possible, including negative values. |
| | | * @param d 日期对象 |
| | | * @param hours |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addHours(Date d, int hours) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.HOUR, hours); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的分钟,可以为负 |
| | | * Adding the specified number of minute to the given time is possible, including negative values. |
| | | * @param d |
| | | * @param minutes |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addMinutes(Date d, int minutes) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.MINUTE, minutes); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的秒数,可以为负 |
| | | * Adding the specified number of seconds to the given time is possible, including negative values. |
| | | * @param d |
| | | * @param seconds |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addSeconds(Date d, int seconds) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.SECOND, seconds); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 把给定的时间加上指定的毫秒数,可以为负 |
| | | * Adding the specified number of milliseconds to the given time can result in a negative value. |
| | | * @param d |
| | | * @param milliseconds |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date addMilliseconds(Date d, int milliseconds) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.add(Calendar.MILLISECOND, milliseconds); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的年份是新的给定的年份 |
| | | * Setting the year of a date object to a new given year. |
| | | * @param d 需要设定的日期对象 |
| | | * @param year 新的年份 |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date setYearOfDate(Date d, int year) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.YEAR, year); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的月份是新的给定的月份 |
| | | * Set the month of a date object to a new given month. |
| | | * @param d 需要设定的日期对象 |
| | | * @param month 新的月份 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setMonthOfDate(Date d, int month) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.MONTH, month); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的天是新的给定的天 |
| | | * Set the day of a date object to a new given day. |
| | | * @param d 需要设定的日期对象 |
| | | * @param day 新的天 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setDayOfDate(Date d, int day) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.DAY_OF_MONTH, day); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的小时是新的给定的小时 |
| | | * Setting the hour of a date object to a new given hour. |
| | | * @param d 需要设定的日期对象 |
| | | * @param hour 新的小时数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setHourOfDate(Date d, int hour) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.HOUR_OF_DAY, hour); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的分钟是新的给定的分钟数 |
| | | * Set the minutes of a date object to a new given minute value. |
| | | * @param d 需要设定的日期对象 |
| | | * @param minute 新的分钟数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setMinuteOfDate(Date d, int minute) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.MINUTE, minute); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的秒数是新的给定的分钟数 |
| | | * Setting the seconds of a date object to the new given minute value. |
| | | * |
| | | * @param d 需要设定的日期对象 |
| | | * @param second 新的秒数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setSecondOfDate(Date d, int second) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.SECOND, second); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 设置一个日期对象的毫秒数是新的给定的分钟数 |
| | | * Setting the milliseconds of a date object to a new given minute value. |
| | | * @param d 需要设定的日期对象 |
| | | * @param millisecond 新的毫秒数 |
| | | * @return 新日期对象 |
| | | */ |
| | | public static Date setMillisecondOfDate(Date d, int millisecond) { |
| | | if (d == null) { |
| | | throw new IllegalArgumentException("参数d不能是null对象!"); |
| | | } |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(d); |
| | | calendar.set(Calendar.MILLISECOND, millisecond); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回指定日期的月份的天数量 |
| | | * Retrieve the number of days in the month of the specified date. |
| | | * @param d 日期对象 |
| | | */ |
| | | public static int getDaysOfMonth(Date d) { |
| | | int year = getYearOfDate(d); |
| | | int month = getMonthOfYear(d); |
| | | return getDaysOfMonth(year, month); |
| | | } |
| | | |
| | | /** |
| | | * 返回指定日期的月份的天数量 |
| | | * Retrieve the number of days in the month of the specified date. |
| | | * @param year 年 |
| | | * @param month 月 |
| | | */ |
| | | public static int getDaysOfMonth(int year, int month) { |
| | | int days = 0; |
| | | if (month == 2) { |
| | | if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { |
| | | days = 29; |
| | | } else { |
| | | days = 28; |
| | | } |
| | | } |
| | | if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) { |
| | | days = 30; |
| | | } |
| | | if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) { |
| | | days = 31; |
| | | } |
| | | return days; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回系统时间,以日期对象形式返回 |
| | | * |
| | | * @return 日期对象 |
| | | */ |
| | | public static Date getSystemDate() { |
| | | return new Date(System.currentTimeMillis()); |
| | | } |
| | | |
| | | /** |
| | | * 返回系统时间,以毫秒形式返回 |
| | | * |
| | | * @return 毫秒数 |
| | | */ |
| | | public static long getSystemTime() { |
| | | return System.currentTimeMillis(); |
| | | } |
| | | |
| | | /** |
| | | * 返回24小时前的时间 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getLastDay(Date date) { |
| | | long day = date.getTime(); |
| | | long lastDay = day - 24 * 60 * 60 * 1000; |
| | | return new Date(lastDay); |
| | | } |
| | | |
| | | /** |
| | | * 返回24小时后的时间 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getTomorrow(Date date) { |
| | | long day = date.getTime(); |
| | | long tomorrow = day + 24 * 60 * 60 * 1000; |
| | | return new Date(tomorrow); |
| | | } |
| | | |
| | | /** |
| | | * 取得30天前的这个时间 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDayLastMonth() { |
| | | long day = new Date().getTime(); |
| | | long dayLastMonth = day - 24 * 60 * 60 * 1000 * 20; |
| | | return new Date(dayLastMonth); |
| | | } |
| | | |
| | | /** |
| | | * 取得30天后的这个时间 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDayNextMonth() { |
| | | long day = new Date().getTime(); |
| | | long dayNextMonth = day + 20 * 24 * 60 * 60 * 1000; |
| | | return new Date(dayNextMonth); |
| | | } |
| | | |
| | | public static int getMonthCount(Date sDate, Date eDate) { |
| | | String sDateStr = DateTimeHelper.formatDateTimetoString(sDate, "MM"); |
| | | String eDateStr = DateTimeHelper.formatDateTimetoString(eDate, "MM"); |
| | | int monthCount = Integer.parseInt(eDateStr) - Integer.parseInt(sDateStr) + 1; |
| | | return monthCount; |
| | | } |
| | | |
| | | /** |
| | | * 取得下个月的这天,比如2月1日可取得3月1日,此方法有很大局限性,不能用于月末的天数 |
| | | * Obtain the same day of the following month, for example, February 1st can obtain March 1st. This method has significant limitations and cannot be used for the last days of the month. |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getDayNextMonth(Date date) { |
| | | String yearStr = DateTimeHelper.formatDateTimetoString(date, "yyyy"); |
| | | String monthStr = DateTimeHelper.formatDateTimetoString(date, "MM"); |
| | | String dayStr = DateTimeHelper.formatDateTimetoString(date, "dd"); |
| | | int year = Integer.parseInt(yearStr); |
| | | int month = Integer.parseInt(monthStr); |
| | | if (month == 12) { |
| | | month = 1; |
| | | year = year + 1; |
| | | yearStr = String.valueOf(year); |
| | | monthStr = String.valueOf(month); |
| | | } |
| | | |
| | | String dateStr = yearStr + "-" + monthStr + "-" + dayStr; |
| | | try { |
| | | date = DateTimeHelper.parseToDate(dateStr); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return date; |
| | | } |
| | | |
| | | /** |
| | | * 获取当月开始时0点0分0秒 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getCurrentMouthStart() { |
| | | Date d = getSystemDate(); |
| | | d = setDayOfDate(d, 1); |
| | | d = setHourOfDate(d, 0); |
| | | d = setMinuteOfDate(d, 0); |
| | | d = setSecondOfDate(d, 0); |
| | | return d; |
| | | } |
| | | |
| | | /** |
| | | * 返回下月的这天 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date getDateNextMonth(Date date) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.add(Calendar.MONTH, +1); |
| | | return cal.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 根据时间获取和当前时间的差距. |
| | | * Obtain the difference between the current time and the time in question. |
| | | * @param date - 待比较实际 |
| | | * @return 时间差距字符串 |
| | | */ |
| | | public static String getPassdTime(Date date) { |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | String ret = null; |
| | | |
| | | // 计算和当前相差秒数 |
| | | // Calculate the difference in seconds from the current time. |
| | | long currentTimeMillis = System.currentTimeMillis(); |
| | | long timeDiff = (currentTimeMillis - date.getTime()); |
| | | |
| | | int seconds = (int) (timeDiff / 1000); |
| | | int minutes = seconds / 60; |
| | | int hours = minutes / 60; |
| | | int days = hours / 24; |
| | | int months = days / 30; |
| | | |
| | | if (days <= 7) { |
| | | if (days != 0) { |
| | | ret = days + "天前"; |
| | | } else if (hours != 0) { |
| | | ret = hours + "小时前"; |
| | | } else if (minutes != 0) { |
| | | ret = minutes + "分钟前"; |
| | | } else { |
| | | ret = "刚刚"; |
| | | } |
| | | } else { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// HH:mm:ss"); |
| | | ret = sdf.format(date); |
| | | } |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前日期后几天的日期 |
| | | * Obtaining the date of the day after several days from the current date. |
| | | * @param day 天数 |
| | | * @return |
| | | */ |
| | | public static Date getCurrentNextDays(int day) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.add(Calendar.DAY_OF_YEAR, day); |
| | | Date date = calendar.getTime(); |
| | | return date; |
| | | } |
| | | |
| | | public static String getCurrentStringDate() { |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | String dateString = simpleDateFormat.format(new Date()); |
| | | return dateString; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前日期是星期几<br> |
| | | * Obtain the day of the week for the current date. |
| | | * @param dt |
| | | * @return 当前日期是星期几 |
| | | */ |
| | | public static String getWeekOfDate(Date dt) { |
| | | String[] weekDays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"}; |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(dt); |
| | | int w = cal.get(Calendar.DAY_OF_WEEK) - 1; |
| | | if (w < 0) { |
| | | w = 0; |
| | | } |
| | | return weekDays[w]; |
| | | } |
| | | |
| | | /** |
| | | * 获取今天时间 2017-11-20 00:00:00 |
| | | */ |
| | | public static Date todayDate() { |
| | | try { |
| | | String date = formatDatetoString(new Date()); |
| | | String todayString = date + " 00:00:00"; |
| | | return parseToDate(todayString, FMT_yyyyMMdd); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return new Date(); |
| | | } |
| | | |
| | | /** |
| | | * 获取指定日期的 时间 2017-11-20 00:00:00 |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Date createDate(Date date) { |
| | | try { |
| | | String dates = formatDatetoString(date); |
| | | String todayString = dates + " 00:00:00"; |
| | | return parseToDate(todayString, FMT_yyyyMMdd); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return new Date(); |
| | | } |
| | | |
| | | |
| | | public static String createDateTime(Date date) { |
| | | try { |
| | | String dates = formatDatetoString(date); |
| | | String time = DateTimeHelper.formatDateTimetoString(new Date(), FMT_HHmmss); |
| | | String todayString = dates + " " + time; |
| | | return todayString; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static String getTimeHint(Date time) { |
| | | String hint = ""; |
| | | double minutes = DateTimeHelper.getMinutesOfTwoDate(new Date(), time); |
| | | double hours = DateTimeHelper.getHoursOfTwoDate(new Date(), time); |
| | | double days = DateTimeHelper.getDaysOfTwoDate(new Date(), time); |
| | | if (minutes < 1) { |
| | | hint = "刚刚"; |
| | | } else if (hours < 1) { |
| | | hint = new Double(minutes).intValue() + "分钟前"; |
| | | } else if (days < 1) { |
| | | hint = new Double(hours).intValue() + "小时前"; |
| | | } else if (days < 7) { |
| | | hint = new Double(days).intValue() + "天前"; |
| | | } else { |
| | | hint = DateTimeHelper.formatDateTimetoString(time, DateTimeHelper.FMT_yyyyMMdd); |
| | | } |
| | | return hint; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据时间获取和当前时间的差距. |
| | | * Obtain the difference between the current time and the time in question. |
| | | * @param date - 待比较实际 |
| | | * @return 时间差距字符串 |
| | | */ |
| | | public static String getLoginTime(Date date) { |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | String ret = null; |
| | | |
| | | // 计算和当前相差秒数 |
| | | //Calculate the difference in seconds from the current time. |
| | | long currentTimeMillis = System.currentTimeMillis(); |
| | | long timeDiff = (currentTimeMillis - date.getTime()); |
| | | |
| | | int seconds = (int) (timeDiff / 1000); |
| | | int minutes = seconds / 60; |
| | | int hours = minutes / 60; |
| | | int days = hours / 24; |
| | | int months = days / 30; |
| | | |
| | | if (months != 0) { |
| | | ret = "1个月前"; |
| | | } else if (days != 0) { |
| | | ret = days + "天前"; |
| | | } else if (hours != 0) { |
| | | ret = hours + "小时前"; |
| | | } else if (minutes != 0) { |
| | | ret = minutes + "分钟前"; |
| | | } else { |
| | | ret = "刚刚"; |
| | | } |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | |
| | | public static Date getWXTime() { |
| | | |
| | | Calendar calendar = Calendar.getInstance(Locale.CHINA); |
| | | Date date = calendar.getTime(); |
| | | |
| | | return date; |
| | | } |
| | | |
| | | /** |
| | | * 是否是同一天 |
| | | * it the same day |
| | | * @param first |
| | | * @param second |
| | | * @return |
| | | */ |
| | | public static Boolean isSameDay(Date first, Date second) { |
| | | |
| | | if (first == null || second == null) { |
| | | return false; |
| | | } |
| | | |
| | | int day1 = getDayOfYear(first); |
| | | int day2 = getDayOfYear(second); |
| | | if (day1 != day2) { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 是否超过指定时刻 |
| | | * Has the specified time limit been exceeded |
| | | * @param day 时间 |
| | | * @param time 指定时刻 |
| | | * @return |
| | | */ |
| | | public static Boolean expireDayTime(Date day, Integer time) { |
| | | if (null == day) { |
| | | return false; |
| | | } |
| | | try { |
| | | String dates = formatDatetoString(day); |
| | | String timeHour = ""; |
| | | for (int i = 0; i <= 23; i++) { |
| | | if (i == time) { |
| | | if (i < 10) { |
| | | timeHour += " 0" + time + ":00:00"; |
| | | } else if (i < 23) { |
| | | timeHour += " " + time + ":00:00"; |
| | | } else { |
| | | timeHour += " 00" + time + ":00:00"; |
| | | } |
| | | } |
| | | } |
| | | String todayString = dates + timeHour; |
| | | Date esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss); |
| | | if (DateTimeHelper.compareTwoDate(day, esDayTime) != 1) { |
| | | int i = compareTwoDate(day, esDayTime); |
| | | System.out.println(i); |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 指定一天哪一个小时 |
| | | * Specify which hour of a particular day. |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static Date createDayTime(Integer time) { |
| | | String dates = formatDatetoString(new Date()); |
| | | String timeHour = ""; |
| | | for (int i = 0; i <= 23; i++) { |
| | | if (i == time) { |
| | | if (i < 10) { |
| | | timeHour += " 0" + time + ":00:00"; |
| | | } else if (i < 23) { |
| | | timeHour += " " + time + ":00:00"; |
| | | } else { |
| | | timeHour += " 00" + time + ":00:00"; |
| | | } |
| | | } |
| | | } |
| | | String todayString = dates + timeHour; |
| | | Date esDayTime = new Date(); |
| | | try { |
| | | esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | |
| | | return esDayTime; |
| | | } |
| | | |
| | | /** |
| | | * 数字换算成中文(周) |
| | | * Conversion of numbers to Chinese (weeks) |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static String getWeekString(Integer time) { |
| | | if (time == 1) { |
| | | return "一"; |
| | | } else if (time == 2) { |
| | | return "二"; |
| | | } else if (time == 3) { |
| | | return "三"; |
| | | } else if (time == 4) { |
| | | return "四"; |
| | | } else if (time == 5) { |
| | | return "五"; |
| | | } else if (time == 6) { |
| | | return "六"; |
| | | } else if (time == 0 || time == 7) { |
| | | return "日"; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * LocalDateTime -> Date |
| | | * |
| | | * @param localDateTime |
| | | * @return |
| | | */ |
| | | public static Date asDate(LocalDateTime localDateTime) { |
| | | return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); |
| | | } |
| | | |
| | | /** |
| | | * Date -> LocalDateTime |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static LocalDateTime asLocalDateTime(Date date) { |
| | | return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取两个时间的间隔(秒) |
| | | * Obtain the time difference between two instances (in seconds). |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return |
| | | */ |
| | | public static long getDateBetween(Date d1, Date d2) { |
| | | return Math.abs((d1.getTime() - d2.getTime()) / 1000);//取绝对值 |
| | | } |
| | | |
| | | /** |
| | | * @param date |
| | | * @return 获取今天最后的时间 |
| | | * Obtain the final time of today. |
| | | */ |
| | | public static Date getEndDate(Date date) { |
| | | if (date == null) { |
| | | return null; |
| | | } |
| | | Calendar c = Calendar.getInstance(); |
| | | c.setTime(date); |
| | | c.set(Calendar.HOUR_OF_DAY, 23); |
| | | c.set(Calendar.MINUTE, 59); |
| | | c.set(Calendar.SECOND, 59); |
| | | return c.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 日期天数差 |
| | | * Days Difference |
| | | */ |
| | | public static int daysBetween(Date today, Date endDate) throws ParseException { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | today = sdf.parse(sdf.format(today)); |
| | | endDate = sdf.parse(sdf.format(endDate)); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(today); |
| | | long time1 = cal.getTimeInMillis(); |
| | | cal.setTime(endDate); |
| | | long time2 = cal.getTimeInMillis(); |
| | | long between_days = (time2 - time1) / (1000 * 3600 * 24); |
| | | return Integer.parseInt(String.valueOf(between_days)); |
| | | } |
| | | |
| | | /** |
| | | * 获取到当月所有日期 |
| | | * Obtain all dates of the current month |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static List<Date> getAllTheDateOftheMonth(Date date) { |
| | | List<Date> list = new ArrayList<Date>(); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.set(Calendar.DATE, 1); |
| | | |
| | | int month = cal.get(Calendar.MONTH); |
| | | while (cal.get(Calendar.MONTH) == month) { |
| | | list.add(cal.getTime()); |
| | | cal.add(Calendar.DATE, 1); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | /*public static void main(String[] args) throws ParseException { |
| | | List<Date> allTheDateOftheMonth = getAllTheDateOftheMonth(new Date()); |
| | | Date date = allTheDateOftheMonth.get(11); |
| | | System.out.println(date.toLocaleString()); |
| | | int i = daysBetween(new Date(), date); |
| | | System.out.println(i); |
| | | }*/ |
| | | |
| | | |
| | | } |
New file |
| | |
| | | /** |
| | | * Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com). |
| | | * <p> |
| | | * Licensed under the Apache License, Version 2.0 (the "License"); |
| | | * you may not use this file except in compliance with the License. |
| | | * You may obtain a copy of the License at |
| | | * <p> |
| | | * http://www.apache.org/licenses/LICENSE-2.0 |
| | | * <p> |
| | | * Unless required by applicable law or agreed to in writing, software |
| | | * distributed under the License is distributed on an "AS IS" BASIS, |
| | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | * See the License for the specific language governing permissions and |
| | | * limitations under the License. |
| | | */ |
| | | package com.dsh.other.util; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.commons.lang3.time.DateFormatUtils; |
| | | import org.apache.commons.lang3.time.DateUtils; |
| | | |
| | | import java.sql.Timestamp; |
| | | import java.text.DateFormat; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.Objects; |
| | | import java.util.TimeZone; |
| | | |
| | | public class DateUtil { |
| | | |
| | | private static TimeZone tz = TimeZone.getTimeZone("GMT+8"); |
| | | |
| | | /** |
| | | * 获取YYYY格式 |
| | | */ |
| | | public static String getYear() { |
| | | return formatDate(new Date(), "yyyy"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY格式 |
| | | */ |
| | | public static String getYear(Date date) { |
| | | return formatDate(date, "yyyy"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD格式 |
| | | */ |
| | | public static String getDay() { |
| | | return formatDate(new Date(), "yyyy-MM-dd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD格式 |
| | | */ |
| | | public static String getDay(Date date) { |
| | | return formatDate(date, "yyyy-MM-dd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYYMMDD格式 |
| | | */ |
| | | public static String getDays() { |
| | | return formatDate(new Date(), "yyyyMMdd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYYMMDD格式 |
| | | */ |
| | | public static String getDays(Date date) { |
| | | return formatDate(date, "yyyyMMdd"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD HH:mm:ss格式 |
| | | */ |
| | | public static String getTime() { |
| | | return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD HH:mm:ss.SSS格式 |
| | | */ |
| | | public static String getMsTime() { |
| | | return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYYMMDDHHmmss格式 |
| | | */ |
| | | public static String getAllTime() { |
| | | return formatDate(new Date(), "yyyyMMddHHmmss"); |
| | | } |
| | | |
| | | /** |
| | | * 获取YYYY-MM-DD HH:mm:ss格式 |
| | | */ |
| | | public static String getTime(Date date) { |
| | | return formatDate(date, "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | public static String formatDate(Date date, String pattern) { |
| | | String formatDate = null; |
| | | if (StringUtils.isNotBlank(pattern)) { |
| | | formatDate = DateFormatUtils.format(date, pattern); |
| | | } else { |
| | | formatDate = DateFormatUtils.format(date, "yyyy-MM-dd"); |
| | | } |
| | | return formatDate; |
| | | } |
| | | |
| | | /** |
| | | * 日期比较,如果s>=e 返回true 否则返回false) |
| | | * |
| | | * @author luguosui |
| | | */ |
| | | public static boolean compareDate(String s, String e) { |
| | | if (parseDate(s) == null || parseDate(e) == null) { |
| | | return false; |
| | | } |
| | | return parseDate(s).getTime() >= parseDate(e).getTime(); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parseDate(String date) { |
| | | return parse(date, "yyyy-MM-dd"); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parseTimeMinutes(String date) { |
| | | return parse(date, "yyyy-MM-dd HH:mm"); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parseTime(String date) { |
| | | return parse(date, "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static Date parse(String date, String pattern) { |
| | | try { |
| | | if(Objects.nonNull(date)) { |
| | | return DateUtils.parseDate(date, pattern); |
| | | } |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | */ |
| | | public static String format(Date date, String pattern) { |
| | | return DateFormatUtils.format(date, pattern); |
| | | } |
| | | |
| | | /** |
| | | * 把日期转换为Timestamp |
| | | */ |
| | | public static Timestamp format(Date date) { |
| | | return new Timestamp(date.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * 校验日期是否合法 |
| | | */ |
| | | public static boolean isValidDate(String s) { |
| | | return parse(s, "yyyy-MM-dd HH:mm:ss") != null; |
| | | } |
| | | |
| | | /** |
| | | * 校验日期是否合法 |
| | | */ |
| | | public static boolean isValidDate(String s, String pattern) { |
| | | return parse(s, pattern) != null; |
| | | } |
| | | |
| | | public static int getDiffYear(String startTime, String endTime) { |
| | | DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); |
| | | try { |
| | | int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse( |
| | | startTime).getTime()) / (1000 * 60 * 60 * 24)) / 365); |
| | | return years; |
| | | } catch (Exception e) { |
| | | // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对 |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * <li>功能描述:时间相减得到天数 |
| | | */ |
| | | public static long getDaySub(String beginDateStr, String endDateStr) { |
| | | long day = 0; |
| | | SimpleDateFormat format = new SimpleDateFormat( |
| | | "yyyy-MM-dd"); |
| | | Date beginDate = null; |
| | | Date endDate = null; |
| | | |
| | | try { |
| | | beginDate = format.parse(beginDateStr); |
| | | endDate = format.parse(endDateStr); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000); |
| | | // System.out.println("相隔的天数="+day); |
| | | |
| | | return day; |
| | | } |
| | | |
| | | /** |
| | | * 得到n天之后的日期 |
| | | */ |
| | | public static String getAfterDayDate(String days) { |
| | | int daysInt = Integer.parseInt(days); |
| | | |
| | | Calendar canlendar = Calendar.getInstance(); // java.util包 |
| | | canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 |
| | | Date date = canlendar.getTime(); |
| | | |
| | | SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | String dateStr = sdfd.format(date); |
| | | |
| | | return dateStr; |
| | | } |
| | | |
| | | /** |
| | | * 得到n天之后是周几 |
| | | */ |
| | | public static String getAfterDayWeek(String days) { |
| | | int daysInt = Integer.parseInt(days); |
| | | |
| | | Calendar canlendar = Calendar.getInstance(); // java.util包 |
| | | canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 |
| | | Date date = canlendar.getTime(); |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat("E"); |
| | | String dateStr = sdf.format(date); |
| | | |
| | | return dateStr; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 得到系统日期 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDate() { |
| | | TimeZone.setDefault(tz); |
| | | return new Date(); |
| | | } |
| | | |
| | | /** |
| | | * 获取当前毫秒数 |
| | | * |
| | | * @return long |
| | | */ |
| | | public static long getCurMilli() { |
| | | long millisecond = 0; |
| | | Calendar cal = Calendar.getInstance(); |
| | | millisecond = cal.getTimeInMillis(); |
| | | return millisecond; |
| | | } |
| | | |
| | | /** |
| | | * 得到系统Calendar日期 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Calendar getCalendar() { |
| | | TimeZone.setDefault(tz); |
| | | Calendar cal = Calendar.getInstance(); |
| | | return cal; |
| | | } |
| | | /** |
| | | * 毫秒转日期时间 |
| | | * |
| | | * @param millisecond |
| | | * @return |
| | | */ |
| | | public static String getDateTime(long millisecond) { |
| | | if (millisecond == 0) { |
| | | millisecond = getCurMilli(); |
| | | } |
| | | SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | Calendar calendar = getCalendar(); |
| | | calendar.setTimeInMillis(millisecond); |
| | | return dateformat.format(calendar.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * 日期转毫秒(加分钟) |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static long getMillisecond_fz(String date, Integer day) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | String newDate = ""; |
| | | if ("".equals(date)) { |
| | | newDate = sdf.format(DateUtil.getDate()); |
| | | } else { |
| | | newDate = getDateTime(Long.parseLong(date)); |
| | | } |
| | | Date dt = null; |
| | | try { |
| | | dt = sdf.parse(newDate); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | Calendar rightNow = Calendar.getInstance(); |
| | | rightNow.setTime(dt); |
| | | rightNow.add(Calendar.MINUTE, day); |
| | | Date dt1 = rightNow.getTime(); |
| | | return dt1.getTime(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * Double文档 |
| | | */ |
| | | public class DoubleUtil { |
| | | |
| | | public static Double format(Double num) { |
| | | BigDecimal b = new BigDecimal(num); |
| | | num = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | return num; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLDecoder; |
| | | import java.net.URLEncoder; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | public class EmojiUtil { |
| | | /** |
| | | * 编码 |
| | | * |
| | | * @param str 待转换字符串 |
| | | * @return 转换后字符串 |
| | | * @throws UnsupportedEncodingException exception |
| | | * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集) |
| | | */ |
| | | public static String emojiEncode(String str) |
| | | throws UnsupportedEncodingException { |
| | | String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])"; |
| | | |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | Matcher matcher = pattern.matcher(str); |
| | | StringBuffer sb = new StringBuffer(); |
| | | while (matcher.find()) { |
| | | try { |
| | | matcher.appendReplacement( |
| | | sb, |
| | | "[[" |
| | | + URLEncoder.encode(matcher.group(1), |
| | | "UTF-8") + "]]"); |
| | | } catch (UnsupportedEncodingException e) { |
| | | // LOG.error("emojiConvert error", e); |
| | | throw e; |
| | | } |
| | | } |
| | | matcher.appendTail(sb); |
| | | // LOG.debug("emojiConvert " + str + " to " + sb.toString() |
| | | // + ", len:" + sb.length()); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 解码 |
| | | * |
| | | * @param str 转换后的字符串 |
| | | * @return 转换前的字符串 |
| | | * @throws UnsupportedEncodingException exception |
| | | * @Description 还原utf8数据库中保存的含转换后emoji表情的字符串 |
| | | */ |
| | | public static String emojiDecode(String str) |
| | | throws UnsupportedEncodingException { |
| | | String patternString = "\\[\\[(.*?)\\]\\]"; |
| | | |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | if (str == null) { |
| | | return str; |
| | | } |
| | | Matcher matcher = pattern.matcher(str); |
| | | |
| | | StringBuffer sb = new StringBuffer(); |
| | | while (matcher.find()) { |
| | | try { |
| | | matcher.appendReplacement(sb, |
| | | URLDecoder.decode(matcher.group(1), "UTF-8")); |
| | | } catch (UnsupportedEncodingException e) { |
| | | // LOG.error("emojiRecovery error", e); |
| | | throw e; |
| | | } |
| | | } |
| | | matcher.appendTail(sb); |
| | | // LOG.debug("emojiRecovery " + str + " to " + sb.toString()); |
| | | // System.out.println("emojiRecovery " + str + " to " + sb.toString()); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * @param str 待过滤字符串 |
| | | * @return 过滤后字符串 |
| | | * exception |
| | | * @Description 将字符串中的emoji表情过滤掉 |
| | | */ |
| | | public static String emojiSub(String str) { |
| | | String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])"; |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | Matcher matcher = pattern.matcher(str); |
| | | StringBuffer sb = new StringBuffer(); |
| | | while (matcher.find()) { |
| | | matcher.appendReplacement(sb, ""); |
| | | } |
| | | matcher.appendTail(sb); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | public class HeaderAuthUtil { |
| | | |
| | | /** |
| | | * 用户UserId变量 |
| | | */ |
| | | protected final static String HEADER_USERID = "userId"; |
| | | |
| | | /** |
| | | * 获取Request请求头UserId |
| | | * @return |
| | | */ |
| | | public static String getLoginAuthUserId (HttpServletRequest request) { |
| | | String userId = request.getHeader(HEADER_USERID); |
| | | return userId; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.serializer.SerializerFeature; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import com.fasterxml.jackson.databind.JavaType; |
| | | import com.fasterxml.jackson.databind.JsonNode; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.HashMap; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * |
| | | * 返回json数据封装工具类 |
| | | * |
| | | * @ClassName: JsonUtil |
| | | * @author: yuds |
| | | * @date: 2019-09-20 09:19:27 |
| | | * @version: V1.0.0 |
| | | */ |
| | | public class JsonUtil { |
| | | |
| | | /** |
| | | * <li>将对象转化为json输出 |
| | | * <li>QuoteFieldNames ———-输出key时是否使用双引号,默认为true |
| | | * <li>WriteMapNullValue ——–是否输出值为null的字段,默认为false |
| | | * <li>WriteNullNumberAsZero —-数值字段如果为null,输出为0,而非null |
| | | * <li>WriteNullListAsEmpty —–List字段如果为null,输出为[],而非null |
| | | * <li>WriteNullStringAsEmpty —字符类型字段如果为null,输出为”“,而非null |
| | | * <li>WriteNullBooleanAsFalse –Boolean字段如果为null,输出为false,而非null |
| | | * <li>DisableCircularReferenceDetect 禁止循环引用检测 |
| | | */ |
| | | private static SerializerFeature[] serializerFeaturess = { SerializerFeature.WriteMapNullValue, |
| | | SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullListAsEmpty, |
| | | SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullBooleanAsFalse, |
| | | SerializerFeature.DisableCircularReferenceDetect, }; |
| | | |
| | | private JsonUtil() { |
| | | |
| | | } |
| | | |
| | | /** |
| | | * fastJson Object转json |
| | | * |
| | | * @param obj |
| | | * @return |
| | | */ |
| | | public static String objToJson(Object obj) { |
| | | return JSON.toJSONString(obj, serializerFeaturess); |
| | | } |
| | | |
| | | /** |
| | | * fastJson Object转json |
| | | * |
| | | * @param obj |
| | | * @param dateFormat 时间格式化 |
| | | * @return |
| | | */ |
| | | public static String objToJson(Object obj, String dateFormat) { |
| | | return JSON.toJSONStringWithDateFormat(obj, dateFormat, serializerFeaturess); |
| | | } |
| | | |
| | | // 定义jackson对象 |
| | | private static final ObjectMapper MAPPER = new ObjectMapper(); |
| | | |
| | | /** |
| | | * 将对象转换成json字符串。 |
| | | * <p> |
| | | * Title: pojoToJson |
| | | * </p> |
| | | * <p> |
| | | * Description: |
| | | * </p> |
| | | * |
| | | * @param data |
| | | * @return |
| | | */ |
| | | public static String objectToJson(Object data) { |
| | | try { |
| | | SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm"); |
| | | MAPPER.setDateFormat(fmt); |
| | | String string = MAPPER.writeValueAsString(data); |
| | | return string; |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 将json结果集转化为对象 |
| | | * |
| | | * @param jsonData json数据 |
| | | * @param beanType 对象中的object类型 |
| | | * @return |
| | | */ |
| | | public static <T> T jsonToPojo(String jsonData, Class<T> beanType) { |
| | | try { |
| | | T t = MAPPER.readValue(jsonData, beanType); |
| | | return t; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 将json数据转换成pojo对象list |
| | | * <p> |
| | | * Title: jsonToList |
| | | * </p> |
| | | * <p> |
| | | * Description: |
| | | * </p> |
| | | * |
| | | * @param jsonData |
| | | * @param beanType |
| | | * @return |
| | | */ |
| | | public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) { |
| | | JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType); |
| | | try { |
| | | List<T> list = MAPPER.readValue(jsonData, javaType); |
| | | return list; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | public static JsonNode jsonToNode(String jsonData) { |
| | | try { |
| | | return MAPPER.readTree(jsonData); |
| | | } catch (Exception ex) { |
| | | ex.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public static Map<String, String> jsonToMap(String json) { |
| | | JsonNode nodes = jsonToNode(json); |
| | | Iterator<Map.Entry<String, JsonNode>> fields = nodes.fields(); |
| | | Map<String, String> map = new HashMap<>(); |
| | | while (fields.hasNext()) { |
| | | Map.Entry<String, JsonNode> next = fields.next(); |
| | | String value = next.getValue().asText(""); |
| | | map.put(next.getKey(), value); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.time.Duration; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * LocalDateTimeUtils |
| | | * LocalDateTime 时间工具 |
| | | * |
| | | * @author yudeshan |
| | | * @version V1.0 |
| | | */ |
| | | public class LocalDateTimeUtils { |
| | | private final static int[] dayArr = new int[] { 20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22 }; |
| | | private final static String[] constellationArr = new String[] { "摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座" }; |
| | | |
| | | |
| | | /** |
| | | * 取两个时间相差毫秒数 |
| | | * |
| | | * @param start 开始时间 |
| | | * @param end 结束时间 |
| | | * @return |
| | | */ |
| | | public static long betweenMillis(LocalDateTime start, LocalDateTime end) { |
| | | Duration duration = Duration.between(start, end); |
| | | return duration.toMillis(); |
| | | } |
| | | |
| | | /** |
| | | * 通过生日计算年龄 |
| | | * @param birthDay 生日 |
| | | * @return |
| | | * @throws ParseException |
| | | */ |
| | | public static int getAgeByBirth(LocalDate birthDay) throws ParseException { |
| | | int age = 0; |
| | | //出生日期晚于当前时间,无法计算 |
| | | LocalDate now=LocalDate.now(); |
| | | if (birthDay.isAfter(now)) { |
| | | throw new IllegalArgumentException( "生日大于当前时间!"); |
| | | } |
| | | //当前年份 |
| | | int yearNow = now.getYear(); |
| | | //当前月份 |
| | | int monthNow = now.getMonthValue(); |
| | | //当前日期 |
| | | int dayOfMonthNow = now.getDayOfMonth(); |
| | | |
| | | int yearBirth =birthDay.getYear(); |
| | | int monthBirth = birthDay.getMonthValue(); |
| | | int dayOfMonthBirth = birthDay.getDayOfMonth(); |
| | | //计算整岁数 |
| | | age = yearNow - yearBirth; |
| | | if (monthNow <= monthBirth) { |
| | | if (monthNow == monthBirth) { |
| | | if (dayOfMonthNow < dayOfMonthBirth){ |
| | | //当前日期在生日之前,年龄减一 |
| | | age--; |
| | | } |
| | | } else { |
| | | //当前月份在生日之前,年龄减一 |
| | | age--; |
| | | } |
| | | } |
| | | return age; |
| | | } |
| | | |
| | | /** |
| | | * 根据月份计算星座 |
| | | */ |
| | | |
| | | public static String getConstellation(LocalDate date) { |
| | | Integer month=date.getMonthValue(); |
| | | Integer day=date.getDayOfMonth(); |
| | | return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month]; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.MessageSource; |
| | | import org.springframework.context.i18n.LocaleContextHolder; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | |
| | | @Component |
| | | public class MessageUtils { |
| | | |
| | | @Autowired |
| | | private MessageSource messageSource; |
| | | |
| | | /** |
| | | * 根据消息键和参数 获取消息 委托给spring messageSource |
| | | * |
| | | * @param code 消息键 |
| | | * @param args 参数 |
| | | * @return 获取国际化翻译值 |
| | | */ |
| | | public String get(String code, Object... args) { |
| | | return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import com.alibaba.csp.sentinel.util.StringUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import redis.clients.jedis.Jedis; |
| | | import redis.clients.jedis.JedisPool; |
| | | import redis.clients.jedis.Pipeline; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | |
| | | /** |
| | | * Redis工具类 |
| | | */ |
| | | @Component |
| | | public class RedisUtil { |
| | | |
| | | @Autowired |
| | | private JedisPool jedisPool; |
| | | |
| | | |
| | | /** |
| | | * 向redis中存储字符串没有过期时间 |
| | | * Storing strings in Redis without an expiration time. |
| | | * @param key |
| | | * @param value |
| | | */ |
| | | public void setStrValue(String key, String value){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String set = resource.set(key, value); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 以分钟为单位设置存储值(设置过期时间) |
| | | * Set storage value in minutes (set expiration time) as units. |
| | | * @param key |
| | | * @param value |
| | | * @param time 秒 |
| | | */ |
| | | public void setStrValue(String key, String value, int time){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String setex = resource.setex(key, time, value); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 从redis中获取值 |
| | | * @param key |
| | | * @return |
| | | */ |
| | | public String getValue(String key){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | String data = resource.get(key); |
| | | closeJedis(resource); |
| | | return data; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 批量获取 |
| | | * @param kes |
| | | * @return |
| | | */ |
| | | public List<Object> getValues(List<String> kes){ |
| | | if(null != kes){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | Pipeline pipelined = resource.pipelined(); |
| | | for(String key : kes){ |
| | | pipelined.get(key); |
| | | } |
| | | List<Object> list = pipelined.syncAndReturnAll(); |
| | | |
| | | closeJedis(resource); |
| | | pipelined.clear(); |
| | | try { |
| | | pipelined.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | List<Object> data = new ArrayList<>(); |
| | | for(Object o : list){ |
| | | if(null != o){ |
| | | data.add(o); |
| | | } |
| | | } |
| | | return data; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除key |
| | | * @param key |
| | | */ |
| | | public void remove(String key){ |
| | | if(StringUtil.isNotEmpty(key)){ |
| | | Jedis resource = jedisPool.getResource(); |
| | | Long del = resource.del(key); |
| | | closeJedis(resource); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除资源 |
| | | * @param jedis |
| | | */ |
| | | public void closeJedis(Jedis jedis){ |
| | | if(null != jedis){ |
| | | jedis.close(); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | |
| | | /** |
| | | * 定义统一返回对象 |
| | | */ |
| | | @ApiModel(value = "统一返回结果集") |
| | | public class ResultUtil<T> { |
| | | |
| | | public static final Integer SUCCESS = 200; |
| | | |
| | | public static final Integer PARAM_ERROR = 300; |
| | | |
| | | public static final Integer RUNTIME_ERROR = 400; |
| | | |
| | | public static final Integer ERROR = 500; |
| | | |
| | | public static final Integer TOKEN_ERROR = 600; |
| | | |
| | | public static final Integer SIGN_ERROR = 700; |
| | | |
| | | public static final String Token = "TOKEN_INVALID"; |
| | | |
| | | public static final String SIGN = "SIGN_INVALID"; |
| | | |
| | | @ApiModelProperty(name = "code", value = "业务状态码 200:成功,300:参数错误,400:运行异常,500:其他异常, 600:token无效,需重新登录,700:签名无效") |
| | | private Integer code;//备用状态码 |
| | | |
| | | @ApiModelProperty(name = "msg", value = "返回结果说明") |
| | | private String msg;//返回说明 |
| | | |
| | | @ApiModelProperty(name = "data", value = "返回结果值") |
| | | private T data;//返回数据 |
| | | |
| | | |
| | | |
| | | public String getMsg() { |
| | | return msg; |
| | | } |
| | | |
| | | public T getData() { |
| | | return data; |
| | | } |
| | | |
| | | |
| | | public Integer getCode() { |
| | | return code; |
| | | } |
| | | |
| | | private ResultUtil(Integer code, String msg) { |
| | | this.code = code; |
| | | this.msg = msg; |
| | | } |
| | | |
| | | private ResultUtil(Integer code, String msg, T data) { |
| | | this.code = code; |
| | | this.msg = msg; |
| | | this.data = data; |
| | | } |
| | | |
| | | |
| | | public static <T> ResultUtil<T> getResult(Integer code, String msg){ |
| | | return new ResultUtil<>(code, msg); |
| | | } |
| | | |
| | | public static <T> ResultUtil<T> getResult(Integer code, String msg, T data){ |
| | | return new ResultUtil<>(code, msg, data); |
| | | } |
| | | |
| | | /** |
| | | * 错误信息 |
| | | * @return |
| | | */ |
| | | public static ResultUtil error(String mag){ |
| | | return ResultUtil.getResult(ResultUtil.ERROR, mag, new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * 错误信息 |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil <T> error(String mag, T obj){ |
| | | return ResultUtil.getResult(ResultUtil.ERROR, mag, obj); |
| | | } |
| | | |
| | | /** |
| | | * token失效 |
| | | * @return |
| | | */ |
| | | public static ResultUtil tokenErr(){ |
| | | return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, ResultUtil.Token, new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * token失效 |
| | | * @return |
| | | */ |
| | | public static ResultUtil tokenErr(String msg){ |
| | | return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, msg, new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * 参数异常 |
| | | * @return |
| | | */ |
| | | public static ResultUtil paranErr(){ |
| | | return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "PARAM_ERROR", new JSONObject()); |
| | | } |
| | | |
| | | /** |
| | | * 参数异常 |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> paranErr(T data){ |
| | | return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "SYSTEM_RUN_ERROR", data); |
| | | } |
| | | |
| | | @Autowired |
| | | private static MessageUtils messageUtils; |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static ResultUtil runErr(){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", new JSONObject()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static <T>ResultUtil<T> runErr(T data){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", data); |
| | | } |
| | | |
| | | /** |
| | | * 运行异常 |
| | | * @return |
| | | */ |
| | | public static <T>ResultUtil<T> runErr(T data, String msg){ |
| | | return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, msg, data); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param |
| | | * @return |
| | | */ |
| | | public static ResultUtil success(){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new JSONObject()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param data |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> success(T data){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", data); |
| | | } |
| | | |
| | | /** |
| | | * 返回成功 |
| | | * @param msg |
| | | * @param data |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> success(String msg, T data){ |
| | | return ResultUtil.getResult(ResultUtil.SUCCESS, msg, data); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 签名无效 |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> ResultUtil<T> sign(){ |
| | | return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Random; |
| | | |
| | | |
| | | public class StrUtils { |
| | | /** |
| | | * 把逗号分隔的字符串转换字符串数组 |
| | | * Convert comma-separated string to string array. |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static String[] splitStr2StrArr(String str,String split) { |
| | | if (str != null && !str.equals("")) { |
| | | return str.split(split); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 把逗号分隔字符串转换List的Long |
| | | * |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static List<Long> splitStr2LongArr(String str) { |
| | | String[] strings = splitStr2StrArr(str,","); |
| | | if (strings == null) return null; |
| | | |
| | | List<Long> result = new ArrayList<>(); |
| | | for (String string : strings) { |
| | | result.add(Long.parseLong(string)); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | /** |
| | | * 把逗号分隔字符串转换List的Long |
| | | * |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static List<Long> splitStr2LongArr(String str,String split) { |
| | | String[] strings = splitStr2StrArr(str,split); |
| | | if (strings == null) return null; |
| | | |
| | | List<Long> result = new ArrayList<>(); |
| | | for (String string : strings) { |
| | | result.add(Long.parseLong(string)); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | public static String getRandomString(int length) { |
| | | String str = "0123456789"; |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int number = random.nextInt(10); |
| | | sb.append(str.charAt(number)); |
| | | } |
| | | return sb.toString(); |
| | | |
| | | } |
| | | |
| | | public static String getComplexRandomString(int length) { |
| | | String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int number = random.nextInt(62); |
| | | sb.append(str.charAt(number)); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | public static String getClassCodeString(int length) { |
| | | String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int number =random.nextInt(36); |
| | | sb.append(str.charAt(number)); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | public static String convertPropertiesToHtml(String properties){ |
| | | //1:容量:6:32GB_4:样式:12:塑料壳 |
| | | StringBuilder sBuilder = new StringBuilder(); |
| | | String[] propArr = properties.split("_"); |
| | | for (String props : propArr) { |
| | | String[] valueArr = props.split(":"); |
| | | sBuilder.append(valueArr[1]).append(":").append(valueArr[3]).append("<br>"); |
| | | } |
| | | return sBuilder.toString(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import cn.mb.cloud.common.core.exception.BusinessException; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | /** |
| | | * 判断字符串不能为空和null,以及号码格式效验, |
| | | * 否则则抛出异常信息 |
| | | */ |
| | | public class StringUtil { |
| | | private StringUtil() { |
| | | } |
| | | |
| | | public static void checkNull(String str, String message) throws BusinessException { |
| | | if (!StringUtils.hasLength(str)) { |
| | | throw new BusinessException(message); |
| | | } |
| | | } |
| | | |
| | | public static void checkFormat(String str, String message) throws BusinessException { |
| | | if (!str.matches("^1[2|3|4|5|6|7|8|9][0-9]{9}$")) { |
| | | throw new BusinessException(message); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.Date; |
| | | |
| | | |
| | | //根据当前传入的时间,返回距离当前时间多少天 |
| | | |
| | | public class StudyTimeUtil { |
| | | private StudyTimeUtil() { |
| | | } |
| | | |
| | | /** |
| | | * 获取两个时间的间隔(秒)Obtain the time difference between two instances (in seconds). |
| | | * |
| | | * @param startDate 开始的时间 |
| | | * @return 返回当前时间与开始时间的相差天数 |
| | | */ |
| | | public static int getDateBetween(Date startDate) throws ParseException { |
| | | Date endDate = new Date(); |
| | | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | long startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime(); |
| | | long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime(); |
| | | int days = (int)((endDateTime - startDateTime) / (1000 * 3600 * 24)); |
| | | return days; |
| | | } |
| | | |
| | | public static Date getStartDate(LocalDateTime localDate) { |
| | | Date date = Date.from(localDate.atZone(ZoneId.systemDefault()).toInstant()); |
| | | return date; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.dsh.other.util; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | @Component |
| | | public class TokenUtil { |
| | | |
| | | @Autowired |
| | | private RedisUtil redisUtil; |
| | | |
| | | |
| | | public Integer getUserIdFormRedis(HttpServletRequest request) throws Exception { |
| | | String requestHeader = request.getHeader("Authorization"); |
| | | if (requestHeader != null && requestHeader.startsWith("Bearer ")) { |
| | | requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1); |
| | | String key = null; |
| | | int length = requestHeader.length(); |
| | | if(length > 32){ |
| | | key = requestHeader.substring(length - 32); |
| | | }else{ |
| | | key = requestHeader; |
| | | } |
| | | String value = redisUtil.getValue(key); |
| | | return null != value ? Integer.valueOf(value) : null; |
| | | }else{ |
| | | return null; |
| | | } |
| | | } |
| | | } |
copy from cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/Auth.java
copy to cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/Auth.java
New file |
| | |
| | | package com.dsh.other.util.akeylogin; |
| | | |
| | | import java.nio.charset.Charset; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.Base64; |
| | | |
| | | public class Base64Utils { |
| | | private static final Charset DEFAULT_CHARSET; |
| | | |
| | | public Base64Utils() { |
| | | } |
| | | |
| | | public static byte[] encode(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getEncoder().encode(src); |
| | | } |
| | | |
| | | public static byte[] decode(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getDecoder().decode(src); |
| | | } |
| | | |
| | | public static byte[] encodeUrlSafe(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getUrlEncoder().encode(src); |
| | | } |
| | | |
| | | public static byte[] decodeUrlSafe(byte[] src) { |
| | | return src.length == 0 ? src : Base64.getUrlDecoder().decode(src); |
| | | } |
| | | |
| | | public static String encodeToString(byte[] src) { |
| | | return src.length == 0 ? "" : new String(encode(src), DEFAULT_CHARSET); |
| | | } |
| | | |
| | | public static byte[] decodeFromString(String src) { |
| | | return src.isEmpty() ? new byte[0] : decode(src.getBytes(DEFAULT_CHARSET)); |
| | | } |
| | | |
| | | public static String encodeToUrlSafeString(byte[] src) { |
| | | return new String(encodeUrlSafe(src), DEFAULT_CHARSET); |
| | | } |
| | | |
| | | public static byte[] decodeFromUrlSafeString(String src) { |
| | | return decodeUrlSafe(src.getBytes(DEFAULT_CHARSET)); |
| | | } |
| | | |
| | | static { |
| | | DEFAULT_CHARSET = StandardCharsets.UTF_8; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.other.util.akeylogin; |
| | | |
| | | import java.lang.reflect.Array; |
| | | import java.util.Collection; |
| | | import java.util.Map; |
| | | |
| | | public class BaseUtils { |
| | | public static boolean isEmpty(Object target) { |
| | | if (target == null) { |
| | | return true; |
| | | } |
| | | if (target instanceof String && "".equals(target)) { |
| | | return true; |
| | | } else if (target instanceof Collection) { |
| | | return ((Collection<?>) target).isEmpty(); |
| | | } else if (target instanceof Map) { |
| | | return ((Map<?, ?>) target).isEmpty(); |
| | | } else if (target.getClass().isArray()) { |
| | | return Array.getLength(target) == 0; |
| | | } |
| | | return false; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.other.util.akeylogin; |
| | | |
| | | import javax.crypto.Cipher; |
| | | import javax.crypto.SecretKey; |
| | | import javax.crypto.SecretKeyFactory; |
| | | import javax.crypto.spec.DESKeySpec; |
| | | import javax.crypto.spec.IvParameterSpec; |
| | | import java.security.Key; |
| | | import java.security.spec.AlgorithmParameterSpec; |
| | | |
| | | public class DES { |
| | | public static final String ALGORITHM = "DES"; |
| | | public static final String PADDING = "DES/CBC/PKCS5Padding"; |
| | | private static final byte[] DEFAULT_INITIALIZATION_VECTOR = ("00000000".getBytes()); |
| | | |
| | | private String padding = PADDING; |
| | | private byte[] initializationVectorBytes = DEFAULT_INITIALIZATION_VECTOR; |
| | | private AlgorithmParameterSpec paramSpec; |
| | | |
| | | public DES() { |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | public DES(String padding) { |
| | | this.padding = padding; |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | public DES(String padding, byte[] initializationVectorBytes) { |
| | | this.padding = padding; |
| | | this.initializationVectorBytes = initializationVectorBytes; |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | public DES(byte[] initializationVectorBytes) { |
| | | this.initializationVectorBytes = initializationVectorBytes; |
| | | this.paramSpec = new IvParameterSpec(initializationVectorBytes); |
| | | } |
| | | |
| | | |
| | | public byte[] encodeBytes(byte[] data, byte[] key) throws Exception { |
| | | Key secretKey = getKey(key); |
| | | Cipher cipher = Cipher.getInstance(padding); |
| | | cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec); |
| | | byte[] bytes = cipher.doFinal(data); |
| | | return bytes; |
| | | } |
| | | |
| | | public byte[] decodeBytes(byte[] data, byte[] key) throws Exception { |
| | | Key secretKey = getKey(key); |
| | | Cipher cipher = Cipher.getInstance(padding); |
| | | cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec); |
| | | return cipher.doFinal(data); |
| | | |
| | | } |
| | | |
| | | public String getPadding() { |
| | | return padding; |
| | | } |
| | | |
| | | public byte[] getInitializationVectorBytes() { |
| | | return initializationVectorBytes; |
| | | } |
| | | |
| | | private static Key getKey(byte[] key) throws Exception { |
| | | DESKeySpec dks = new DESKeySpec(key); |
| | | SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); |
| | | SecretKey secretKey = keyFactory.generateSecret(dks); |
| | | return secretKey; |
| | | } |
| | | |
| | | public static byte[] decode(byte[] data, byte[] key) throws Exception { |
| | | return decode(data, key, DEFAULT_INITIALIZATION_VECTOR); |
| | | } |
| | | |
| | | |
| | | public static byte[] encode(byte[] data, byte[] key) throws Exception { |
| | | return encode(data, key, DEFAULT_INITIALIZATION_VECTOR); |
| | | } |
| | | |
| | | public static byte[] decode(byte[] data, byte[] key, byte[] ivBytes) throws Exception { |
| | | DES des = new DES(PADDING, ivBytes); |
| | | return des.decodeBytes(data, key); |
| | | } |
| | | |
| | | public static byte[] encode(byte[] data, byte[] key, byte[] ivBytes) throws Exception { |
| | | DES des = new DES(PADDING, ivBytes); |
| | | return des.encodeBytes(data, key); |
| | | } |
| | | } |
copy from cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/LoginUtil.java
copy to cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/LoginUtil.java
New file |
| | |
| | | package com.dsh.other.util.akeylogin; |
| | | |
| | | import java.security.MessageDigest; |
| | | |
| | | public class Md5Util { |
| | | private static final String hexDigIts[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; |
| | | |
| | | /** |
| | | * MD5加密 |
| | | * |
| | | * @param origin 字符 |
| | | * @param charsetname 编码 |
| | | * @return |
| | | */ |
| | | public static String MD5Encode(String origin, String charsetname) { |
| | | String resultString = null; |
| | | try { |
| | | resultString = new String(origin); |
| | | MessageDigest md = MessageDigest.getInstance("MD5"); |
| | | if (null == charsetname || "".equals(charsetname)) { |
| | | resultString = byteArrayToHexString(md.digest(resultString.getBytes())); |
| | | } else { |
| | | resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname))); |
| | | } |
| | | } catch (Exception e) { |
| | | } |
| | | return resultString; |
| | | } |
| | | |
| | | |
| | | public static String byteArrayToHexString(byte b[]) { |
| | | StringBuffer resultSb = new StringBuffer(); |
| | | for (int i = 0; i < b.length; i++) { |
| | | resultSb.append(byteToHexString(b[i])); |
| | | } |
| | | return resultSb.toString(); |
| | | } |
| | | |
| | | public static String byteToHexString(byte b) { |
| | | int n = b; |
| | | if (n < 0) { |
| | | n += 256; |
| | | } |
| | | int d1 = n / 16; |
| | | int d2 = n % 16; |
| | | return hexDigIts[d1] + hexDigIts[d2]; |
| | | } |
| | | } |
New file |
| | |
| | | package com.dsh.other.util.akeylogin; |
| | | |
| | | import java.util.Map; |
| | | import java.util.TreeMap; |
| | | |
| | | public class SignUtil { |
| | | private static String charset = "utf8"; |
| | | |
| | | public static String getSign(Map<String, Object> data, String secret) { |
| | | if (data == null) { |
| | | return null; |
| | | } |
| | | //排序参数 |
| | | Map<String, Object> mappingList = new TreeMap<>(data); |
| | | StringBuilder plainText= new StringBuilder(); |
| | | mappingList.forEach((k, v) -> { |
| | | if (!"sign".equals(k) && !BaseUtils.isEmpty(v)) { |
| | | plainText.append(String.format("%s=%s&", k, v)); |
| | | } |
| | | }); |
| | | String substring = plainText.substring(0, plainText.length() - 1); |
| | | return Md5Util.MD5Encode(substring + secret, charset); |
| | | } |
| | | } |
New file |
| | |
| | | spring.profiles.active=@profiles.active@ |
| | | spring.application.name=@artifactId@ |
| | | spring.cloud.nacos.username=@profiles.nacos-username@ |
| | | spring.cloud.nacos.password=@profiles.nacos-password@ |
| | | spring.cloud.nacos.config.server-addr=@profiles.nacos-addr@ |
| | | spring.cloud.nacos.config.namespace=@profiles.nacos-namespace@ |
| | | spring.cloud.nacos.config.group=@profiles.group@ |
| | | spring.cloud.nacos.config.file-extension=properties |
| | | spring.cloud.nacos.config.extension-configs[0].data-id=${spring.application.name}.${spring.cloud.nacos.config.file-extension} |
| | | spring.cloud.nacos.config.extension-configs[0].group=@profiles.group@ |
| | | spring.cloud.nacos.config.extension-configs[0].refresh=true |
| | | spring.cloud.nacos.config.extension-configs[1].data-id=@profiles.global.config@.${spring.cloud.nacos.config.file-extension} |
| | | spring.cloud.nacos.config.extension-configs[1].group=@profiles.group@ |
| | | spring.cloud.nacos.config.extension-configs[1].refresh=true |
| | | spring.cloud.nacos.discovery.server-addr=@profiles.nacos-addr@ |
| | | spring.cloud.nacos.discovery.namespace=@profiles.nacos-namespace@ |
| | | spring.cloud.nacos.discovery.register-enabled=true |
| | | spring.cloud.nacos.discovery.group=@profiles.group@ |
| | | spring.main.allow-bean-definition-overriding=true |
| | | spring.flyway.enabled=false |
| | | |
| | | # \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0479\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD |
| | | feign.compression.request.mime-types=text/xml,application/xml,application/json |
| | | feign.compression.request.min-request-size=4096 |
| | | feign.compression.request.enabled=true |
| | | feign.compression.response.enabled=true |
| | | |
| | | |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果设置为WARN,则低于WARN的信息都不会输出 --> |
| | | <!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true --> |
| | | <!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --> |
| | | <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --> |
| | | <configuration scan="true" scanPeriod="10 seconds"> |
| | | <contextName>logback</contextName> |
| | | |
| | | <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 --> |
| | | <property name="log.path" value="/usr/local/server/logs"/> |
| | | |
| | | <!--0. 日志格式和颜色渲染 --> |
| | | <!-- 彩色日志依赖的渲染类 --> |
| | | <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> |
| | | <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> |
| | | <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> |
| | | <!-- 彩色日志格式 --> |
| | | <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> |
| | | |
| | | <!--1. 输出到控制台--> |
| | | <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> |
| | | <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--> |
| | | <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> |
| | | <level>debug</level> |
| | | </filter> |
| | | <encoder> |
| | | <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> |
| | | <!-- 设置字符集 --> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <!--2. 输出到文档--> |
| | | <!-- 2.1 level为 DEBUG 日志,时间滚动输出 --> |
| | | <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <!-- 正在记录的日志文档的路径及文档名 --> |
| | | <file>${log.path}/${artifactId}/debug.log</file> |
| | | <!--日志文档输出格式 Output format of the log document.--> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | <charset>UTF-8</charset> <!-- 设置字符集 --> |
| | | </encoder> |
| | | <!-- 日志记录器的滚动策略,按日期,按大小记录 Rolling strategy of the logger, recording by date or by size.--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <!-- 日志归档 --> |
| | | <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> |
| | | <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> |
| | | <maxFileSize>100MB</maxFileSize> |
| | | </timeBasedFileNamingAndTriggeringPolicy> |
| | | <!--日志文档保留天数--> |
| | | <maxHistory>15</maxHistory> |
| | | </rollingPolicy> |
| | | <!-- 此日志文档只记录debug级别的 --> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>debug</level> |
| | | <onMatch>ACCEPT</onMatch> |
| | | <onMismatch>DENY</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | |
| | | <!-- 2.2 level为 INFO 日志,时间滚动输出 --> |
| | | <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <!-- 正在记录的日志文档的路径及文档名 --> |
| | | <file>${log.path}/${artifactId}/info.log</file> |
| | | <!--日志文档输出格式 Output format of the log document.--> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | <!-- 日志记录器的滚动策略,按日期,按大小记录 Rolling strategy of the logger, recording by date or by size.--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <!-- 每天日志归档路径以及格式 --> |
| | | <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> |
| | | <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> |
| | | <maxFileSize>100MB</maxFileSize> |
| | | </timeBasedFileNamingAndTriggeringPolicy> |
| | | <!--日志文档保留天数--> |
| | | <maxHistory>15</maxHistory> |
| | | </rollingPolicy> |
| | | <!-- 此日志文档只记录info级别的 --> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>info</level> |
| | | <onMatch>ACCEPT</onMatch> |
| | | <onMismatch>DENY</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | |
| | | <!-- 2.3 level为 WARN 日志,时间滚动输出 --> |
| | | <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <!-- 正在记录的日志文档的路径及文档名 --> |
| | | <file>${log.path}/${artifactId}/warn.log</file> |
| | | <!--日志文档输出格式 Output format of the log document.--> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | <charset>UTF-8</charset> <!-- 此处设置字符集 --> |
| | | </encoder> |
| | | <!-- 日志记录器的滚动策略,按日期,按大小记录 Rolling strategy of the logger, recording by date or by size.--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> |
| | | <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> |
| | | <maxFileSize>100MB</maxFileSize> |
| | | </timeBasedFileNamingAndTriggeringPolicy> |
| | | <!--日志文档保留天数--> |
| | | <maxHistory>15</maxHistory> |
| | | </rollingPolicy> |
| | | <!-- 此日志文档只记录warn级别的 --> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>warn</level> |
| | | <onMatch>ACCEPT</onMatch> |
| | | <onMismatch>DENY</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | |
| | | <!-- 2.4 level为 ERROR 日志,时间滚动输出 --> |
| | | <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <!-- 正在记录的日志文档的路径及文档名 --> |
| | | <file>${log.path}/${artifactId}/error.log</file> |
| | | <!--日志文档输出格式 Output format of the log document.--> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | <charset>UTF-8</charset> <!-- 此处设置字符集 --> |
| | | </encoder> |
| | | <!-- 日志记录器的滚动策略,按日期,按大小记录 Rolling strategy of the logger, recording by date or by size.--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> |
| | | <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> |
| | | <maxFileSize>100MB</maxFileSize> |
| | | </timeBasedFileNamingAndTriggeringPolicy> |
| | | <!--日志文档保留天数--> |
| | | <maxHistory>15</maxHistory> |
| | | </rollingPolicy> |
| | | <!-- 此日志文档只记录ERROR级别的 --> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>ERROR</level> |
| | | <onMatch>ACCEPT</onMatch> |
| | | <onMismatch>DENY</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | |
| | | <!-- 2.5 所有 除了DEBUG级别的其它高于DEBUG的 日志,记录到一个文件 --> |
| | | <appender name="ALL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <!-- 正在记录的日志文档的路径及文档名 --> |
| | | <file>${log.path}/${artifactId}/all.log</file> |
| | | <!--日志文档输出格式 Output format of the log document.--> |
| | | <encoder> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | <charset>UTF-8</charset> <!-- 此处设置字符集 --> |
| | | </encoder> |
| | | <!-- 日志记录器的滚动策略,按日期,按大小记录 Rolling strategy of the logger, recording by date or by size.--> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/all-%d{yyyy-MM-dd}.%i.log</fileNamePattern> |
| | | <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> |
| | | <maxFileSize>100MB</maxFileSize> |
| | | </timeBasedFileNamingAndTriggeringPolicy> |
| | | <!--日志文档保留天数--> |
| | | <maxHistory>15</maxHistory> |
| | | </rollingPolicy> |
| | | <!-- 此日志文档记录除了DEBUG级别的其它高于DEBUG的 --> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <level>DEBUG</level> |
| | | <onMatch>DENY</onMatch> |
| | | <onMismatch>ACCEPT</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | |
| | | <!-- |
| | | <logger>用来设置某一个包或者具体的某一个类的日志打印级别、 |
| | | 以及指定<appender>。<logger>仅有一个name属性, |
| | | 一个可选的level和一个可选的addtivity属性。 |
| | | name:用来指定受此logger约束的某一个包或者具体的某一个类。 |
| | | level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, |
| | | 还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。 |
| | | 如果未设置此属性,那么当前logger将会继承上级的级别。 |
| | | addtivity:是否向上级logger传递打印信息。默认是true。 |
| | | <logger name="org.springframework.web" level="info"/> |
| | | <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/> |
| | | --> |
| | | |
| | | <!-- |
| | | root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 |
| | | level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, |
| | | 不能设置为INHERITED或者同义词NULL。默认是DEBUG |
| | | 可以包含零个或多个元素,标识这个appender将会添加到这个logger。 |
| | | --> |
| | | |
| | | <!-- 4 最终的策略: |
| | | 基本策略(root级) + 根据profile在启动时, logger标签中定制化package日志级别(优先级高于上面的root级)--> |
| | | <springProfile name="dev"> |
| | | <root level="info"> |
| | | <appender-ref ref="CONSOLE" /> |
| | | <appender-ref ref="DEBUG_FILE" /> |
| | | <appender-ref ref="INFO_FILE" /> |
| | | <appender-ref ref="WARN_FILE" /> |
| | | <appender-ref ref="ERROR_FILE" /> |
| | | <appender-ref ref="ALL_FILE" /> |
| | | </root> |
| | | <logger name="com.dsh" level="debug"/> |
| | | <logger name="business-log" level="warn"/> |
| | | </springProfile> |
| | | |
| | | <springProfile name="fat"> |
| | | <root level="info"> |
| | | <appender-ref ref="CONSOLE" /> |
| | | <appender-ref ref="DEBUG_FILE" /> |
| | | <appender-ref ref="INFO_FILE" /> |
| | | <appender-ref ref="WARN_FILE" /> |
| | | <appender-ref ref="ERROR_FILE" /> |
| | | <appender-ref ref="ALL_FILE" /> |
| | | </root> |
| | | <logger name="com.dsh.course.mapper" level="error"/> |
| | | <logger name="business-log" level="warn"/> |
| | | </springProfile> |
| | | |
| | | <springProfile name="prod"> |
| | | <root level="warn"> |
| | | <!-- 生产环境最好不配置console写文件 --> |
| | | <appender-ref ref="DEBUG_FILE" /> |
| | | <appender-ref ref="INFO_FILE" /> |
| | | <appender-ref ref="WARN_FILE" /> |
| | | <appender-ref ref="ERROR_FILE" /> |
| | | <appender-ref ref="ALL_FILE" /> |
| | | </root> |
| | | <logger name="com.dsh.course.mapper" level="error"/> |
| | | <logger name="business-log" level="warn"/> |
| | | </springProfile> |
| | | |
| | | </configuration> |
New file |
| | |
| | | spring.redis.database=0 |
| | | # Redis·þÎñÆ÷µØÖ· |
| | | spring.redis.host=@redis.addr@ |
| | | # Redis·þÎñÆ÷Á¬½Ó¶Ë¿Ú |
| | | spring.redis.port=@redis.port@ |
| | | # Redis·þÎñÆ÷Á¬½ÓÃÜÂ루ĬÈÏΪ¿Õ£© |
| | | spring.redis.password=@redis.password@ |
| | | spring.redis.jedis.pool.max-active=1024 |
| | | spring.redis.jedis.pool.max-wait=10000 |
| | | spring.redis.jedis.pool.max-idle=200 |
| | | spring.redis.jedis.pool.min-idle=50 |
| | | spring.redis.timeout=10000 |
| | | spring.redis.block-when-exhausted=true |
| | |
| | | Subproject commit ec83f41684c6e3f434d1cef1d106212505b8d1b0 |
| | | Subproject commit d2590ca908ebc50eaf7d8cb621bdec4157142fd3 |
New file |
| | |
| | | Apache License |
| | | Version 2.0, January 2004 |
| | | http://www.apache.org/licenses/ |
| | | |
| | | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION |
| | | |
| | | 1. Definitions. |
| | | |
| | | "License" shall mean the terms and conditions for use, reproduction, |
| | | and distribution as defined by Sections 1 through 9 of this document. |
| | | |
| | | "Licensor" shall mean the copyright owner or entity authorized by |
| | | the copyright owner that is granting the License. |
| | | |
| | | "Legal Entity" shall mean the union of the acting entity and all |
| | | other entities that control, are controlled by, or are under common |
| | | control with that entity. For the purposes of this definition, |
| | | "control" means (properties) the power, direct or indirect, to cause the |
| | | direction or management of such entity, whether by contract or |
| | | otherwise, or (ii) ownership of fifty percent (50%) or more of the |
| | | outstanding shares, or (iii) beneficial ownership of such entity. |
| | | |
| | | "You" (or "Your") shall mean an individual or Legal Entity |
| | | exercising permissions granted by this License. |
| | | |
| | | "Source" form shall mean the preferred form for making modifications, |
| | | including but not limited to software source code, documentation |
| | | source, and configuration files. |
| | | |
| | | "Object" form shall mean any form resulting from mechanical |
| | | transformation or translation of a Source form, including but |
| | | not limited to compiled object code, generated documentation, |
| | | and conversions to other media types. |
| | | |
| | | "Work" shall mean the work of authorship, whether in Source or |
| | | Object form, made available under the License, as indicated by a |
| | | copyright notice that is included in or attached to the work |
| | | (an example is provided in the Appendix below). |
| | | |
| | | "Derivative Works" shall mean any work, whether in Source or Object |
| | | form, that is based on (or derived from) the Work and for which the |
| | | editorial revisions, annotations, elaborations, or other modifications |
| | | represent, as a whole, an original work of authorship. For the purposes |
| | | of this License, Derivative Works shall not include works that remain |
| | | separable from, or merely link (or bind by name) to the interfaces of, |
| | | the Work and Derivative Works thereof. |
| | | |
| | | "Contribution" shall mean any work of authorship, including |
| | | the original version of the Work and any modifications or additions |
| | | to that Work or Derivative Works thereof, that is intentionally |
| | | submitted to Licensor for inclusion in the Work by the copyright owner |
| | | or by an individual or Legal Entity authorized to submit on behalf of |
| | | the copyright owner. For the purposes of this definition, "submitted" |
| | | means any form of electronic, verbal, or written communication sent |
| | | to the Licensor or its representatives, including but not limited to |
| | | communication on electronic mailing lists, source code control systems, |
| | | and issue tracking systems that are managed by, or on behalf of, the |
| | | Licensor for the purpose of discussing and improving the Work, but |
| | | excluding communication that is conspicuously marked or otherwise |
| | | designated in writing by the copyright owner as "Not a Contribution." |
| | | |
| | | "Contributor" shall mean Licensor and any individual or Legal Entity |
| | | on behalf of whom a Contribution has been received by Licensor and |
| | | subsequently incorporated within the Work. |
| | | |
| | | 2. Grant of Copyright License. Subject to the terms and conditions of |
| | | this License, each Contributor hereby grants to You a perpetual, |
| | | worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
| | | copyright license to reproduce, prepare Derivative Works of, |
| | | publicly display, publicly perform, sublicense, and distribute the |
| | | Work and such Derivative Works in Source or Object form. |
| | | |
| | | 3. Grant of Patent License. Subject to the terms and conditions of |
| | | this License, each Contributor hereby grants to You a perpetual, |
| | | worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
| | | (except as stated in this section) patent license to make, have made, |
| | | use, offer to sell, sell, import, and otherwise transfer the Work, |
| | | where such license applies only to those patent claims licensable |
| | | by such Contributor that are necessarily infringed by their |
| | | Contribution(s) alone or by combination of their Contribution(s) |
| | | with the Work to which such Contribution(s) was submitted. If You |
| | | institute patent litigation against any entity (including a |
| | | cross-claim or counterclaim in a lawsuit) alleging that the Work |
| | | or a Contribution incorporated within the Work constitutes direct |
| | | or contributory patent infringement, then any patent licenses |
| | | granted to You under this License for that Work shall terminate |
| | | as of the date such litigation is filed. |
| | | |
| | | 4. Redistribution. You may reproduce and distribute copies of the |
| | | Work or Derivative Works thereof in any medium, with or without |
| | | modifications, and in Source or Object form, provided that You |
| | | meet the following conditions: |
| | | |
| | | (a) You must give any other recipients of the Work or |
| | | Derivative Works a copy of this License; and |
| | | |
| | | (b) You must cause any modified files to carry prominent notices |
| | | stating that You changed the files; and |
| | | |
| | | (c) You must retain, in the Source form of any Derivative Works |
| | | that You distribute, all copyright, patent, trademark, and |
| | | attribution notices from the Source form of the Work, |
| | | excluding those notices that do not pertain to any part of |
| | | the Derivative Works; and |
| | | |
| | | (d) If the Work includes a "NOTICE" text file as part of its |
| | | distribution, then any Derivative Works that You distribute must |
| | | include a readable copy of the attribution notices contained |
| | | within such NOTICE file, excluding those notices that do not |
| | | pertain to any part of the Derivative Works, in at least one |
| | | of the following places: within a NOTICE text file distributed |
| | | as part of the Derivative Works; within the Source form or |
| | | documentation, if provided along with the Derivative Works; or, |
| | | within a display generated by the Derivative Works, if and |
| | | wherever such third-party notices normally appear. The contents |
| | | of the NOTICE file are for informational purposes only and |
| | | do not modify the License. You may add Your own attribution |
| | | notices within Derivative Works that You distribute, alongside |
| | | or as an addendum to the NOTICE text from the Work, provided |
| | | that such additional attribution notices cannot be construed |
| | | as modifying the License. |
| | | |
| | | You may add Your own copyright statement to Your modifications and |
| | | may provide additional or different license terms and conditions |
| | | for use, reproduction, or distribution of Your modifications, or |
| | | for any such Derivative Works as a whole, provided Your use, |
| | | reproduction, and distribution of the Work otherwise complies with |
| | | the conditions stated in this License. |
| | | |
| | | 5. Submission of Contributions. Unless You explicitly state otherwise, |
| | | any Contribution intentionally submitted for inclusion in the Work |
| | | by You to the Licensor shall be under the terms and conditions of |
| | | this License, without any additional terms or conditions. |
| | | Notwithstanding the above, nothing herein shall supersede or modify |
| | | the terms of any separate license agreement you may have executed |
| | | with Licensor regarding such Contributions. |
| | | |
| | | 6. Trademarks. This License does not grant permission to use the trade |
| | | names, trademarks, service marks, or product names of the Licensor, |
| | | except as required for reasonable and customary use in describing the |
| | | origin of the Work and reproducing the content of the NOTICE file. |
| | | |
| | | 7. Disclaimer of Warranty. Unless required by applicable law or |
| | | agreed to in writing, Licensor provides the Work (and each |
| | | Contributor provides its Contributions) on an "AS IS" BASIS, |
| | | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
| | | implied, including, without limitation, any warranties or conditions |
| | | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A |
| | | PARTICULAR PURPOSE. You are solely responsible for determining the |
| | | appropriateness of using or redistributing the Work and assume any |
| | | risks associated with Your exercise of permissions under this License. |
| | | |
| | | 8. Limitation of Liability. In no event and under no legal theory, |
| | | whether in tort (including negligence), contract, or otherwise, |
| | | unless required by applicable law (such as deliberate and grossly |
| | | negligent acts) or agreed to in writing, shall any Contributor be |
| | | liable to You for damages, including any direct, indirect, special, |
| | | incidental, or consequential damages of any character arising as a |
| | | result of this License or out of the use or inability to use the |
| | | Work (including but not limited to damages for loss of goodwill, |
| | | work stoppage, computer failure or malfunction, or any and all |
| | | other commercial damages or losses), even if such Contributor |
| | | has been advised of the possibility of such damages. |
| | | |
| | | 9. Accepting Warranty or Additional Liability. While redistributing |
| | | the Work or Derivative Works thereof, You may choose to offer, |
| | | and charge a fee for, acceptance of support, warranty, indemnity, |
| | | or other liability obligations and/or rights consistent with this |
| | | License. However, in accepting such obligations, You may act only |
| | | on Your own behalf and on Your sole responsibility, not on behalf |
| | | of any other Contributor, and only if You agree to indemnify, |
| | | defend, and hold each Contributor harmless for any liability |
| | | incurred by, or claims asserted against, such Contributor by reason |
| | | of your accepting any such warranty or additional liability. |
| | | |
| | | END OF TERMS AND CONDITIONS |
| | | |
| | | APPENDIX: How to apply the Apache License to your work. |
| | | |
| | | To apply the Apache License to your work, attach the following |
| | | boilerplate notice, with the fields enclosed by brackets "[]" |
| | | replaced with your own identifying information. (Don't include |
| | | the brackets!) The text should be enclosed in the appropriate |
| | | comment syntax for the file format. We also recommend that a |
| | | file or class name and description of purpose be included on the |
| | | same "printed page" as the copyright notice for easier |
| | | identification within third-party archives. |
| | | |
| | | Copyright [yyyy] [name of copyright owner] |
| | | |
| | | Licensed under the Apache License, Version 2.0 (the "License"); |
| | | you may not use this file except in compliance with the License. |
| | | You may obtain a copy of the License at |
| | | |
| | | http://www.apache.org/licenses/LICENSE-2.0 |
| | | |
| | | Unless required by applicable law or agreed to in writing, software |
| | | distributed under the License is distributed on an "AS IS" BASIS, |
| | | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | See the License for the specific language governing permissions and |
| | | limitations under the License. |
| | | |
| | | ------ |
| | | This product has a bundle logback, which is available under the EPL v1.0 License. |
| | | The source code of logback can be found at https://github.com/qos-ch/logback. |
| | | |
| | | Logback LICENSE |
| | | --------------- |
| | | |
| | | Logback: the reliable, generic, fast and flexible logging framework. |
| | | Copyright (C) 1999-2015, QOS.ch. All rights reserved. |
| | | |
| | | This program and the accompanying materials are dual-licensed under |
| | | either the terms of the Eclipse Public License v1.0 as published by |
| | | the Eclipse Foundation |
| | | |
| | | or (per the licensee's choosing) |
| | | |
| | | under the terms of the GNU Lesser General Public License version 2.1 |
| | | as published by the Free Software Foundation. |
| | | |
| | | ------ |
| | | This product has a bundle slf4j, which is available under the MIT License. |
| | | The source code of slf4j can be found at https://github.com/qos-ch/slf4j. |
| | | |
| | | Copyright (c) 2004-2017 QOS.ch |
| | | All rights reserved. |
| | | |
| | | Permission is hereby granted, free of charge, to any person obtaining |
| | | a copy of this software and associated documentation files (the |
| | | "Software"), to deal in the Software without restriction, including |
| | | without limitation the rights to use, copy, modify, merge, publish, |
| | | distribute, sublicense, and/or sell copies of the Software, and to |
| | | permit persons to whom the Software is furnished to do so, subject to |
| | | the following conditions: |
| | | |
| | | The above copyright notice and this permission notice shall be |
| | | included in all copies or substantial portions of the Software. |
| | | |
| | | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| | | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| | | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| | | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
| | | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
| | | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
| | | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| | | |
| | | ------ |
| | | This product has a bundle javassist, which is available under the ASL2 License. |
| | | The source code of javassist can be found at https://github.com/jboss-javassist/javassist. |
| | | |
| | | Copyright (C) 1999- by Shigeru Chiba, All rights reserved. |
| | | |
| | | Javassist (JAVA programming ASSISTant) makes Java bytecode manipulation simple. |
| | | It is a class library for editing bytecodes in Java; it enables Java programs to define a new class |
| | | at runtime and to modify a class file when the JVM loads it. Unlike other similar bytecode editors, |
| | | Javassist provides two levels of API: source level and bytecode level. If the users use the source- level API, |
| | | they can edit a class file without knowledge of the specifications of the Java bytecode. |
| | | The whole API is designed with only the vocabulary of the Java language. |
| | | You can even specify inserted bytecode in the form of source text; Javassist compiles it on the fly. |
| | | On the other hand, the bytecode-level API allows the users to directly edit a class file as other editors. |
| | | |
| | | This software is distributed under the Mozilla Public License Version 1.1, |
| | | the GNU Lesser General Public License Version 2.1 or later, or the Apache License Version 2.0. |
| | | |
| | | ------ |
| | | This product has a bundle jna, which is available under the ASL2 License. |
| | | The source code of jna can be found at https://github.com/java-native-access/jna. |
| | | |
| | | This copy of JNA is licensed under the |
| | | Apache (Software) License, version 2.0 ("the License"). |
| | | See the License for details about distribution rights, and the |
| | | specific rights regarding derivate works. |
| | | |
| | | You may obtain a copy of the License at: |
| | | |
| | | http://www.apache.org/licenses/ |
| | | |
| | | A copy is also included in the downloadable source code package |
| | | containing JNA, in file "AL2.0", under the same directory |
| | | as this file. |
| | | ------ |
| | | This product has a bundle guava, which is available under the ASL2 License. |
| | | The source code of guava can be found at https://github.com/google/guava. |
| | | |
| | | Copyright (C) 2007 The Guava authors |
| | | |
| | | Licensed under the Apache License, Version 2.0 (the "License"); |
| | | you may not use this file except in compliance with the License. |
| | | You may obtain a copy of the License at |
| | | |
| | | http://www.apache.org/licenses/LICENSE-2.0 |
| | | |
| | | Unless required by applicable law or agreed to in writing, software |
| | | distributed under the License is distributed on an "AS IS" BASIS, |
| | | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | See the License for the specific language governing permissions and |
| | | limitations under the License. |
| | | ------ |
| | | This product has a bundle OpenMessaging, which is available under the ASL2 License. |
| | | The source code of OpenMessaging can be found at https://github.com/openmessaging/openmessaging. |
| | | |
| | | Copyright (C) 2017 The OpenMessaging authors. |
| | | |
| | | Licensed under the Apache License, Version 2.0 (the "License"); |
| | | you may not use this file except in compliance with the License. |
| | | You may obtain a copy of the License at |
| | | |
| | | http://www.apache.org/licenses/LICENSE-2.0 |
| | | |
| | | Unless required by applicable law or agreed to in writing, software |
| | | distributed under the License is distributed on an "AS IS" BASIS, |
| | | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | See the License for the specific language governing permissions and |
| | | limitations under the License. |
| | | |
New file |
| | |
| | | Nacos |
| | | Copyright 2018-2019 The Apache Software Foundation |
| | | |
| | | This product includes software developed at |
| | | The Alibaba MiddleWare Group. |
| | | |
| | | ------ |
| | | This product has a bundle netty: |
| | | The Spring oot Project |
| | | ================= |
| | | |
| | | Please visit the Netty web site for more information: |
| | | |
| | | * http://netty.io/ |
| | | |
| | | Copyright 2014 The Netty Project |
| | | |
| | | The Netty Project licenses this file to you under the Apache License, |
| | | version 2.0 (the "License"); you may not use this file except in compliance |
| | | with the License. You may obtain a copy of the License at: |
| | | |
| | | http://www.apache.org/licenses/LICENSE-2.0 |
| | | |
| | | Unless required by applicable law or agreed to in writing, software |
| | | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| | | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| | | License for the specific language governing permissions and limitations |
| | | under the License. |
| | | |
| | | Also, please refer to each LICENSE.<component>.txt file, which is located in |
| | | the 'license' directory of the distribution file, for the license terms of the |
| | | components that this product depends on. |
| | | |
| | | ------ |
| | | This product has a bundle commons-lang, which includes software from the Spring Framework, |
| | | under the Apache License 2.0 (see: StringUtils.containsWhitespace()) |
New file |
| | |
| | | ---------------------------------------------------------------- |
| | | Tue Jun 13 20:11:33 CST 2023: |
| | | Booting Derby version The Apache Software Foundation - Apache Derby - 10.14.2.0 - (1828579): instance a816c00e-0188-b4ab-2010-000019a79e60 |
| | | on database directory E:\IDEA Workspaces\PlayPai\nacos\data\derby-data with class loader org.springframework.boot.loader.LaunchedURLClassLoader@26a1ab54 |
| | | Loaded from jar:file:/E:/IDEA%20Workspaces/PlayPai/nacos/target/nacos-server.jar!/BOOT-INF/lib/derby-10.14.2.0.jar!/ |
| | | java.vendor=Oracle Corporation |
| | | java.runtime.version=1.8.0_151-b12 |
| | | user.dir=E:\IDEA Workspaces\PlayPai\nacos\bin |
| | | os.name=Windows 10 |
| | | os.arch=amd64 |
| | | os.version=10.0 |
| | | derby.system.home=null |
| | | Database Class Loader started - derby.database.classpath='' |
New file |
| | |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos HTTP/1.1" 302 - 0 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/ HTTP/1.1" 200 2780 54 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/css/bootstrap.css HTTP/1.1" 200 123294 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/css/console1412.css HTTP/1.1" 200 156959 9 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/css/font-awesome.css HTTP/1.1" 200 33850 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/css/icon.css HTTP/1.1" 200 5176 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/css/codemirror.css HTTP/1.1" 200 8858 7 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/css/main.css?04818f5ec59842280923 HTTP/1.1" 200 473259 6 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/css/merge.css HTTP/1.1" 200 3866 9 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/jquery.js HTTP/1.1" 200 89476 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/xml.js HTTP/1.1" 200 13059 7 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/codemirror.js HTTP/1.1" 200 366246 11 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/javascript.js HTTP/1.1" 200 32209 10 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/codemirror.addone.lint.js HTTP/1.1" 200 8521 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/codemirror.addone.json-lint.js HTTP/1.1" 200 1443 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/codemirror.lib.json-lint.js HTTP/1.1" 200 16798 6 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/codemirror.addone.fullscreen.js HTTP/1.1" 200 1983 11 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/codemirror.lib.clike-lint.js HTTP/1.1" 200 31531 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/loader.js HTTP/1.1" 200 28899 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/merge.js HTTP/1.1" 200 37883 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/diff_match_patch.js HTTP/1.1" 200 19192 7 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/js/main.js?04818f5ec59842280923 HTTP/1.1" 200 1534009 14 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/vs/editor/editor.main.js HTTP/1.1" 200 1824087 20 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/img/logo-2000-390.svg HTTP/1.1" 200 2106 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/v1/console/server/state?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 82 19 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/icons/icon-font.woff2 HTTP/1.1" 200 4368 7 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId=5e1ecee8-cc8f-4bd2-9357-3ff17515f213 HTTP/1.1" 200 151 36 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/vs/editor/editor.main.css HTTP/1.1" 200 172199 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 76 38 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/vs/editor/editor.main.nls.zh-cn.js HTTP/1.1" 200 22864 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/img/nacos-logo.png HTTP/1.1" 200 1529 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:11:55 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId= HTTP/1.1" 200 151 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:12:06 +0800] "GET /nacos/v1/console/namespaces?checkNamespaceIdExist=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&customNamespaceId=&namespaceId= HTTP/1.1" 200 15 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:12:06 +0800] "POST /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 17 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:12:06 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId= HTTP/1.1" 200 299 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:12:08 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId= HTTP/1.1" 200 299 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:12:53 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 76 6 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:12:55 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 76 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:13:34 +0800] "POST /nacos/v1/cs/configs?import=true&namespace=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 85 83 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:13:34 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 13972 33 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:13:46 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-image.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 39 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:13:46 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 11400 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:13:51 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-job-admin.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 11 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:13:51 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8923 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:13:55 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-upms.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 15 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:13:55 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 7463 6 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:13:58 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:13:58 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 2951 17 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:13:58 +0800] "GET /nacos/console-ui/public/js/vs/base/worker/workerMain.js HTTP/1.1" 200 151535 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:13:58 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-gateway.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 216 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:13:58 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-gateway.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 241 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:14:14 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 23 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:14:14 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 2810 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:34:22 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 7 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:34:22 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 2551 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:34:25 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 7068 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:04 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 217 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:05 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwNH0.nDaObfgEtWYnFlsQwhyskZDYSi4Kt-CLEoMrOC1jB-s HTTP/1.1" 200 2092 6 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:05 +0800] "GET /nacos/v1/cs/configs?dataId=application.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwNH0.nDaObfgEtWYnFlsQwhyskZDYSi4Kt-CLEoMrOC1jB-s HTTP/1.1" 200 1879 3 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:05 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwNH0.nDaObfgEtWYnFlsQwhyskZDYSi4Kt-CLEoMrOC1jB-s HTTP/1.1" 404 23 2 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:05 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwNH0.nDaObfgEtWYnFlsQwhyskZDYSi4Kt-CLEoMrOC1jB-s HTTP/1.1" 200 2092 2 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:05 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway-dev.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwNH0.nDaObfgEtWYnFlsQwhyskZDYSi4Kt-CLEoMrOC1jB-s HTTP/1.1" 404 23 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:09 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 72 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:09 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 73 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:11 +0800] "POST /nacos/v1/ns/instance?app=unknown&metadata=%7B%22preserved.register.source%22%3A%22SPRING_CLOUD%22%7D&ip=192.168.110.80&weight=1.0&ephemeral=true&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8&groupName=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&enable=true&healthy=true&clusterName=DEFAULT HTTP/1.1" 200 2 14 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:11 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 5 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 20 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 9 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:31 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 9 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:41 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29517 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:35:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:03 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-auth.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:03 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-auth.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1420 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:03 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-auth.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 218 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:03 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-auth.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 222 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:08 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 7068 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:10 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29514 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:14 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-auth.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:14 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 5851 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:16 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:16 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1503 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:17 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-app.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 218 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:17 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 224 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:22 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 5851 10 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 6 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:24 +0800] "GET /nacos/v1/cs/configs?dataId=application.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:24 +0800] "GET /nacos/v1/cs/configs?dataId=application.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 2324 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:24 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=application.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 92 227 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:24 +0800] "GET /nacos/v1/cs/configs/listener?dataId=application.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 112 232 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:27 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 5851 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:40 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29505 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 3 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:36:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:36:59 +0800] "GET /nacos/console-ui/public/js/vs/editor/contrib/suggest/browser/media/String_inverse_16x.svg HTTP/1.1" 200 4740 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:04 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-account&group=DEFAULT_GROUP&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:04 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 6 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:04 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 6061 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:08 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:08 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1503 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:08 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-app.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 214 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:08 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 216 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:09 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29508 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:12 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 6061 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:14 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=DEFAULT_GROUP&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:14 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=DEFAULT_GROUP&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 417 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:14 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-account&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=DEFAULT_GROUP HTTP/1.1" 200 41 214 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:14 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-account&group=DEFAULT_GROUP&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 217 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:17 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 6061 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 4 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:24 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:24 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1503 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:24 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-app.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 222 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:24 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 224 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:39 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29504 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:39 +0800] "GET /nacos HTTP/1.1" 302 - 0 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:39 +0800] "GET /nacos/v1/console/server/state?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 82 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:39 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 299 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:40 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 76 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:41 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 6061 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:46 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-account&group=DEFAULT_GROUP&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:37:46 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 5851 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:37:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 0 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 0 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:08 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29513 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 5 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:38 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29508 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 7 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:38:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:07 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29505 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:39:12 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-account&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:39:12 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:39:12 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 6713 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 4 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:37 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29505 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:39:42 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 6713 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 4 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:39:44 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:39:44 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1069 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:44 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-account&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 215 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:39:44 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 218 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:39:56 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-activity&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:39:56 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:39:56 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 7577 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:39:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:06 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29505 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 7 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 0 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:40:34 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-competition&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:40:34 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:40:34 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8453 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:36 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29505 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 4 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:40:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:05 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29501 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:41:09 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-course&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:41:09 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:41:09 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 9314 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:35 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29511 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:41:41 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-other&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:41:41 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:41:41 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 10172 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:41:50 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:41:50 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:41:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:04 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29515 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:08 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:08 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1069 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:08 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-account&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 218 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:08 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 223 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:13 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:18 +0800] "GET /nacos/ HTTP/1.1" 304 - 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:18 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 299 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:18 +0800] "GET /nacos/v1/console/server/state?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 82 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:18 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:20 +0800] "GET /nacos/ HTTP/1.1" 304 - 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:20 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 299 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:20 +0800] "GET /nacos/v1/console/server/state?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 82 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:20 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:25 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:25 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1069 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:25 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-account&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 210 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:25 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 216 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:29 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:34 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29511 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:42:38 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 11 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:42:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:43:00 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:43:00 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1061 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:00 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-other&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 220 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:43:00 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 223 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:03 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29504 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:43:05 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-other.properties&group=DEFAULT_GROUP&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:43:05 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:43:05 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 9745 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:43:10 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other.properties&group=DEFAULT_GROUP&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:43:10 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other.properties&group=DEFAULT_GROUP&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1076 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:10 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-other.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=DEFAULT_GROUP HTTP/1.1" 200 41 225 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:43:10 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-other.properties&group=DEFAULT_GROUP&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 227 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:43:14 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 9745 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:43:17 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-other.properties&group=DEFAULT_GROUP&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:43:17 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:33 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 0 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:33 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29502 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:38 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 73 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:38 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 404 23 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:38 +0800] "GET /nacos/v1/cs/configs?dataId=application.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 200 1879 2 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:38 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 200 653 2 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:38 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 404 23 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:38 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account-dev.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 404 23 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:42 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 65 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:42 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 65 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:43 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:44 +0800] "POST /nacos/v1/ns/instance?app=mb-cloud-account&metadata=%7B%22preserved.register.source%22%3A%22SPRING_CLOUD%22%7D&ip=192.168.110.80&weight=1.0&ephemeral=true&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8&groupName=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&enable=true&healthy=true&clusterName=DEFAULT HTTP/1.1" 200 2 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:44 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:49 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:53 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 5 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:54 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:43:59 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:02 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29516 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:03 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 4 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:04 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:09 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:13 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:14 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:14 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29513 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:19 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 0 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:23 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:24 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:29 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:32 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29505 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:33 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 3 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:34 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:39 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:43 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:44 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29529 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:44 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:49 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:44:50 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:44:50 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1061 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:50 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-other&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 216 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:44:50 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 220 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:53 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:54 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:44:56 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:44:56 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1043 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:44:59 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8859 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:44:59 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:00 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-course&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:00 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-course&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1063 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:00 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-course&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 214 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:00 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-course&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 219 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:01 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29504 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:03 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:04 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:05 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:05 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-course&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1045 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:07 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8846 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:09 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-competition&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:09 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-competition&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1077 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:09 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:09 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-competition&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 214 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:09 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-competition&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 216 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:13 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:13 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29515 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:14 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:14 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:14 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-competition&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1061 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:16 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8833 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:18 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-activity&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:18 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-activity&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1071 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:18 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-activity&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 224 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:18 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-activity&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 226 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:19 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:23 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:23 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:23 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-activity&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1055 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:24 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:26 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8820 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:27 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:27 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1069 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:28 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-account&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 92 223 Java/1.8.0_151 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:28 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 112 224 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:29 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:31 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29508 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:32 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:32 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1053 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:32 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 72 19301 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:32 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 200 648 2 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:33 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:33 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 404 23 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:33 +0800] "GET /nacos/v1/cs/configs?dataId=application.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 200 1879 2 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:33 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 200 648 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:33 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 404 23 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:33 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account-dev.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 404 23 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:34 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 127.0.0.1 - - [13/Jun/2023:20:45:35 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8807 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:39 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:43 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:44 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:49 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:53 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:54 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 65 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:54 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1NH0.KCMf-yUxSuOnBc5LEU2_Fu_Bz4DVgAoZs-kxNXdtt80 HTTP/1.1" 404 23 0 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:54 +0800] "GET /nacos/v1/cs/configs?dataId=application.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1NH0.KCMf-yUxSuOnBc5LEU2_Fu_Bz4DVgAoZs-kxNXdtt80 HTTP/1.1" 200 1879 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:54 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1NH0.KCMf-yUxSuOnBc5LEU2_Fu_Bz4DVgAoZs-kxNXdtt80 HTTP/1.1" 200 648 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:55 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1NH0.KCMf-yUxSuOnBc5LEU2_Fu_Bz4DVgAoZs-kxNXdtt80 HTTP/1.1" 404 23 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:55 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account-dev.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1NH0.KCMf-yUxSuOnBc5LEU2_Fu_Bz4DVgAoZs-kxNXdtt80 HTTP/1.1" 404 23 1 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:58 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 65 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:58 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 66 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:45:59 +0800] "POST /nacos/v1/ns/instance?app=mb-cloud-account&metadata=%7B%22preserved.register.source%22%3A%22SPRING_CLOUD%22%7D&ip=192.168.110.80&weight=1.0&ephemeral=true&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8&groupName=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&enable=true&healthy=true&clusterName=DEFAULT HTTP/1.1" 200 2 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:00 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 2 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:00 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29501 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:03 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:03 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 500 - 29509 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:04 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:09 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:13 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 3 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:14 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 4 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:19 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:23 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:24 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:29 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:30 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29516 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:30 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29515 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:33 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:34 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 0 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:39 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 0 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:43 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:44 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:50 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:53 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:55 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:59 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29502 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:46:59 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29502 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:47:00 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:47:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:47:03 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:47:05 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:47:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:47:10 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:47:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:47:13 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:47:15 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:47:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:47:29 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 500 - 29515 Java/1.8.0_151 - |
| | | 192.168.110.80 - - [13/Jun/2023:20:47:29 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 500 - 29516 Java/1.8.0_151 - |
New file |
| | |
| | | @echo off |
| | | rem Copyright 1999-2018 Alibaba Group Holding Ltd. |
| | | rem Licensed under the Apache License, Version 2.0 (the "License"); |
| | | rem you may not use this file except in compliance with the License. |
| | | rem You may obtain a copy of the License at |
| | | rem |
| | | rem http://www.apache.org/licenses/LICENSE-2.0 |
| | | rem |
| | | rem Unless required by applicable law or agreed to in writing, software |
| | | rem distributed under the License is distributed on an "AS IS" BASIS, |
| | | rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | rem See the License for the specific language governing permissions and |
| | | rem limitations under the License. |
| | | if not exist "%JAVA_HOME%\bin\jps.exe" echo Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! & EXIT /B 1 |
| | | |
| | | setlocal |
| | | |
| | | set "PATH=%JAVA_HOME%\bin;%PATH%" |
| | | |
| | | echo killing nacos server |
| | | |
| | | for /f "tokens=1" %%i in ('jps -m ^| find "nacos.nacos"') do ( taskkill /F /PID %%i ) |
| | | |
| | | echo Done! |
New file |
| | |
| | | #!/bin/bash |
| | | |
| | | # Copyright 1999-2018 Alibaba Group Holding Ltd. |
| | | # Licensed under the Apache License, Version 2.0 (the "License"); |
| | | # you may not use this file except in compliance with the License. |
| | | # You may obtain a copy of the License at |
| | | |
| | | # http://www.apache.org/licenses/LICENSE-2.0 |
| | | # |
| | | # Unless required by applicable law or agreed to in writing, software |
| | | # distributed under the License is distributed on an "AS IS" BASIS, |
| | | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | # See the License for the specific language governing permissions and |
| | | # limitations under the License. |
| | | cd `dirname $0`/../target |
| | | target_dir=`pwd` |
| | | |
| | | pid=`ps ax | grep -i 'nacos.nacos' | grep ${target_dir} | grep java | grep -v grep | awk '{print $1}'` |
| | | if [ -z "$pid" ] ; then |
| | | echo "No nacosServer running." |
| | | exit -1; |
| | | fi |
| | | |
| | | echo "The nacosServer(${pid}) is running..." |
| | | |
| | | kill ${pid} |
| | | |
| | | echo "Send shutdown request to nacosServer(${pid}) OK" |
New file |
| | |
| | | @echo off |
| | | rem Copyright 1999-2018 Alibaba Group Holding Ltd. |
| | | rem Licensed under the Apache License, Version 2.0 (the "License"); |
| | | rem you may not use this file except in compliance with the License. |
| | | rem You may obtain a copy of the License at |
| | | rem |
| | | rem http://www.apache.org/licenses/LICENSE-2.0 |
| | | rem |
| | | rem Unless required by applicable law or agreed to in writing, software |
| | | rem distributed under the License is distributed on an "AS IS" BASIS, |
| | | rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | rem See the License for the specific language governing permissions and |
| | | rem limitations under the License. |
| | | if not exist "%JAVA_HOME%\bin\java.exe" echo Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! & EXIT /B 1 |
| | | set "JAVA=%JAVA_HOME%\bin\java.exe" |
| | | |
| | | setlocal enabledelayedexpansion |
| | | |
| | | set BASE_DIR=%~dp0 |
| | | rem added double quotation marks to avoid the issue caused by the folder names containing spaces. |
| | | rem removed the last 5 chars(which means \bin\) to get the base DIR. |
| | | set BASE_DIR="%BASE_DIR:~0,-5%" |
| | | |
| | | set CUSTOM_SEARCH_LOCATIONS=file:%BASE_DIR%/conf/ |
| | | |
| | | set MODE="cluster" |
| | | set FUNCTION_MODE="all" |
| | | set SERVER=nacos-server |
| | | set MODE_INDEX=-1 |
| | | set FUNCTION_MODE_INDEX=-1 |
| | | set SERVER_INDEX=-1 |
| | | set EMBEDDED_STORAGE_INDEX=-1 |
| | | set EMBEDDED_STORAGE="" |
| | | |
| | | |
| | | set i=0 |
| | | for %%a in (%*) do ( |
| | | if "%%a" == "-m" ( set /a MODE_INDEX=!i!+1 ) |
| | | if "%%a" == "-f" ( set /a FUNCTION_MODE_INDEX=!i!+1 ) |
| | | if "%%a" == "-s" ( set /a SERVER_INDEX=!i!+1 ) |
| | | if "%%a" == "-p" ( set /a EMBEDDED_STORAGE_INDEX=!i!+1 ) |
| | | set /a i+=1 |
| | | ) |
| | | |
| | | set i=0 |
| | | for %%a in (%*) do ( |
| | | if %MODE_INDEX% == !i! ( set MODE="%%a" ) |
| | | if %FUNCTION_MODE_INDEX% == !i! ( set FUNCTION_MODE="%%a" ) |
| | | if %SERVER_INDEX% == !i! (set SERVER="%%a") |
| | | if %EMBEDDED_STORAGE_INDEX% == !i! (set EMBEDDED_STORAGE="%%a") |
| | | set /a i+=1 |
| | | ) |
| | | |
| | | rem if nacos startup mode is standalone |
| | | if %MODE% == "standalone" ( |
| | | echo "nacos is starting with standalone" |
| | | set "NACOS_OPTS=-Dnacos.standalone=true" |
| | | set "NACOS_JVM_OPTS=-Xms512m -Xmx512m -Xmn256m" |
| | | ) |
| | | |
| | | rem if nacos startup mode is cluster |
| | | if %MODE% == "cluster" ( |
| | | echo "nacos is starting with cluster" |
| | | if %EMBEDDED_STORAGE% == "embedded" ( |
| | | set "NACOS_OPTS=-DembeddedStorage=true" |
| | | ) |
| | | |
| | | set "NACOS_JVM_OPTS=-server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof -XX:-UseLargePages" |
| | | ) |
| | | |
| | | rem set nacos's functionMode |
| | | if %FUNCTION_MODE% == "config" ( |
| | | set "NACOS_OPTS=%NACOS_OPTS% -Dnacos.functionMode=config" |
| | | ) |
| | | |
| | | if %FUNCTION_MODE% == "naming" ( |
| | | set "NACOS_OPTS=%NACOS_OPTS% -Dnacos.functionMode=naming" |
| | | ) |
| | | |
| | | rem set nacos options |
| | | set "NACOS_OPTS=%NACOS_OPTS% -Dloader.path=%BASE_DIR%/plugins/health,%BASE_DIR%/plugins/cmdb,%BASE_DIR%/plugins/selector" |
| | | set "NACOS_OPTS=%NACOS_OPTS% -Dnacos.home=%BASE_DIR%" |
| | | set "NACOS_OPTS=%NACOS_OPTS% -jar %BASE_DIR%\target\%SERVER%.jar" |
| | | |
| | | rem set nacos spring config location |
| | | set "NACOS_CONFIG_OPTS=--spring.config.additional-location=%CUSTOM_SEARCH_LOCATIONS%" |
| | | |
| | | rem set nacos log4j file location |
| | | set "NACOS_LOG4J_OPTS=--logging.config=%BASE_DIR%/conf/nacos-logback.xml" |
| | | |
| | | |
| | | set COMMAND="%JAVA%" %NACOS_JVM_OPTS% %NACOS_OPTS% %NACOS_CONFIG_OPTS% %NACOS_LOG4J_OPTS% nacos.nacos %* |
| | | |
| | | rem start nacos command |
| | | %COMMAND% |
New file |
| | |
| | | #!/bin/bash |
| | | |
| | | # Copyright 1999-2018 Alibaba Group Holding Ltd. |
| | | # Licensed under the Apache License, Version 2.0 (the "License"); |
| | | # you may not use this file except in compliance with the License. |
| | | # You may obtain a copy of the License at |
| | | |
| | | # http://www.apache.org/licenses/LICENSE-2.0 |
| | | # |
| | | # Unless required by applicable law or agreed to in writing, software |
| | | # distributed under the License is distributed on an "AS IS" BASIS, |
| | | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | # See the License for the specific language governing permissions and |
| | | # limitations under the License. |
| | | |
| | | cygwin=false |
| | | darwin=false |
| | | os400=false |
| | | case "`uname`" in |
| | | CYGWIN*) cygwin=true;; |
| | | Darwin*) darwin=true;; |
| | | OS400*) os400=true;; |
| | | esac |
| | | error_exit () |
| | | { |
| | | echo "ERROR: $1 !!" |
| | | exit 1 |
| | | } |
| | | [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java |
| | | [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java |
| | | [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java |
| | | [ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME |
| | | |
| | | if [ -z "$JAVA_HOME" ]; then |
| | | if $darwin; then |
| | | |
| | | if [ -x '/usr/libexec/java_home' ] ; then |
| | | export JAVA_HOME=`/usr/libexec/java_home` |
| | | |
| | | elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then |
| | | export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" |
| | | fi |
| | | else |
| | | JAVA_PATH=`dirname $(readlink -f $(which javac))` |
| | | if [ "x$JAVA_PATH" != "x" ]; then |
| | | export JAVA_HOME=`dirname $JAVA_PATH 2>/dev/null` |
| | | fi |
| | | fi |
| | | if [ -z "$JAVA_HOME" ]; then |
| | | error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!" |
| | | fi |
| | | fi |
| | | |
| | | export SERVER="nacos-server" |
| | | export MODE="cluster" |
| | | export FUNCTION_MODE="all" |
| | | export MEMBER_LIST="" |
| | | export EMBEDDED_STORAGE="" |
| | | while getopts ":m:f:s:c:p:" opt |
| | | do |
| | | case $opt in |
| | | m) |
| | | MODE=$OPTARG;; |
| | | f) |
| | | FUNCTION_MODE=$OPTARG;; |
| | | s) |
| | | SERVER=$OPTARG;; |
| | | c) |
| | | MEMBER_LIST=$OPTARG;; |
| | | p) |
| | | EMBEDDED_STORAGE=$OPTARG;; |
| | | ?) |
| | | echo "Unknown parameter" |
| | | exit 1;; |
| | | esac |
| | | done |
| | | |
| | | export JAVA_HOME |
| | | export JAVA="$JAVA_HOME/bin/java" |
| | | export BASE_DIR=`cd $(dirname $0)/..; pwd` |
| | | export CUSTOM_SEARCH_LOCATIONS=file:${BASE_DIR}/conf/ |
| | | |
| | | #=========================================================================================== |
| | | # JVM Configuration |
| | | #=========================================================================================== |
| | | if [[ "${MODE}" == "standalone" ]]; then |
| | | JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m" |
| | | JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true" |
| | | else |
| | | if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then |
| | | JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true" |
| | | fi |
| | | JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" |
| | | JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof" |
| | | JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages" |
| | | |
| | | fi |
| | | |
| | | if [[ "${FUNCTION_MODE}" == "config" ]]; then |
| | | JAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=config" |
| | | elif [[ "${FUNCTION_MODE}" == "naming" ]]; then |
| | | JAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=naming" |
| | | fi |
| | | |
| | | JAVA_OPT="${JAVA_OPT} -Dnacos.member.list=${MEMBER_LIST}" |
| | | |
| | | JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p') |
| | | if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then |
| | | JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/logs/nacos_gc.log:time,tags:filecount=10,filesize=102400" |
| | | else |
| | | JAVA_OPT_EXT_FIX="-Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext" |
| | | JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M" |
| | | fi |
| | | |
| | | JAVA_OPT="${JAVA_OPT} -Dloader.path=${BASE_DIR}/plugins/health,${BASE_DIR}/plugins/cmdb,${BASE_DIR}/plugins/selector" |
| | | JAVA_OPT="${JAVA_OPT} -Dnacos.home=${BASE_DIR}" |
| | | JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/target/${SERVER}.jar" |
| | | JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}" |
| | | JAVA_OPT="${JAVA_OPT} --spring.config.additional-location=${CUSTOM_SEARCH_LOCATIONS}" |
| | | JAVA_OPT="${JAVA_OPT} --logging.config=${BASE_DIR}/conf/nacos-logback.xml" |
| | | JAVA_OPT="${JAVA_OPT} --server.max-http-header-size=524288" |
| | | |
| | | if [ ! -d "${BASE_DIR}/logs" ]; then |
| | | mkdir ${BASE_DIR}/logs |
| | | fi |
| | | |
| | | echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}" |
| | | |
| | | if [[ "${MODE}" == "standalone" ]]; then |
| | | echo "nacos is starting with standalone" |
| | | else |
| | | echo "nacos is starting with cluster" |
| | | fi |
| | | |
| | | # check the start.out log output file |
| | | if [ ! -f "${BASE_DIR}/logs/start.out" ]; then |
| | | touch "${BASE_DIR}/logs/start.out" |
| | | fi |
| | | # start |
| | | echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 & |
| | | |
| | | if [[ "$JAVA_OPT_EXT_FIX" == "" ]]; then |
| | | nohup "$JAVA" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 & |
| | | else |
| | | nohup "$JAVA" "$JAVA_OPT_EXT_FIX" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 & |
| | | fi |
| | | |
| | | echo "nacos is starting,you can check the ${BASE_DIR}/logs/start.out" |
New file |
| | |
| | | /* |
| | | * Copyright 1999-2018 Alibaba Group Holding Ltd. |
| | | * |
| | | * Licensed under the Apache License, Version 2.0 (the "License"); |
| | | * you may not use this file except in compliance with the License. |
| | | * You may obtain a copy of the License at |
| | | * |
| | | * http://www.apache.org/licenses/LICENSE-2.0 |
| | | * |
| | | * Unless required by applicable law or agreed to in writing, software |
| | | * distributed under the License is distributed on an "AS IS" BASIS, |
| | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | * See the License for the specific language governing permissions and |
| | | * limitations under the License. |
| | | */ |
| | | |
| | | ALTER TABLE `config_info_tag` |
| | | MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER `src_user`; |
| | | |
| | | ALTER TABLE `his_config_info` |
| | | MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL AFTER `src_user`; |
| | | |
| | | ALTER TABLE `config_info` |
| | | MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER `src_user`; |
| | | |
| | | ALTER TABLE `config_info_beta` |
| | | MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER `src_user`; |
New file |
| | |
| | | # |
| | | # Copyright 1999-2021 Alibaba Group Holding Ltd. |
| | | # |
| | | # Licensed under the Apache License, Version 2.0 (the "License"); |
| | | # you may not use this file except in compliance with the License. |
| | | # You may obtain a copy of the License at |
| | | # |
| | | # http://www.apache.org/licenses/LICENSE-2.0 |
| | | # |
| | | # Unless required by applicable law or agreed to in writing, software |
| | | # distributed under the License is distributed on an "AS IS" BASIS, |
| | | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | # See the License for the specific language governing permissions and |
| | | # limitations under the License. |
| | | # |
| | | |
| | | #*************** Spring Boot Related Configurations ***************# |
| | | ### Default web context path: |
| | | server.servlet.contextPath=/nacos |
| | | ### Include message field |
| | | server.error.include-message=ON_PARAM |
| | | ### Default web server port: |
| | | server.port=8848 |
| | | |
| | | #*************** Network Related Configurations ***************# |
| | | ### If prefer hostname over ip for Nacos server addresses in cluster.conf: |
| | | # nacos.inetutils.prefer-hostname-over-ip=false |
| | | |
| | | ### Specify local server's IP: |
| | | # nacos.inetutils.ip-address= |
| | | |
| | | |
| | | #*************** Config Module Related Configurations ***************# |
| | | ### If use MySQL as datasource: |
| | | # spring.datasource.platform=mysql |
| | | |
| | | ### Count of DB: |
| | | # db.num=1 |
| | | |
| | | ### Connect URL of DB: |
| | | # db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC |
| | | # db.user.0=nacos |
| | | # db.password.0=nacos |
| | | |
| | | ### Connection pool configuration: hikariCP |
| | | db.pool.config.connectionTimeout=30000 |
| | | db.pool.config.validationTimeout=10000 |
| | | db.pool.config.maximumPoolSize=20 |
| | | db.pool.config.minimumIdle=2 |
| | | |
| | | #*************** Naming Module Related Configurations ***************# |
| | | ### Data dispatch task execution period in milliseconds: Will removed on v2.1.X, replace with nacos.core.protocol.distro.data.sync.delayMs |
| | | # nacos.naming.distro.taskDispatchPeriod=200 |
| | | |
| | | ### Data count of batch sync task: Will removed on v2.1.X. Deprecated |
| | | # nacos.naming.distro.batchSyncKeyCount=1000 |
| | | |
| | | ### Retry delay in milliseconds if sync task failed: Will removed on v2.1.X, replace with nacos.core.protocol.distro.data.sync.retryDelayMs |
| | | # nacos.naming.distro.syncRetryDelay=5000 |
| | | |
| | | ### If enable data warmup. If set to false, the server would accept request without local data preparation: |
| | | # nacos.naming.data.warmup=true |
| | | |
| | | ### If enable the instance auto expiration, kind like of health check of instance: |
| | | # nacos.naming.expireInstance=true |
| | | |
| | | ### will be removed and replaced by `nacos.naming.clean` properties |
| | | nacos.naming.empty-service.auto-clean=true |
| | | nacos.naming.empty-service.clean.initial-delay-ms=50000 |
| | | nacos.naming.empty-service.clean.period-time-ms=30000 |
| | | |
| | | ### Add in 2.0.0 |
| | | ### The interval to clean empty service, unit: milliseconds. |
| | | # nacos.naming.clean.empty-service.interval=60000 |
| | | |
| | | ### The expired time to clean empty service, unit: milliseconds. |
| | | # nacos.naming.clean.empty-service.expired-time=60000 |
| | | |
| | | ### The interval to clean expired metadata, unit: milliseconds. |
| | | # nacos.naming.clean.expired-metadata.interval=5000 |
| | | |
| | | ### The expired time to clean metadata, unit: milliseconds. |
| | | # nacos.naming.clean.expired-metadata.expired-time=60000 |
| | | |
| | | ### The delay time before push task to execute from service changed, unit: milliseconds. |
| | | # nacos.naming.push.pushTaskDelay=500 |
| | | |
| | | ### The timeout for push task execute, unit: milliseconds. |
| | | # nacos.naming.push.pushTaskTimeout=5000 |
| | | |
| | | ### The delay time for retrying failed push task, unit: milliseconds. |
| | | # nacos.naming.push.pushTaskRetryDelay=1000 |
| | | |
| | | ### Since 2.0.3 |
| | | ### The expired time for inactive client, unit: milliseconds. |
| | | # nacos.naming.client.expired.time=180000 |
| | | |
| | | #*************** CMDB Module Related Configurations ***************# |
| | | ### The interval to dump external CMDB in seconds: |
| | | # nacos.cmdb.dumpTaskInterval=3600 |
| | | |
| | | ### The interval of polling data change event in seconds: |
| | | # nacos.cmdb.eventTaskInterval=10 |
| | | |
| | | ### The interval of loading labels in seconds: |
| | | # nacos.cmdb.labelTaskInterval=300 |
| | | |
| | | ### If turn on data loading task: |
| | | # nacos.cmdb.loadDataAtStart=false |
| | | |
| | | |
| | | #*************** Metrics Related Configurations ***************# |
| | | ### Metrics for prometheus |
| | | #management.endpoints.web.exposure.include=* |
| | | |
| | | ### Metrics for elastic search |
| | | management.metrics.export.elastic.enabled=false |
| | | #management.metrics.export.elastic.host=http://localhost:9200 |
| | | |
| | | ### Metrics for influx |
| | | management.metrics.export.influx.enabled=false |
| | | #management.metrics.export.influx.db=springboot |
| | | #management.metrics.export.influx.uri=http://localhost:8086 |
| | | #management.metrics.export.influx.auto-create-db=true |
| | | #management.metrics.export.influx.consistency=one |
| | | #management.metrics.export.influx.compressed=true |
| | | |
| | | #*************** Access Log Related Configurations ***************# |
| | | ### If turn on the access log: |
| | | server.tomcat.accesslog.enabled=true |
| | | |
| | | ### The access log pattern: |
| | | server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i |
| | | |
| | | ### The directory of access log: |
| | | server.tomcat.basedir=file:. |
| | | |
| | | #*************** Access Control Related Configurations ***************# |
| | | ### If enable spring security, this option is deprecated in 1.2.0: |
| | | #spring.security.enabled=false |
| | | |
| | | ### The ignore urls of auth, is deprecated in 1.2.0: |
| | | nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/** |
| | | |
| | | ### The auth system to use, currently only 'nacos' and 'ldap' is supported: |
| | | nacos.core.auth.system.type=nacos |
| | | |
| | | ### If turn on auth system: |
| | | nacos.core.auth.enabled=false |
| | | |
| | | ### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay. |
| | | nacos.core.auth.caching.enabled=true |
| | | |
| | | ### Since 1.4.1, Turn on/off white auth for user-agent: nacos-server, only for upgrade from old version. |
| | | nacos.core.auth.enable.userAgentAuthWhite=false |
| | | |
| | | ### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false. |
| | | ### The two properties is the white list for auth and used by identity the request from other server. |
| | | nacos.core.auth.server.identity.key=serverIdentity |
| | | nacos.core.auth.server.identity.value=security |
| | | |
| | | ### worked when nacos.core.auth.system.type=nacos |
| | | ### The token expiration in seconds: |
| | | nacos.core.auth.plugin.nacos.token.expire.seconds=18000 |
| | | ### The default token: |
| | | nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789 |
| | | |
| | | ### worked when nacos.core.auth.system.type=ldap,{0} is Placeholder,replace login username |
| | | #nacos.core.auth.ldap.url=ldap://localhost:389 |
| | | #nacos.core.auth.ldap.basedc=dc=example,dc=org |
| | | #nacos.core.auth.ldap.userDn=cn=admin,${nacos.core.auth.ldap.basedc} |
| | | #nacos.core.auth.ldap.password=admin |
| | | #nacos.core.auth.ldap.userdn=cn={0},dc=example,dc=org |
| | | |
| | | |
| | | #*************** Istio Related Configurations ***************# |
| | | ### If turn on the MCP server: |
| | | nacos.istio.mcp.server.enabled=false |
| | | |
| | | #*************** Core Related Configurations ***************# |
| | | |
| | | ### set the WorkerID manually |
| | | # nacos.core.snowflake.worker-id= |
| | | |
| | | ### Member-MetaData |
| | | # nacos.core.member.meta.site= |
| | | # nacos.core.member.meta.adweight= |
| | | # nacos.core.member.meta.weight= |
| | | |
| | | ### MemberLookup |
| | | ### Addressing pattern category, If set, the priority is highest |
| | | # nacos.core.member.lookup.type=[file,address-server] |
| | | ## Set the cluster list with a configuration file or command-line argument |
| | | # nacos.member.list=192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809 |
| | | ## for AddressServerMemberLookup |
| | | # Maximum number of retries to query the address server upon initialization |
| | | # nacos.core.address-server.retry=5 |
| | | ## Server domain name address of [address-server] mode |
| | | # address.server.domain=jmenv.tbsite.net |
| | | ## Server port of [address-server] mode |
| | | # address.server.port=8080 |
| | | ## Request address of [address-server] mode |
| | | # address.server.url=/nacos/serverlist |
| | | |
| | | #*************** JRaft Related Configurations ***************# |
| | | |
| | | ### Sets the Raft cluster election timeout, default value is 5 second |
| | | # nacos.core.protocol.raft.data.election_timeout_ms=5000 |
| | | ### Sets the amount of time the Raft snapshot will execute periodically, default is 30 minute |
| | | # nacos.core.protocol.raft.data.snapshot_interval_secs=30 |
| | | ### raft internal worker threads |
| | | # nacos.core.protocol.raft.data.core_thread_num=8 |
| | | ### Number of threads required for raft business request processing |
| | | # nacos.core.protocol.raft.data.cli_service_thread_num=4 |
| | | ### raft linear read strategy. Safe linear reads are used by default, that is, the Leader tenure is confirmed by heartbeat |
| | | # nacos.core.protocol.raft.data.read_index_type=ReadOnlySafe |
| | | ### rpc request timeout, default 5 seconds |
| | | # nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000 |
| | | |
| | | #*************** Distro Related Configurations ***************# |
| | | |
| | | ### Distro data sync delay time, when sync task delayed, task will be merged for same data key. Default 1 second. |
| | | # nacos.core.protocol.distro.data.sync.delayMs=1000 |
| | | |
| | | ### Distro data sync timeout for one sync data, default 3 seconds. |
| | | # nacos.core.protocol.distro.data.sync.timeoutMs=3000 |
| | | |
| | | ### Distro data sync retry delay time when sync data failed or timeout, same behavior with delayMs, default 3 seconds. |
| | | # nacos.core.protocol.distro.data.sync.retryDelayMs=3000 |
| | | |
| | | ### Distro data verify interval time, verify synced data whether expired for a interval. Default 5 seconds. |
| | | # nacos.core.protocol.distro.data.verify.intervalMs=5000 |
| | | |
| | | ### Distro data verify timeout for one verify, default 3 seconds. |
| | | # nacos.core.protocol.distro.data.verify.timeoutMs=3000 |
| | | |
| | | ### Distro data load retry delay when load snapshot data failed, default 30 seconds. |
| | | # nacos.core.protocol.distro.data.load.retryDelayMs=30000 |
New file |
| | |
| | | # |
| | | # Copyright 1999-2021 Alibaba Group Holding Ltd. |
| | | # |
| | | # Licensed under the Apache License, Version 2.0 (the "License"); |
| | | # you may not use this file except in compliance with the License. |
| | | # You may obtain a copy of the License at |
| | | # |
| | | # http://www.apache.org/licenses/LICENSE-2.0 |
| | | # |
| | | # Unless required by applicable law or agreed to in writing, software |
| | | # distributed under the License is distributed on an "AS IS" BASIS, |
| | | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | # See the License for the specific language governing permissions and |
| | | # limitations under the License. |
| | | # |
| | | |
| | | #*************** Spring Boot Related Configurations ***************# |
| | | ### Default web context path: |
| | | server.servlet.contextPath=/nacos |
| | | ### Include message field |
| | | server.error.include-message=ON_PARAM |
| | | ### Default web server port: |
| | | server.port=8848 |
| | | |
| | | #*************** Network Related Configurations ***************# |
| | | ### If prefer hostname over ip for Nacos server addresses in cluster.conf: |
| | | # nacos.inetutils.prefer-hostname-over-ip=false |
| | | |
| | | ### Specify local server's IP: |
| | | # nacos.inetutils.ip-address= |
| | | |
| | | |
| | | #*************** Config Module Related Configurations ***************# |
| | | ### If use MySQL as datasource: |
| | | # spring.datasource.platform=mysql |
| | | |
| | | ### Count of DB: |
| | | # db.num=1 |
| | | |
| | | ### Connect URL of DB: |
| | | # db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC |
| | | # db.user.0=nacos |
| | | # db.password.0=nacos |
| | | |
| | | ### Connection pool configuration: hikariCP |
| | | db.pool.config.connectionTimeout=30000 |
| | | db.pool.config.validationTimeout=10000 |
| | | db.pool.config.maximumPoolSize=20 |
| | | db.pool.config.minimumIdle=2 |
| | | |
| | | #*************** Naming Module Related Configurations ***************# |
| | | ### Data dispatch task execution period in milliseconds: Will removed on v2.1.X, replace with nacos.core.protocol.distro.data.sync.delayMs |
| | | # nacos.naming.distro.taskDispatchPeriod=200 |
| | | |
| | | ### Data count of batch sync task: Will removed on v2.1.X. Deprecated |
| | | # nacos.naming.distro.batchSyncKeyCount=1000 |
| | | |
| | | ### Retry delay in milliseconds if sync task failed: Will removed on v2.1.X, replace with nacos.core.protocol.distro.data.sync.retryDelayMs |
| | | # nacos.naming.distro.syncRetryDelay=5000 |
| | | |
| | | ### If enable data warmup. If set to false, the server would accept request without local data preparation: |
| | | # nacos.naming.data.warmup=true |
| | | |
| | | ### If enable the instance auto expiration, kind like of health check of instance: |
| | | # nacos.naming.expireInstance=true |
| | | |
| | | ### will be removed and replaced by `nacos.naming.clean` properties |
| | | nacos.naming.empty-service.auto-clean=true |
| | | nacos.naming.empty-service.clean.initial-delay-ms=50000 |
| | | nacos.naming.empty-service.clean.period-time-ms=30000 |
| | | |
| | | ### Add in 2.0.0 |
| | | ### The interval to clean empty service, unit: milliseconds. |
| | | # nacos.naming.clean.empty-service.interval=60000 |
| | | |
| | | ### The expired time to clean empty service, unit: milliseconds. |
| | | # nacos.naming.clean.empty-service.expired-time=60000 |
| | | |
| | | ### The interval to clean expired metadata, unit: milliseconds. |
| | | # nacos.naming.clean.expired-metadata.interval=5000 |
| | | |
| | | ### The expired time to clean metadata, unit: milliseconds. |
| | | # nacos.naming.clean.expired-metadata.expired-time=60000 |
| | | |
| | | ### The delay time before push task to execute from service changed, unit: milliseconds. |
| | | # nacos.naming.push.pushTaskDelay=500 |
| | | |
| | | ### The timeout for push task execute, unit: milliseconds. |
| | | # nacos.naming.push.pushTaskTimeout=5000 |
| | | |
| | | ### The delay time for retrying failed push task, unit: milliseconds. |
| | | # nacos.naming.push.pushTaskRetryDelay=1000 |
| | | |
| | | ### Since 2.0.3 |
| | | ### The expired time for inactive client, unit: milliseconds. |
| | | # nacos.naming.client.expired.time=180000 |
| | | |
| | | #*************** CMDB Module Related Configurations ***************# |
| | | ### The interval to dump external CMDB in seconds: |
| | | # nacos.cmdb.dumpTaskInterval=3600 |
| | | |
| | | ### The interval of polling data change event in seconds: |
| | | # nacos.cmdb.eventTaskInterval=10 |
| | | |
| | | ### The interval of loading labels in seconds: |
| | | # nacos.cmdb.labelTaskInterval=300 |
| | | |
| | | ### If turn on data loading task: |
| | | # nacos.cmdb.loadDataAtStart=false |
| | | |
| | | |
| | | #*************** Metrics Related Configurations ***************# |
| | | ### Metrics for prometheus |
| | | #management.endpoints.web.exposure.include=* |
| | | |
| | | ### Metrics for elastic search |
| | | management.metrics.export.elastic.enabled=false |
| | | #management.metrics.export.elastic.host=http://localhost:9200 |
| | | |
| | | ### Metrics for influx |
| | | management.metrics.export.influx.enabled=false |
| | | #management.metrics.export.influx.db=springboot |
| | | #management.metrics.export.influx.uri=http://localhost:8086 |
| | | #management.metrics.export.influx.auto-create-db=true |
| | | #management.metrics.export.influx.consistency=one |
| | | #management.metrics.export.influx.compressed=true |
| | | |
| | | #*************** Access Log Related Configurations ***************# |
| | | ### If turn on the access log: |
| | | server.tomcat.accesslog.enabled=true |
| | | |
| | | ### The access log pattern: |
| | | server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i |
| | | |
| | | ### The directory of access log: |
| | | server.tomcat.basedir=file:. |
| | | |
| | | #*************** Access Control Related Configurations ***************# |
| | | ### If enable spring security, this option is deprecated in 1.2.0: |
| | | #spring.security.enabled=false |
| | | |
| | | ### The ignore urls of auth, is deprecated in 1.2.0: |
| | | nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/** |
| | | |
| | | ### The auth system to use, currently only 'nacos' and 'ldap' is supported: |
| | | nacos.core.auth.system.type=nacos |
| | | |
| | | ### If turn on auth system: |
| | | nacos.core.auth.enabled=false |
| | | |
| | | ### worked when nacos.core.auth.system.type=ldap,{0} is Placeholder,replace login username |
| | | #nacos.core.auth.system.type=ldap |
| | | #nacos.core.auth.ldap.url=ldap://localhost:389 |
| | | #nacos.core.auth.ldap.basedc=dc=example,dc=org |
| | | #nacos.core.auth.ldap.userDn=cn=admin,${nacos.core.auth.ldap.basedc} |
| | | #nacos.core.auth.ldap.password=admin |
| | | #nacos.core.auth.ldap.userdn=cn={0},dc=example,dc=org |
| | | |
| | | |
| | | ### The token expiration in seconds: |
| | | nacos.core.auth.default.token.expire.seconds=18000 |
| | | |
| | | ### The default token: |
| | | nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789 |
| | | |
| | | ### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay. |
| | | nacos.core.auth.caching.enabled=true |
| | | |
| | | ### Since 1.4.1, Turn on/off white auth for user-agent: nacos-server, only for upgrade from old version. |
| | | nacos.core.auth.enable.userAgentAuthWhite=false |
| | | |
| | | ### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false. |
| | | ### The two properties is the white list for auth and used by identity the request from other server. |
| | | nacos.core.auth.server.identity.key=serverIdentity |
| | | nacos.core.auth.server.identity.value=security |
| | | |
| | | #*************** Istio Related Configurations ***************# |
| | | ### If turn on the MCP server: |
| | | nacos.istio.mcp.server.enabled=false |
| | | |
| | | #*************** Core Related Configurations ***************# |
| | | |
| | | ### set the WorkerID manually |
| | | # nacos.core.snowflake.worker-id= |
| | | |
| | | ### Member-MetaData |
| | | # nacos.core.member.meta.site= |
| | | # nacos.core.member.meta.adweight= |
| | | # nacos.core.member.meta.weight= |
| | | |
| | | ### MemberLookup |
| | | ### Addressing pattern category, If set, the priority is highest |
| | | # nacos.core.member.lookup.type=[file,address-server] |
| | | ## Set the cluster list with a configuration file or command-line argument |
| | | # nacos.member.list=192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809 |
| | | ## for AddressServerMemberLookup |
| | | # Maximum number of retries to query the address server upon initialization |
| | | # nacos.core.address-server.retry=5 |
| | | ## Server domain name address of [address-server] mode |
| | | # address.server.domain=jmenv.tbsite.net |
| | | ## Server port of [address-server] mode |
| | | # address.server.port=8080 |
| | | ## Request address of [address-server] mode |
| | | # address.server.url=/nacos/serverlist |
| | | |
| | | #*************** JRaft Related Configurations ***************# |
| | | |
| | | ### Sets the Raft cluster election timeout, default value is 5 second |
| | | # nacos.core.protocol.raft.data.election_timeout_ms=5000 |
| | | ### Sets the amount of time the Raft snapshot will execute periodically, default is 30 minute |
| | | # nacos.core.protocol.raft.data.snapshot_interval_secs=30 |
| | | ### raft internal worker threads |
| | | # nacos.core.protocol.raft.data.core_thread_num=8 |
| | | ### Number of threads required for raft business request processing |
| | | # nacos.core.protocol.raft.data.cli_service_thread_num=4 |
| | | ### raft linear read strategy. Safe linear reads are used by default, that is, the Leader tenure is confirmed by heartbeat |
| | | # nacos.core.protocol.raft.data.read_index_type=ReadOnlySafe |
| | | ### rpc request timeout, default 5 seconds |
| | | # nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000 |
| | | |
| | | #*************** Distro Related Configurations ***************# |
| | | |
| | | ### Distro data sync delay time, when sync task delayed, task will be merged for same data key. Default 1 second. |
| | | # nacos.core.protocol.distro.data.sync.delayMs=1000 |
| | | |
| | | ### Distro data sync timeout for one sync data, default 3 seconds. |
| | | # nacos.core.protocol.distro.data.sync.timeoutMs=3000 |
| | | |
| | | ### Distro data sync retry delay time when sync data failed or timeout, same behavior with delayMs, default 3 seconds. |
| | | # nacos.core.protocol.distro.data.sync.retryDelayMs=3000 |
| | | |
| | | ### Distro data verify interval time, verify synced data whether expired for a interval. Default 5 seconds. |
| | | # nacos.core.protocol.distro.data.verify.intervalMs=5000 |
| | | |
| | | ### Distro data verify timeout for one verify, default 3 seconds. |
| | | # nacos.core.protocol.distro.data.verify.timeoutMs=3000 |
| | | |
| | | ### Distro data load retry delay when load snapshot data failed, default 30 seconds. |
| | | # nacos.core.protocol.distro.data.load.retryDelayMs=30000 |
New file |
| | |
| | | # |
| | | # Copyright 1999-2021 Alibaba Group Holding Ltd. |
| | | # |
| | | # Licensed under the Apache License, Version 2.0 (the "License"); |
| | | # you may not use this file except in compliance with the License. |
| | | # You may obtain a copy of the License at |
| | | # |
| | | # http://www.apache.org/licenses/LICENSE-2.0 |
| | | # |
| | | # Unless required by applicable law or agreed to in writing, software |
| | | # distributed under the License is distributed on an "AS IS" BASIS, |
| | | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | # See the License for the specific language governing permissions and |
| | | # limitations under the License. |
| | | # |
| | | |
| | | #it is ip |
| | | #example |
| | | 192.168.16.101:8847 |
| | | 192.168.16.102 |
| | | 192.168.16.103 |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!-- |
| | | ~ Copyright 1999-2018 Alibaba Group Holding Ltd. |
| | | ~ |
| | | ~ Licensed under the Apache License, Version 2.0 (the "License"); |
| | | ~ you may not use this file except in compliance with the License. |
| | | ~ You may obtain a copy of the License at |
| | | ~ |
| | | ~ http://www.apache.org/licenses/LICENSE-2.0 |
| | | ~ |
| | | ~ Unless required by applicable law or agreed to in writing, software |
| | | ~ distributed under the License is distributed on an "AS IS" BASIS, |
| | | ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | ~ See the License for the specific language governing permissions and |
| | | ~ limitations under the License. |
| | | --> |
| | | |
| | | <configuration scan="true" scanPeriod="10 seconds"> |
| | | |
| | | <springProperty scope="context" name="logPath" source="nacos.logs.path" defaultValue="${nacos.home}/logs"/> |
| | | <property name="LOG_HOME" value="${logPath}"/> |
| | | |
| | | <appender name="cmdb-main" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${nacos.home}/logs/cmdb-main.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${nacos.home}/logs/cmdb-main.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="naming-server" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/naming-server.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/naming-server.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>1GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="async-naming-server" class="ch.qos.logback.classic.AsyncAppender"> |
| | | <discardingThreshold>0</discardingThreshold> |
| | | <queueSize>1024</queueSize> |
| | | <neverBlock>true</neverBlock> |
| | | <appender-ref ref="naming-server"/> |
| | | </appender> |
| | | |
| | | <appender name="naming-raft" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/naming-raft.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/naming-raft.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>1GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>3GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="async-naming-raft" class="ch.qos.logback.classic.AsyncAppender"> |
| | | <discardingThreshold>0</discardingThreshold> |
| | | <queueSize>1024</queueSize> |
| | | <neverBlock>true</neverBlock> |
| | | <appender-ref ref="naming-raft"/> |
| | | </appender> |
| | | |
| | | |
| | | <appender name="naming-distro" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/naming-distro.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/naming-distro.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>1GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>3GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="async-naming-distro" class="ch.qos.logback.classic.AsyncAppender"> |
| | | <discardingThreshold>0</discardingThreshold> |
| | | <queueSize>1024</queueSize> |
| | | <neverBlock>true</neverBlock> |
| | | <appender-ref ref="naming-distro"/> |
| | | </appender> |
| | | |
| | | <appender name="naming-event" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/naming-event.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/naming-event.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>1GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>3GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="async-naming-event" class="ch.qos.logback.classic.AsyncAppender"> |
| | | <discardingThreshold>0</discardingThreshold> |
| | | <queueSize>1024</queueSize> |
| | | <neverBlock>true</neverBlock> |
| | | <appender-ref ref="naming-event"/> |
| | | </appender> |
| | | |
| | | <appender name="naming-push" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/naming-push.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/naming-push.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>1GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>3GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | <appender name="naming-rt" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/naming-rt.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/naming-rt.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>1GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>3GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%msg%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="naming-performance" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/naming-performance.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/naming-performance.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>1GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>3GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <!--config module logback config--> |
| | | <appender name="dumpFile" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/config-dump.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/config-dump.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | <appender name="pullFile" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/config-pull.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/config-pull.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>20MB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>128MB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | <appender name="fatalFile" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/config-fatal.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/config-fatal.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>20MB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>128MB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | <appender name="memoryFile" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/config-memory.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/config-memory.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>20MB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>128MB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | <appender name="pullCheckFile" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/config-pull-check.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/config-pull-check.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>1GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>3GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%msg%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="clientLog" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/config-client-request.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/config-client-request.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date|%msg%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="traceLog" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/config-trace.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/config-trace.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date|%msg%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="notifyLog" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/config-notify.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/config-notify.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>1GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>3GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="startLog" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/config-server.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/config-server.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>50MB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>512MB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="rootFile" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/nacos.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/nacos.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>50MB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>512MB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="nacos-address" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/nacos-address.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/nacos-address.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="istio-main" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/istio-main.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/istio-main.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="core-auth" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/core-auth.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/core-auth.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="protocol-raft" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/protocol-raft.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/protocol-raft.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="protocol-distro" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/protocol-distro.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/protocol-distro.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="nacos-cluster" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/nacos-cluster.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/nacos-cluster.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="alipay-jraft" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/alipay-jraft.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/alipay-jraft.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | |
| | | <!--TPS control --> |
| | | <appender name="tps-control" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/tps-control.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/tps-control.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="tps-control-digest" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/tps-control-digest.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/tps-control-digest.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="tps-control-detail" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/tps-control-detail.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/tps-control-detail.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | |
| | | <appender name="remote" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/remote.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/remote.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="remote-digest" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/remote-digest.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/remote-digest.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <appender name="remote-push" |
| | | class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${LOG_HOME}/remote-push.log</file> |
| | | <append>true</append> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
| | | <fileNamePattern>${LOG_HOME}/remote-push.log.%d{yyyy-MM-dd}.%i</fileNamePattern> |
| | | <maxFileSize>2GB</maxFileSize> |
| | | <maxHistory>7</maxHistory> |
| | | <totalSizeCap>7GB</totalSizeCap> |
| | | <cleanHistoryOnStart>true</cleanHistoryOnStart> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <Pattern>%date %level %msg%n%n</Pattern> |
| | | <charset>UTF-8</charset> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | |
| | | <logger name="com.alibaba.nacos.address.main" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="nacos-address"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.cmdb.main" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="cmdb-main"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.core.remote" additivity="false"> |
| | | <level value="DEBUG"/> |
| | | <appender-ref ref="remote"/> |
| | | </logger> |
| | | <logger name="com.alibaba.nacos.core.remote.push" additivity="false"> |
| | | <level value="DEBUG"/> |
| | | <appender-ref ref="remote-push"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.core.remote.digest" additivity="false"> |
| | | <level value="DEBUG"/> |
| | | <appender-ref ref="remote-digest"/> |
| | | </logger> |
| | | |
| | | <!-- TPS Control--> |
| | | <logger name="com.alibaba.nacos.core.remote.control.digest" additivity="false"> |
| | | <level value="DEBUG"/> |
| | | <appender-ref ref="tps-control-digest"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.core.remote.control.detail" additivity="false"> |
| | | <level value="DEBUG"/> |
| | | <appender-ref ref="tps-control-detail"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.core.remote.control" additivity="false"> |
| | | <level value="DEBUG"/> |
| | | <appender-ref ref="tps-control"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.naming.main" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="async-naming-server"/> |
| | | </logger> |
| | | <logger name="com.alibaba.nacos.naming.raft" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="async-naming-raft"/> |
| | | </logger> |
| | | <logger name="com.alibaba.nacos.naming.distro" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="async-naming-distro"/> |
| | | </logger> |
| | | <logger name="com.alibaba.nacos.naming.event" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="async-naming-event"/> |
| | | </logger> |
| | | <logger name="com.alibaba.nacos.naming.push" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="naming-push"/> |
| | | </logger> |
| | | <logger name="com.alibaba.nacos.naming.rt" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="naming-rt"/> |
| | | </logger> |
| | | <logger name="com.alibaba.nacos.naming.performance" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="naming-performance"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.config.dumpLog" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="dumpFile"/> |
| | | </logger> |
| | | <logger name="com.alibaba.nacos.config.pullLog" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="pullFile"/> |
| | | </logger> |
| | | <logger name="com.alibaba.nacos.config.pullCheckLog" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="pullCheckFile"/> |
| | | </logger> |
| | | <logger name="com.alibaba.nacos.config.fatal" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="fatalFile"/> |
| | | </logger> |
| | | <logger name="com.alibaba.nacos.config.monitorLog" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="memoryFile"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.config.clientLog" additivity="false"> |
| | | <level value="info"/> |
| | | <appender-ref ref="clientLog"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.config.notifyLog" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="notifyLog"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.config.traceLog" additivity="false"> |
| | | <level value="info"/> |
| | | <appender-ref ref="traceLog"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.config.startLog" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="startLog"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.istio.main" additivity="false"> |
| | | <level value="DEBUG"/> |
| | | <appender-ref ref="istio-main"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.core.auth" additivity="false"> |
| | | <level value="DEBUG"/> |
| | | <appender-ref ref="core-auth"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.core.protocol.raft" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="protocol-raft"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alipay.sofa.jraft" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="alipay-jraft"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.core.protocol.distro" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="protocol-distro"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.core.cluster" additivity="false"> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="nacos-cluster"/> |
| | | </logger> |
| | | |
| | | <springProfile name="standalone"> |
| | | <logger name="org.springframework"> |
| | | <appender-ref ref="CONSOLE"/> |
| | | <level value="INFO"/> |
| | | </logger> |
| | | |
| | | <logger name="org.apache.catalina.startup.DigesterFactory"> |
| | | <appender-ref ref="CONSOLE"/> |
| | | <level value="INFO"/> |
| | | </logger> |
| | | |
| | | <logger name="org.apache.catalina.util.LifecycleBase"> |
| | | <appender-ref ref="CONSOLE"/> |
| | | <level value="ERROR"/> |
| | | </logger> |
| | | |
| | | <logger name="org.apache.coyote.http11.Http11NioProtocol"> |
| | | <appender-ref ref="CONSOLE"/> |
| | | <level value="WARN"/> |
| | | </logger> |
| | | |
| | | <logger name="org.apache.tomcat.util.net.NioSelectorPool"> |
| | | <appender-ref ref="CONSOLE"/> |
| | | <level value="WARN"/> |
| | | </logger> |
| | | </springProfile> |
| | | |
| | | <logger name="com.alibaba.nacos.core.listener.StartingApplicationListener"> |
| | | <appender-ref ref="CONSOLE"/> |
| | | <level value="INFO"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.common.notify.NotifyCenter"> |
| | | <appender-ref ref="CONSOLE"/> |
| | | <level value="INFO"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.sys.file.WatchFileCenter"> |
| | | <appender-ref ref="CONSOLE"/> |
| | | <level value="INFO"/> |
| | | </logger> |
| | | |
| | | <logger name="com.alibaba.nacos.common.executor.ThreadPoolManager"> |
| | | <appender-ref ref="CONSOLE"/> |
| | | <level value="INFO"/> |
| | | </logger> |
| | | |
| | | <root> |
| | | <level value="INFO"/> |
| | | <appender-ref ref="rootFile"/> |
| | | </root> |
| | | </configuration> |
| | | |
New file |
| | |
| | | /* |
| | | * Copyright 1999-2018 Alibaba Group Holding Ltd. |
| | | * |
| | | * Licensed under the Apache License, Version 2.0 (the "License"); |
| | | * you may not use this file except in compliance with the License. |
| | | * You may obtain a copy of the License at |
| | | * |
| | | * http://www.apache.org/licenses/LICENSE-2.0 |
| | | * |
| | | * Unless required by applicable law or agreed to in writing, software |
| | | * distributed under the License is distributed on an "AS IS" BASIS, |
| | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | * See the License for the specific language governing permissions and |
| | | * limitations under the License. |
| | | */ |
| | | |
| | | /******************************************/ |
| | | /* 数据库全名 = nacos_config */ |
| | | /* 表名称 = config_info */ |
| | | /******************************************/ |
| | | CREATE TABLE `config_info` ( |
| | | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `data_id` varchar(255) NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(255) DEFAULT NULL, |
| | | `content` longtext NOT NULL COMMENT 'content', |
| | | `md5` varchar(32) DEFAULT NULL COMMENT 'md5', |
| | | `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| | | `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', |
| | | `src_user` text COMMENT 'source user', |
| | | `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', |
| | | `app_name` varchar(128) DEFAULT NULL, |
| | | `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', |
| | | `c_desc` varchar(256) DEFAULT NULL, |
| | | `c_use` varchar(64) DEFAULT NULL, |
| | | `effect` varchar(64) DEFAULT NULL, |
| | | `type` varchar(64) DEFAULT NULL, |
| | | `c_schema` text, |
| | | `encrypted_data_key` text NOT NULL COMMENT '秘钥', |
| | | PRIMARY KEY (`id`), |
| | | UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info'; |
| | | |
| | | /******************************************/ |
| | | /* 数据库全名 = nacos_config */ |
| | | /* 表名称 = config_info_aggr */ |
| | | /******************************************/ |
| | | CREATE TABLE `config_info_aggr` ( |
| | | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `data_id` varchar(255) NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(255) NOT NULL COMMENT 'group_id', |
| | | `datum_id` varchar(255) NOT NULL COMMENT 'datum_id', |
| | | `content` longtext NOT NULL COMMENT '内容', |
| | | `gmt_modified` datetime NOT NULL COMMENT '修改时间', |
| | | `app_name` varchar(128) DEFAULT NULL, |
| | | `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', |
| | | PRIMARY KEY (`id`), |
| | | UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段'; |
| | | |
| | | |
| | | /******************************************/ |
| | | /* 数据库全名 = nacos_config */ |
| | | /* 表名称 = config_info_beta */ |
| | | /******************************************/ |
| | | CREATE TABLE `config_info_beta` ( |
| | | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `data_id` varchar(255) NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(128) NOT NULL COMMENT 'group_id', |
| | | `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', |
| | | `content` longtext NOT NULL COMMENT 'content', |
| | | `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps', |
| | | `md5` varchar(32) DEFAULT NULL COMMENT 'md5', |
| | | `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| | | `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', |
| | | `src_user` text COMMENT 'source user', |
| | | `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', |
| | | `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', |
| | | `encrypted_data_key` text NOT NULL COMMENT '秘钥', |
| | | PRIMARY KEY (`id`), |
| | | UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta'; |
| | | |
| | | /******************************************/ |
| | | /* 数据库全名 = nacos_config */ |
| | | /* 表名称 = config_info_tag */ |
| | | /******************************************/ |
| | | CREATE TABLE `config_info_tag` ( |
| | | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `data_id` varchar(255) NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(128) NOT NULL COMMENT 'group_id', |
| | | `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', |
| | | `tag_id` varchar(128) NOT NULL COMMENT 'tag_id', |
| | | `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', |
| | | `content` longtext NOT NULL COMMENT 'content', |
| | | `md5` varchar(32) DEFAULT NULL COMMENT 'md5', |
| | | `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| | | `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', |
| | | `src_user` text COMMENT 'source user', |
| | | `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', |
| | | PRIMARY KEY (`id`), |
| | | UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag'; |
| | | |
| | | /******************************************/ |
| | | /* 数据库全名 = nacos_config */ |
| | | /* 表名称 = config_tags_relation */ |
| | | /******************************************/ |
| | | CREATE TABLE `config_tags_relation` ( |
| | | `id` bigint(20) NOT NULL COMMENT 'id', |
| | | `tag_name` varchar(128) NOT NULL COMMENT 'tag_name', |
| | | `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type', |
| | | `data_id` varchar(255) NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(128) NOT NULL COMMENT 'group_id', |
| | | `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', |
| | | `nid` bigint(20) NOT NULL AUTO_INCREMENT, |
| | | PRIMARY KEY (`nid`), |
| | | UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`), |
| | | KEY `idx_tenant_id` (`tenant_id`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation'; |
| | | |
| | | /******************************************/ |
| | | /* 数据库全名 = nacos_config */ |
| | | /* 表名称 = group_capacity */ |
| | | /******************************************/ |
| | | CREATE TABLE `group_capacity` ( |
| | | `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', |
| | | `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群', |
| | | `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', |
| | | `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', |
| | | `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', |
| | | `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值', |
| | | `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', |
| | | `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', |
| | | `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| | | `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', |
| | | PRIMARY KEY (`id`), |
| | | UNIQUE KEY `uk_group_id` (`group_id`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表'; |
| | | |
| | | /******************************************/ |
| | | /* 数据库全名 = nacos_config */ |
| | | /* 表名称 = his_config_info */ |
| | | /******************************************/ |
| | | CREATE TABLE `his_config_info` ( |
| | | `id` bigint(20) unsigned NOT NULL, |
| | | `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT, |
| | | `data_id` varchar(255) NOT NULL, |
| | | `group_id` varchar(128) NOT NULL, |
| | | `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', |
| | | `content` longtext NOT NULL, |
| | | `md5` varchar(32) DEFAULT NULL, |
| | | `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| | | `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| | | `src_user` text, |
| | | `src_ip` varchar(50) DEFAULT NULL, |
| | | `op_type` char(10) DEFAULT NULL, |
| | | `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', |
| | | `encrypted_data_key` text NOT NULL COMMENT '秘钥', |
| | | PRIMARY KEY (`nid`), |
| | | KEY `idx_gmt_create` (`gmt_create`), |
| | | KEY `idx_gmt_modified` (`gmt_modified`), |
| | | KEY `idx_did` (`data_id`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造'; |
| | | |
| | | |
| | | /******************************************/ |
| | | /* 数据库全名 = nacos_config */ |
| | | /* 表名称 = tenant_capacity */ |
| | | /******************************************/ |
| | | CREATE TABLE `tenant_capacity` ( |
| | | `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', |
| | | `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID', |
| | | `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', |
| | | `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', |
| | | `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', |
| | | `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数', |
| | | `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', |
| | | `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', |
| | | `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| | | `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', |
| | | PRIMARY KEY (`id`), |
| | | UNIQUE KEY `uk_tenant_id` (`tenant_id`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表'; |
| | | |
| | | |
| | | CREATE TABLE `tenant_info` ( |
| | | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `kp` varchar(128) NOT NULL COMMENT 'kp', |
| | | `tenant_id` varchar(128) default '' COMMENT 'tenant_id', |
| | | `tenant_name` varchar(128) default '' COMMENT 'tenant_name', |
| | | `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc', |
| | | `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source', |
| | | `gmt_create` bigint(20) NOT NULL COMMENT '创建时间', |
| | | `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间', |
| | | PRIMARY KEY (`id`), |
| | | UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`), |
| | | KEY `idx_tenant_id` (`tenant_id`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info'; |
| | | |
| | | CREATE TABLE `users` ( |
| | | `username` varchar(50) NOT NULL PRIMARY KEY, |
| | | `password` varchar(500) NOT NULL, |
| | | `enabled` boolean NOT NULL |
| | | ); |
| | | |
| | | CREATE TABLE `roles` ( |
| | | `username` varchar(50) NOT NULL, |
| | | `role` varchar(50) NOT NULL, |
| | | UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE |
| | | ); |
| | | |
| | | CREATE TABLE `permissions` ( |
| | | `role` varchar(50) NOT NULL, |
| | | `resource` varchar(255) NOT NULL, |
| | | `action` varchar(8) NOT NULL, |
| | | UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE |
| | | ); |
| | | |
| | | INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE); |
| | | |
| | | INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN'); |
New file |
| | |
| | | /* |
| | | * Copyright 1999-2018 Alibaba Group Holding Ltd. |
| | | * |
| | | * Licensed under the Apache License, Version 2.0 (the "License"); |
| | | * you may not use this file except in compliance with the License. |
| | | * You may obtain a copy of the License at |
| | | * |
| | | * http://www.apache.org/licenses/LICENSE-2.0 |
| | | * |
| | | * Unless required by applicable law or agreed to in writing, software |
| | | * distributed under the License is distributed on an "AS IS" BASIS, |
| | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | * See the License for the specific language governing permissions and |
| | | * limitations under the License. |
| | | */ |
| | | |
| | | CREATE SCHEMA nacos AUTHORIZATION nacos; |
| | | |
| | | CREATE TABLE config_info ( |
| | | id bigint NOT NULL generated by default as identity, |
| | | data_id varchar(255) NOT NULL, |
| | | group_id varchar(128) NOT NULL, |
| | | tenant_id varchar(128) default '', |
| | | app_name varchar(128), |
| | | content CLOB, |
| | | md5 varchar(32) DEFAULT NULL, |
| | | gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', |
| | | gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', |
| | | src_user varchar(128) DEFAULT NULL, |
| | | src_ip varchar(50) DEFAULT NULL, |
| | | c_desc varchar(256) DEFAULT NULL, |
| | | c_use varchar(64) DEFAULT NULL, |
| | | effect varchar(64) DEFAULT NULL, |
| | | type varchar(64) DEFAULT NULL, |
| | | c_schema LONG VARCHAR DEFAULT NULL, |
| | | encrypted_data_key LONG VARCHAR DEFAULT NULL, |
| | | constraint configinfo_id_key PRIMARY KEY (id), |
| | | constraint uk_configinfo_datagrouptenant UNIQUE (data_id,group_id,tenant_id)); |
| | | |
| | | CREATE INDEX configinfo_dataid_key_idx ON config_info(data_id); |
| | | CREATE INDEX configinfo_groupid_key_idx ON config_info(group_id); |
| | | CREATE INDEX configinfo_dataid_group_key_idx ON config_info(data_id, group_id); |
| | | |
| | | CREATE TABLE his_config_info ( |
| | | id bigint NOT NULL, |
| | | nid bigint NOT NULL generated by default as identity, |
| | | data_id varchar(255) NOT NULL, |
| | | group_id varchar(128) NOT NULL, |
| | | tenant_id varchar(128) default '', |
| | | app_name varchar(128), |
| | | content CLOB, |
| | | md5 varchar(32) DEFAULT NULL, |
| | | gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00.000', |
| | | gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00.000', |
| | | src_user varchar(128), |
| | | src_ip varchar(50) DEFAULT NULL, |
| | | op_type char(10) DEFAULT NULL, |
| | | encrypted_data_key LONG VARCHAR DEFAULT NULL, |
| | | constraint hisconfiginfo_nid_key PRIMARY KEY (nid)); |
| | | |
| | | CREATE INDEX hisconfiginfo_dataid_key_idx ON his_config_info(data_id); |
| | | CREATE INDEX hisconfiginfo_gmt_create_idx ON his_config_info(gmt_create); |
| | | CREATE INDEX hisconfiginfo_gmt_modified_idx ON his_config_info(gmt_modified); |
| | | |
| | | |
| | | CREATE TABLE config_info_beta ( |
| | | id bigint NOT NULL generated by default as identity, |
| | | data_id varchar(255) NOT NULL, |
| | | group_id varchar(128) NOT NULL, |
| | | tenant_id varchar(128) default '', |
| | | app_name varchar(128), |
| | | content CLOB, |
| | | beta_ips varchar(1024), |
| | | md5 varchar(32) DEFAULT NULL, |
| | | gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', |
| | | gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', |
| | | src_user varchar(128), |
| | | src_ip varchar(50) DEFAULT NULL, |
| | | encrypted_data_key LONG VARCHAR DEFAULT NULL, |
| | | constraint configinfobeta_id_key PRIMARY KEY (id), |
| | | constraint uk_configinfobeta_datagrouptenant UNIQUE (data_id,group_id,tenant_id)); |
| | | |
| | | CREATE TABLE config_info_tag ( |
| | | id bigint NOT NULL generated by default as identity, |
| | | data_id varchar(255) NOT NULL, |
| | | group_id varchar(128) NOT NULL, |
| | | tenant_id varchar(128) default '', |
| | | tag_id varchar(128) NOT NULL, |
| | | app_name varchar(128), |
| | | content CLOB, |
| | | md5 varchar(32) DEFAULT NULL, |
| | | gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', |
| | | gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', |
| | | src_user varchar(128), |
| | | src_ip varchar(50) DEFAULT NULL, |
| | | constraint configinfotag_id_key PRIMARY KEY (id), |
| | | constraint uk_configinfotag_datagrouptenanttag UNIQUE (data_id,group_id,tenant_id,tag_id)); |
| | | |
| | | CREATE TABLE config_info_aggr ( |
| | | id bigint NOT NULL generated by default as identity, |
| | | data_id varchar(255) NOT NULL, |
| | | group_id varchar(128) NOT NULL, |
| | | tenant_id varchar(128) default '', |
| | | datum_id varchar(255) NOT NULL, |
| | | app_name varchar(128), |
| | | content CLOB, |
| | | gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00', |
| | | constraint configinfoaggr_id_key PRIMARY KEY (id), |
| | | constraint uk_configinfoaggr_datagrouptenantdatum UNIQUE (data_id,group_id,tenant_id,datum_id)); |
| | | |
| | | CREATE TABLE app_list ( |
| | | id bigint NOT NULL generated by default as identity, |
| | | app_name varchar(128) NOT NULL, |
| | | is_dynamic_collect_disabled smallint DEFAULT 0, |
| | | last_sub_info_collected_time timestamp DEFAULT '1970-01-01 08:00:00.0', |
| | | sub_info_lock_owner varchar(128), |
| | | sub_info_lock_time timestamp DEFAULT '1970-01-01 08:00:00.0', |
| | | constraint applist_id_key PRIMARY KEY (id), |
| | | constraint uk_appname UNIQUE (app_name)); |
| | | |
| | | CREATE TABLE app_configdata_relation_subs ( |
| | | id bigint NOT NULL generated by default as identity, |
| | | app_name varchar(128) NOT NULL, |
| | | data_id varchar(255) NOT NULL, |
| | | group_id varchar(128) NOT NULL, |
| | | gmt_modified timestamp DEFAULT '2010-05-05 00:00:00', |
| | | constraint configdatarelationsubs_id_key PRIMARY KEY (id), |
| | | constraint uk_app_sub_config_datagroup UNIQUE (app_name, data_id, group_id)); |
| | | |
| | | |
| | | CREATE TABLE app_configdata_relation_pubs ( |
| | | id bigint NOT NULL generated by default as identity, |
| | | app_name varchar(128) NOT NULL, |
| | | data_id varchar(255) NOT NULL, |
| | | group_id varchar(128) NOT NULL, |
| | | gmt_modified timestamp DEFAULT '2010-05-05 00:00:00', |
| | | constraint configdatarelationpubs_id_key PRIMARY KEY (id), |
| | | constraint uk_app_pub_config_datagroup UNIQUE (app_name, data_id, group_id)); |
| | | |
| | | CREATE TABLE config_tags_relation ( |
| | | id bigint NOT NULL, |
| | | tag_name varchar(128) NOT NULL, |
| | | tag_type varchar(64) DEFAULT NULL, |
| | | data_id varchar(255) NOT NULL, |
| | | group_id varchar(128) NOT NULL, |
| | | tenant_id varchar(128) DEFAULT '', |
| | | nid bigint NOT NULL generated by default as identity, |
| | | constraint config_tags_id_key PRIMARY KEY (nid), |
| | | constraint uk_configtagrelation_configidtag UNIQUE (id, tag_name, tag_type)); |
| | | |
| | | CREATE INDEX config_tags_tenant_id_idx ON config_tags_relation(tenant_id); |
| | | |
| | | CREATE TABLE group_capacity ( |
| | | id bigint NOT NULL generated by default as identity, |
| | | group_id varchar(128) DEFAULT '', |
| | | quota int DEFAULT 0, |
| | | usage int DEFAULT 0, |
| | | max_size int DEFAULT 0, |
| | | max_aggr_count int DEFAULT 0, |
| | | max_aggr_size int DEFAULT 0, |
| | | max_history_count int DEFAULT 0, |
| | | gmt_create timestamp DEFAULT '2010-05-05 00:00:00', |
| | | gmt_modified timestamp DEFAULT '2010-05-05 00:00:00', |
| | | constraint group_capacity_id_key PRIMARY KEY (id), |
| | | constraint uk_group_id UNIQUE (group_id)); |
| | | |
| | | CREATE TABLE tenant_capacity ( |
| | | id bigint NOT NULL generated by default as identity, |
| | | tenant_id varchar(128) DEFAULT '', |
| | | quota int DEFAULT 0, |
| | | usage int DEFAULT 0, |
| | | max_size int DEFAULT 0, |
| | | max_aggr_count int DEFAULT 0, |
| | | max_aggr_size int DEFAULT 0, |
| | | max_history_count int DEFAULT 0, |
| | | gmt_create timestamp DEFAULT '2010-05-05 00:00:00', |
| | | gmt_modified timestamp DEFAULT '2010-05-05 00:00:00', |
| | | constraint tenant_capacity_id_key PRIMARY KEY (id), |
| | | constraint uk_tenant_id UNIQUE (tenant_id)); |
| | | |
| | | CREATE TABLE tenant_info ( |
| | | id bigint NOT NULL generated by default as identity, |
| | | kp varchar(128) NOT NULL, |
| | | tenant_id varchar(128) DEFAULT '', |
| | | tenant_name varchar(128) DEFAULT '', |
| | | tenant_desc varchar(256) DEFAULT NULL, |
| | | create_source varchar(32) DEFAULT NULL, |
| | | gmt_create bigint NOT NULL, |
| | | gmt_modified bigint NOT NULL, |
| | | constraint tenant_info_id_key PRIMARY KEY (id), |
| | | constraint uk_tenant_info_kptenantid UNIQUE (kp,tenant_id)); |
| | | CREATE INDEX tenant_info_tenant_id_idx ON tenant_info(tenant_id); |
| | | |
| | | CREATE TABLE users ( |
| | | username varchar(50) NOT NULL PRIMARY KEY, |
| | | password varchar(500) NOT NULL, |
| | | enabled boolean NOT NULL DEFAULT true |
| | | ); |
| | | |
| | | CREATE TABLE roles ( |
| | | username varchar(50) NOT NULL, |
| | | role varchar(50) NOT NULL, |
| | | constraint uk_username_role UNIQUE (username,role) |
| | | ); |
| | | |
| | | CREATE TABLE permissions ( |
| | | role varchar(50) NOT NULL, |
| | | resource varchar(512) NOT NULL, |
| | | action varchar(8) NOT NULL, |
| | | constraint uk_role_permission UNIQUE (role,resource,action) |
| | | ); |
| | | |
| | | INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE); |
| | | |
| | | INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN'); |
| | | |
| | | |
| | | /******************************************/ |
| | | /* ipv6 support */ |
| | | /******************************************/ |
| | | ALTER TABLE `config_info_tag` |
| | | MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER `src_user`; |
| | | |
| | | ALTER TABLE `his_config_info` |
| | | MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL AFTER `src_user`; |
| | | |
| | | ALTER TABLE `config_info` |
| | | MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER `src_user`; |
| | | |
| | | ALTER TABLE `config_info_beta` |
| | | MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER `src_user`; |
New file |
| | |
| | | |
| | | # ************************************************************************* |
| | | # *** DO NOT TOUCH FILES IN THIS DIRECTORY! *** |
| | | # *** FILES IN THIS DIRECTORY AND SUBDIRECTORIES CONSTITUTE A DERBY *** |
| | | # *** DATABASE, WHICH INCLUDES THE DATA (USER AND SYSTEM) AND THE *** |
| | | # *** FILES NECESSARY FOR DATABASE RECOVERY. *** |
| | | # *** EDITING, ADDING, OR DELETING ANY OF THESE FILES MAY CAUSE DATA *** |
| | | # *** CORRUPTION AND LEAVE THE DATABASE IN A NON-RECOVERABLE STATE. *** |
| | | # ************************************************************************* |
New file |
| | |
| | | |
| | | # ************************************************************************* |
| | | # *** DO NOT TOUCH FILES IN THIS DIRECTORY! *** |
| | | # *** FILES IN THIS DIRECTORY ARE USED BY THE DERBY DATABASE RECOVERY *** |
| | | # *** SYSTEM. EDITING, ADDING, OR DELETING FILES IN THIS DIRECTORY *** |
| | | # *** WILL CAUSE THE DERBY RECOVERY SYSTEM TO FAIL, LEADING TO *** |
| | | # *** NON-RECOVERABLE CORRUPT DATABASES. *** |
| | | # ************************************************************************* |
New file |
| | |
| | | |
| | | # ************************************************************************* |
| | | # *** DO NOT TOUCH FILES IN THIS DIRECTORY! *** |
| | | # *** FILES IN THIS DIRECTORY ARE USED BY THE DERBY DATABASE TO STORE *** |
| | | # *** USER AND SYSTEM DATA. EDITING, ADDING, OR DELETING FILES IN THIS *** |
| | | # *** DIRECTORY WILL CORRUPT THE ASSOCIATED DERBY DATABASE AND MAKE *** |
| | | # *** IT NON-RECOVERABLE. *** |
| | | # ************************************************************************* |
New file |
| | |
| | | #E:\IDEA Workspaces\PlayPai\nacos\data\derby-data |
| | | # ******************************************************************** |
| | | # *** Please do NOT edit this file. *** |
| | | # *** CHANGING THE CONTENT OF THIS FILE MAY CAUSE DATA CORRUPTION. *** |
| | | # ******************************************************************** |
| | | #Tue Jun 13 20:11:38 CST 2023 |
| | | SysschemasIndex2Identifier=225 |
| | | SyscolumnsIdentifier=144 |
| | | SysconglomeratesIndex1Identifier=49 |
| | | SysconglomeratesIdentifier=32 |
| | | SyscolumnsIndex2Identifier=177 |
| | | SysschemasIndex1Identifier=209 |
| | | SysconglomeratesIndex3Identifier=81 |
| | | SystablesIndex2Identifier=129 |
| | | SyscolumnsIndex1Identifier=161 |
| | | derby.serviceProtocol=org.apache.derby.database.Database |
| | | SysschemasIdentifier=192 |
| | | derby.storage.propertiesId=16 |
| | | SysconglomeratesIndex2Identifier=65 |
| | | derby.serviceLocale=zh_CN |
| | | SystablesIdentifier=96 |
| | | SystablesIndex1Identifier=113 |
| | | #--- last line, don't put anything after this line --- |
New file |
| | |
| | | 752c27f6-09e3-11ee-8227-04d4c44b1386 |
New file |
| | |
| | | 2023/06/13-20:11:43.594809 b914 RocksDB version: 5.18.4 |
| | | 2023/06/13-20:11:43.594878 b914 Git sha rocksdb_build_git_sha:@b9a4a10659969c71e6f6eab4e4bae8c36ede919f@ |
| | | 2023/06/13-20:11:43.594892 b914 Compile date Mar 11 2020 |
| | | 2023/06/13-20:11:43.594900 b914 DB SUMMARY |
| | | 2023/06/13-20:11:43.594955 b914 SST files in E:\IDEA Workspaces\PlayPai\nacos\data\protocol\raft\naming_instance_metadata\log dir, Total Num: 0, files: |
| | | 2023/06/13-20:11:43.594968 b914 Write Ahead Log file in E:\IDEA Workspaces\PlayPai\nacos\data\protocol\raft\naming_instance_metadata\log: |
| | | 2023/06/13-20:11:43.594977 b914 Options.error_if_exists: 0 |
| | | 2023/06/13-20:11:43.594985 b914 Options.create_if_missing: 1 |
| | | 2023/06/13-20:11:43.594993 b914 Options.paranoid_checks: 1 |
| | | 2023/06/13-20:11:43.626950 b914 Options.env: 000000000063C590 |
| | | 2023/06/13-20:11:43.626962 b914 Options.info_log: 000000002580AA30 |
| | | 2023/06/13-20:11:43.626966 b914 Options.max_file_opening_threads: 16 |
| | | 2023/06/13-20:11:43.626969 b914 Options.statistics: 0000000000642520 |
| | | 2023/06/13-20:11:43.626973 b914 Options.use_fsync: 0 |
| | | 2023/06/13-20:11:43.626976 b914 Options.max_log_file_size: 0 |
| | | 2023/06/13-20:11:43.626979 b914 Options.max_manifest_file_size: 1073741824 |
| | | 2023/06/13-20:11:43.626982 b914 Options.log_file_time_to_roll: 0 |
| | | 2023/06/13-20:11:43.626985 b914 Options.keep_log_file_num: 1000 |
| | | 2023/06/13-20:11:43.626989 b914 Options.recycle_log_file_num: 0 |
| | | 2023/06/13-20:11:43.626993 b914 Options.allow_fallocate: 1 |
| | | 2023/06/13-20:11:43.626996 b914 Options.allow_mmap_reads: 0 |
| | | 2023/06/13-20:11:43.627000 b914 Options.allow_mmap_writes: 0 |
| | | 2023/06/13-20:11:43.627003 b914 Options.use_direct_reads: 0 |
| | | 2023/06/13-20:11:43.627006 b914 Options.use_direct_io_for_flush_and_compaction: 0 |
| | | 2023/06/13-20:11:43.627009 b914 Options.create_missing_column_families: 1 |
| | | 2023/06/13-20:11:43.627012 b914 Options.db_log_dir: |
| | | 2023/06/13-20:11:43.627015 b914 Options.wal_dir: E:\IDEA Workspaces\PlayPai\nacos\data\protocol\raft\naming_instance_metadata\log |
| | | 2023/06/13-20:11:43.627019 b914 Options.table_cache_numshardbits: 6 |
| | | 2023/06/13-20:11:43.627022 b914 Options.max_subcompactions: 1 |
| | | 2023/06/13-20:11:43.627025 b914 Options.max_background_flushes: 1 |
| | | 2023/06/13-20:11:43.627028 b914 Options.WAL_ttl_seconds: 0 |
| | | 2023/06/13-20:11:43.627031 b914 Options.WAL_size_limit_MB: 0 |
| | | 2023/06/13-20:11:43.627034 b914 Options.manifest_preallocation_size: 4194304 |
| | | 2023/06/13-20:11:43.627037 b914 Options.is_fd_close_on_exec: 1 |
| | | 2023/06/13-20:11:43.627040 b914 Options.advise_random_on_open: 1 |
| | | 2023/06/13-20:11:43.627043 b914 Options.db_write_buffer_size: 0 |
| | | 2023/06/13-20:11:43.627046 b914 Options.write_buffer_manager: 0000000000666050 |
| | | 2023/06/13-20:11:43.627050 b914 Options.access_hint_on_compaction_start: 1 |
| | | 2023/06/13-20:11:43.627053 b914 Options.new_table_reader_for_compaction_inputs: 0 |
| | | 2023/06/13-20:11:43.627056 b914 Options.random_access_max_buffer_size: 1048576 |
| | | 2023/06/13-20:11:43.627059 b914 Options.use_adaptive_mutex: 0 |
| | | 2023/06/13-20:11:43.627062 b914 Options.rate_limiter: 0000000000000000 |
| | | 2023/06/13-20:11:43.627066 b914 Options.sst_file_manager.rate_bytes_per_sec: 0 |
| | | 2023/06/13-20:11:43.627069 b914 Options.wal_recovery_mode: 2 |
| | | 2023/06/13-20:11:43.627072 b914 Options.enable_thread_tracking: 0 |
| | | 2023/06/13-20:11:43.627075 b914 Options.enable_pipelined_write: 0 |
| | | 2023/06/13-20:11:43.627078 b914 Options.allow_concurrent_memtable_write: 1 |
| | | 2023/06/13-20:11:43.627109 b914 Options.enable_write_thread_adaptive_yield: 1 |
| | | 2023/06/13-20:11:43.627114 b914 Options.write_thread_max_yield_usec: 100 |
| | | 2023/06/13-20:11:43.627118 b914 Options.write_thread_slow_yield_usec: 3 |
| | | 2023/06/13-20:11:43.627121 b914 Options.row_cache: None |
| | | 2023/06/13-20:11:43.627124 b914 Options.wal_filter: None |
| | | 2023/06/13-20:11:43.627127 b914 Options.avoid_flush_during_recovery: 0 |
| | | 2023/06/13-20:11:43.627130 b914 Options.allow_ingest_behind: 0 |
| | | 2023/06/13-20:11:43.627133 b914 Options.preserve_deletes: 0 |
| | | 2023/06/13-20:11:43.627136 b914 Options.two_write_queues: 0 |
| | | 2023/06/13-20:11:43.627139 b914 Options.manual_wal_flush: 0 |
| | | 2023/06/13-20:11:43.627142 b914 Options.max_background_jobs: 2 |
| | | 2023/06/13-20:11:43.627145 b914 Options.max_background_compactions: 4 |
| | | 2023/06/13-20:11:43.627148 b914 Options.avoid_flush_during_shutdown: 0 |
| | | 2023/06/13-20:11:43.627151 b914 Options.writable_file_max_buffer_size: 1048576 |
| | | 2023/06/13-20:11:43.627155 b914 Options.delayed_write_rate : 16777216 |
| | | 2023/06/13-20:11:43.627158 b914 Options.max_total_wal_size: 0 |
| | | 2023/06/13-20:11:43.627161 b914 Options.delete_obsolete_files_period_micros: 21600000000 |
| | | 2023/06/13-20:11:43.627164 b914 Options.stats_dump_period_sec: 600 |
| | | 2023/06/13-20:11:43.627167 b914 Options.max_open_files: -1 |
| | | 2023/06/13-20:11:43.627170 b914 Options.bytes_per_sync: 0 |
| | | 2023/06/13-20:11:43.627174 b914 Options.wal_bytes_per_sync: 0 |
| | | 2023/06/13-20:11:43.627177 b914 Options.compaction_readahead_size: 0 |
| | | 2023/06/13-20:11:43.627180 b914 Compression algorithms supported: |
| | | 2023/06/13-20:11:43.627183 b914 kZSTD supported: 1 |
| | | 2023/06/13-20:11:43.627187 b914 kSnappyCompression supported: 1 |
| | | 2023/06/13-20:11:43.627190 b914 kBZip2Compression supported: 0 |
| | | 2023/06/13-20:11:43.627194 b914 kZlibCompression supported: 1 |
| | | 2023/06/13-20:11:43.627197 b914 kLZ4Compression supported: 1 |
| | | 2023/06/13-20:11:43.627200 b914 kXpressCompression supported: 0 |
| | | 2023/06/13-20:11:43.627203 b914 kLZ4HCCompression supported: 1 |
| | | 2023/06/13-20:11:43.627206 b914 kZSTDNotFinalCompression supported: 1 |
| | | 2023/06/13-20:11:43.627211 b914 Fast CRC32 supported: Supported on x86 |
| | | 2023/06/13-20:11:43.627874 b914 [db\db_impl_open.cc:226] Creating manifest 1 |
| | | 2023/06/13-20:11:43.719972 b914 [db\version_set.cc:3508] Recovering from manifest file: MANIFEST-000001 |
| | | 2023/06/13-20:11:43.720047 b914 [db\column_family.cc:474] --------------- Options for column family [default]: |
| | | 2023/06/13-20:11:43.720054 b914 Options.comparator: leveldb.BytewiseComparator |
| | | 2023/06/13-20:11:43.720058 b914 Options.merge_operator: StringAppendOperator |
| | | 2023/06/13-20:11:43.720061 b914 Options.compaction_filter: None |
| | | 2023/06/13-20:11:43.720064 b914 Options.compaction_filter_factory: None |
| | | 2023/06/13-20:11:43.720067 b914 Options.memtable_factory: SkipListFactory |
| | | 2023/06/13-20:11:43.720071 b914 Options.table_factory: BlockBasedTable |
| | | 2023/06/13-20:11:43.720095 b914 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (00000000258ACBD0) |
| | | cache_index_and_filter_blocks: 0 |
| | | cache_index_and_filter_blocks_with_high_priority: 1 |
| | | pin_l0_filter_and_index_blocks_in_cache: 1 |
| | | pin_top_level_index_and_filter: 1 |
| | | index_type: 2 |
| | | hash_index_allow_collision: 1 |
| | | checksum: 1 |
| | | no_block_cache: 0 |
| | | block_cache: 0000000000646BA0 |
| | | block_cache_name: LRUCache |
| | | block_cache_options: |
| | | capacity : 536870912 |
| | | num_shard_bits : 8 |
| | | strict_capacity_limit : 0 |
| | | memory_allocator : None |
| | | high_pri_pool_ratio: 0.000 |
| | | block_cache_compressed: 0000000000000000 |
| | | persistent_cache: 0000000000000000 |
| | | block_size: 4096 |
| | | block_size_deviation: 10 |
| | | block_restart_interval: 16 |
| | | index_block_restart_interval: 1 |
| | | metadata_block_size: 8192 |
| | | partition_filters: 1 |
| | | use_delta_encoding: 1 |
| | | filter_policy: nullptr |
| | | whole_key_filtering: 1 |
| | | verify_compression: 0 |
| | | read_amp_bytes_per_bit: 0 |
| | | format_version: 0 |
| | | enable_index_compression: 1 |
| | | block_align: 0 |
| | | 2023/06/13-20:11:43.720128 b914 Options.write_buffer_size: 67108864 |
| | | 2023/06/13-20:11:43.720133 b914 Options.max_write_buffer_number: 3 |
| | | 2023/06/13-20:11:43.720137 b914 Options.compression: Snappy |
| | | 2023/06/13-20:11:43.720140 b914 Options.bottommost_compression: Disabled |
| | | 2023/06/13-20:11:43.720143 b914 Options.prefix_extractor: rocksdb.FixedPrefix.8 |
| | | 2023/06/13-20:11:43.720147 b914 Options.memtable_insert_with_hint_prefix_extractor: nullptr |
| | | 2023/06/13-20:11:43.720150 b914 Options.num_levels: 7 |
| | | 2023/06/13-20:11:43.720153 b914 Options.min_write_buffer_number_to_merge: 1 |
| | | 2023/06/13-20:11:43.720156 b914 Options.max_write_buffer_number_to_maintain: 0 |
| | | 2023/06/13-20:11:43.720159 b914 Options.bottommost_compression_opts.window_bits: -14 |
| | | 2023/06/13-20:11:43.720162 b914 Options.bottommost_compression_opts.level: 32767 |
| | | 2023/06/13-20:11:43.720165 b914 Options.bottommost_compression_opts.strategy: 0 |
| | | 2023/06/13-20:11:43.720169 b914 Options.bottommost_compression_opts.max_dict_bytes: 0 |
| | | 2023/06/13-20:11:43.720172 b914 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 |
| | | 2023/06/13-20:11:43.720175 b914 Options.bottommost_compression_opts.enabled: false |
| | | 2023/06/13-20:11:43.720178 b914 Options.compression_opts.window_bits: -14 |
| | | 2023/06/13-20:11:43.720181 b914 Options.compression_opts.level: 32767 |
| | | 2023/06/13-20:11:43.720184 b914 Options.compression_opts.strategy: 0 |
| | | 2023/06/13-20:11:43.720187 b914 Options.compression_opts.max_dict_bytes: 0 |
| | | 2023/06/13-20:11:43.720190 b914 Options.compression_opts.zstd_max_train_bytes: 0 |
| | | 2023/06/13-20:11:43.720194 b914 Options.compression_opts.enabled: false |
| | | 2023/06/13-20:11:43.720197 b914 Options.level0_file_num_compaction_trigger: 10 |
| | | 2023/06/13-20:11:43.720200 b914 Options.level0_slowdown_writes_trigger: 20 |
| | | 2023/06/13-20:11:43.720203 b914 Options.level0_stop_writes_trigger: 40 |
| | | 2023/06/13-20:11:43.720206 b914 Options.target_file_size_base: 67108864 |
| | | 2023/06/13-20:11:43.720209 b914 Options.target_file_size_multiplier: 1 |
| | | 2023/06/13-20:11:43.720212 b914 Options.max_bytes_for_level_base: 536870912 |
| | | 2023/06/13-20:11:43.720215 b914 Options.level_compaction_dynamic_level_bytes: 0 |
| | | 2023/06/13-20:11:43.720218 b914 Options.max_bytes_for_level_multiplier: 10.000000 |
| | | 2023/06/13-20:11:43.720223 b914 Options.max_bytes_for_level_multiplier_addtl[0]: 1 |
| | | 2023/06/13-20:11:43.720226 b914 Options.max_bytes_for_level_multiplier_addtl[1]: 1 |
| | | 2023/06/13-20:11:43.720229 b914 Options.max_bytes_for_level_multiplier_addtl[2]: 1 |
| | | 2023/06/13-20:11:43.720232 b914 Options.max_bytes_for_level_multiplier_addtl[3]: 1 |
| | | 2023/06/13-20:11:43.720235 b914 Options.max_bytes_for_level_multiplier_addtl[4]: 1 |
| | | 2023/06/13-20:11:43.720239 b914 Options.max_bytes_for_level_multiplier_addtl[5]: 1 |
| | | 2023/06/13-20:11:43.720242 b914 Options.max_bytes_for_level_multiplier_addtl[6]: 1 |
| | | 2023/06/13-20:11:43.720245 b914 Options.max_sequential_skip_in_iterations: 8 |
| | | 2023/06/13-20:11:43.720248 b914 Options.max_compaction_bytes: 1677721600 |
| | | 2023/06/13-20:11:43.720251 b914 Options.arena_block_size: 8388608 |
| | | 2023/06/13-20:11:43.720254 b914 Options.soft_pending_compaction_bytes_limit: 68719476736 |
| | | 2023/06/13-20:11:43.720257 b914 Options.hard_pending_compaction_bytes_limit: 274877906944 |
| | | 2023/06/13-20:11:43.720261 b914 Options.rate_limit_delay_max_milliseconds: 100 |
| | | 2023/06/13-20:11:43.720264 b914 Options.disable_auto_compactions: 0 |
| | | 2023/06/13-20:11:43.720268 b914 Options.compaction_style: kCompactionStyleLevel |
| | | 2023/06/13-20:11:43.720271 b914 Options.compaction_pri: kByCompensatedSize |
| | | 2023/06/13-20:11:43.720276 b914 Options.compaction_options_universal.size_ratio: 1 |
| | | 2023/06/13-20:11:43.720280 b914 Options.compaction_options_universal.min_merge_width: 2 |
| | | 2023/06/13-20:11:43.720283 b914 Options.compaction_options_universal.max_merge_width: 4294967295 |
| | | 2023/06/13-20:11:43.720286 b914 Options.compaction_options_universal.max_size_amplification_percent: 200 |
| | | 2023/06/13-20:11:43.720289 b914 Options.compaction_options_universal.compression_size_percent: -1 |
| | | 2023/06/13-20:11:43.720293 b914 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize |
| | | 2023/06/13-20:11:43.720296 b914 Options.compaction_options_fifo.max_table_files_size: 1073741824 |
| | | 2023/06/13-20:11:43.720299 b914 Options.compaction_options_fifo.allow_compaction: 0 |
| | | 2023/06/13-20:11:43.720302 b914 Options.compaction_options_fifo.ttl: 0 |
| | | 2023/06/13-20:11:43.720305 b914 Options.table_properties_collectors: |
| | | 2023/06/13-20:11:43.720309 b914 Options.inplace_update_support: 0 |
| | | 2023/06/13-20:11:43.720312 b914 Options.inplace_update_num_locks: 10000 |
| | | 2023/06/13-20:11:43.720315 b914 Options.memtable_prefix_bloom_size_ratio: 0.125000 |
| | | 2023/06/13-20:11:43.720319 b914 Options.memtable_huge_page_size: 0 |
| | | 2023/06/13-20:11:43.720322 b914 Options.bloom_locality: 0 |
| | | 2023/06/13-20:11:43.720325 b914 Options.max_successive_merges: 0 |
| | | 2023/06/13-20:11:43.720328 b914 Options.optimize_filters_for_hits: 0 |
| | | 2023/06/13-20:11:43.720331 b914 Options.paranoid_file_checks: 0 |
| | | 2023/06/13-20:11:43.720334 b914 Options.force_consistency_checks: 1 |
| | | 2023/06/13-20:11:43.720337 b914 Options.report_bg_io_stats: 0 |
| | | 2023/06/13-20:11:43.720340 b914 Options.ttl: 0 |
| | | 2023/06/13-20:11:43.723247 b914 [db\version_set.cc:3724] Recovered from manifest file:E:\IDEA Workspaces\PlayPai\nacos\data\protocol\raft\naming_instance_metadata\log/MANIFEST-000001 succeeded,manifest_file_number is 1, next_file_number is 3, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 |
| | | 2023/06/13-20:11:43.723263 b914 [db\version_set.cc:3732] Column family [default] (ID 0), log number is 0 |
| | | 2023/06/13-20:11:43.723807 b914 [db\version_set.cc:3037] Creating manifest 4 |
| | | 2023/06/13-20:11:43.777462 b914 [db\column_family.cc:474] --------------- Options for column family [Configuration]: |
| | | 2023/06/13-20:11:43.777472 b914 Options.comparator: leveldb.BytewiseComparator |
| | | 2023/06/13-20:11:43.777476 b914 Options.merge_operator: StringAppendOperator |
| | | 2023/06/13-20:11:43.777479 b914 Options.compaction_filter: None |
| | | 2023/06/13-20:11:43.777482 b914 Options.compaction_filter_factory: None |
| | | 2023/06/13-20:11:43.777485 b914 Options.memtable_factory: SkipListFactory |
| | | 2023/06/13-20:11:43.777489 b914 Options.table_factory: BlockBasedTable |
| | | 2023/06/13-20:11:43.777520 b914 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (00000000258ACBD0) |
| | | cache_index_and_filter_blocks: 0 |
| | | cache_index_and_filter_blocks_with_high_priority: 1 |
| | | pin_l0_filter_and_index_blocks_in_cache: 1 |
| | | pin_top_level_index_and_filter: 1 |
| | | index_type: 2 |
| | | hash_index_allow_collision: 1 |
| | | checksum: 1 |
| | | no_block_cache: 0 |
| | | block_cache: 0000000000646BA0 |
| | | block_cache_name: LRUCache |
| | | block_cache_options: |
| | | capacity : 536870912 |
| | | num_shard_bits : 8 |
| | | strict_capacity_limit : 0 |
| | | memory_allocator : None |
| | | high_pri_pool_ratio: 0.000 |
| | | block_cache_compressed: 0000000000000000 |
| | | persistent_cache: 0000000000000000 |
| | | block_size: 4096 |
| | | block_size_deviation: 10 |
| | | block_restart_interval: 16 |
| | | index_block_restart_interval: 1 |
| | | metadata_block_size: 8192 |
| | | partition_filters: 1 |
| | | use_delta_encoding: 1 |
| | | filter_policy: nullptr |
| | | whole_key_filtering: 1 |
| | | verify_compression: 0 |
| | | read_amp_bytes_per_bit: 0 |
| | | format_version: 0 |
| | | enable_index_compression: 1 |
| | | block_align: 0 |
| | | 2023/06/13-20:11:43.777525 b914 Options.write_buffer_size: 67108864 |
| | | 2023/06/13-20:11:43.777562 b914 Options.max_write_buffer_number: 3 |
| | | 2023/06/13-20:11:43.777567 b914 Options.compression: Snappy |
| | | 2023/06/13-20:11:43.777570 b914 Options.bottommost_compression: Disabled |
| | | 2023/06/13-20:11:43.777574 b914 Options.prefix_extractor: rocksdb.FixedPrefix.8 |
| | | 2023/06/13-20:11:43.777577 b914 Options.memtable_insert_with_hint_prefix_extractor: nullptr |
| | | 2023/06/13-20:11:43.777580 b914 Options.num_levels: 7 |
| | | 2023/06/13-20:11:43.777583 b914 Options.min_write_buffer_number_to_merge: 1 |
| | | 2023/06/13-20:11:43.777586 b914 Options.max_write_buffer_number_to_maintain: 0 |
| | | 2023/06/13-20:11:43.777591 b914 Options.bottommost_compression_opts.window_bits: -14 |
| | | 2023/06/13-20:11:43.777594 b914 Options.bottommost_compression_opts.level: 32767 |
| | | 2023/06/13-20:11:43.777597 b914 Options.bottommost_compression_opts.strategy: 0 |
| | | 2023/06/13-20:11:43.777600 b914 Options.bottommost_compression_opts.max_dict_bytes: 0 |
| | | 2023/06/13-20:11:43.777604 b914 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 |
| | | 2023/06/13-20:11:43.777607 b914 Options.bottommost_compression_opts.enabled: false |
| | | 2023/06/13-20:11:43.777610 b914 Options.compression_opts.window_bits: -14 |
| | | 2023/06/13-20:11:43.777613 b914 Options.compression_opts.level: 32767 |
| | | 2023/06/13-20:11:43.777616 b914 Options.compression_opts.strategy: 0 |
| | | 2023/06/13-20:11:43.777619 b914 Options.compression_opts.max_dict_bytes: 0 |
| | | 2023/06/13-20:11:43.777622 b914 Options.compression_opts.zstd_max_train_bytes: 0 |
| | | 2023/06/13-20:11:43.777625 b914 Options.compression_opts.enabled: false |
| | | 2023/06/13-20:11:43.777628 b914 Options.level0_file_num_compaction_trigger: 10 |
| | | 2023/06/13-20:11:43.777631 b914 Options.level0_slowdown_writes_trigger: 20 |
| | | 2023/06/13-20:11:43.777634 b914 Options.level0_stop_writes_trigger: 40 |
| | | 2023/06/13-20:11:43.777637 b914 Options.target_file_size_base: 67108864 |
| | | 2023/06/13-20:11:43.777641 b914 Options.target_file_size_multiplier: 1 |
| | | 2023/06/13-20:11:43.777644 b914 Options.max_bytes_for_level_base: 536870912 |
| | | 2023/06/13-20:11:43.777647 b914 Options.level_compaction_dynamic_level_bytes: 0 |
| | | 2023/06/13-20:11:43.777650 b914 Options.max_bytes_for_level_multiplier: 10.000000 |
| | | 2023/06/13-20:11:43.777655 b914 Options.max_bytes_for_level_multiplier_addtl[0]: 1 |
| | | 2023/06/13-20:11:43.777658 b914 Options.max_bytes_for_level_multiplier_addtl[1]: 1 |
| | | 2023/06/13-20:11:43.777661 b914 Options.max_bytes_for_level_multiplier_addtl[2]: 1 |
| | | 2023/06/13-20:11:43.777664 b914 Options.max_bytes_for_level_multiplier_addtl[3]: 1 |
| | | 2023/06/13-20:11:43.777668 b914 Options.max_bytes_for_level_multiplier_addtl[4]: 1 |
| | | 2023/06/13-20:11:43.777671 b914 Options.max_bytes_for_level_multiplier_addtl[5]: 1 |
| | | 2023/06/13-20:11:43.777674 b914 Options.max_bytes_for_level_multiplier_addtl[6]: 1 |
| | | 2023/06/13-20:11:43.777677 b914 Options.max_sequential_skip_in_iterations: 8 |
| | | 2023/06/13-20:11:43.777680 b914 Options.max_compaction_bytes: 1677721600 |
| | | 2023/06/13-20:11:43.777683 b914 Options.arena_block_size: 8388608 |
| | | 2023/06/13-20:11:43.777686 b914 Options.soft_pending_compaction_bytes_limit: 68719476736 |
| | | 2023/06/13-20:11:43.777689 b914 Options.hard_pending_compaction_bytes_limit: 274877906944 |
| | | 2023/06/13-20:11:43.777692 b914 Options.rate_limit_delay_max_milliseconds: 100 |
| | | 2023/06/13-20:11:43.777696 b914 Options.disable_auto_compactions: 0 |
| | | 2023/06/13-20:11:43.777699 b914 Options.compaction_style: kCompactionStyleLevel |
| | | 2023/06/13-20:11:43.777703 b914 Options.compaction_pri: kByCompensatedSize |
| | | 2023/06/13-20:11:43.777706 b914 Options.compaction_options_universal.size_ratio: 1 |
| | | 2023/06/13-20:11:43.777709 b914 Options.compaction_options_universal.min_merge_width: 2 |
| | | 2023/06/13-20:11:43.777712 b914 Options.compaction_options_universal.max_merge_width: 4294967295 |
| | | 2023/06/13-20:11:43.777717 b914 Options.compaction_options_universal.max_size_amplification_percent: 200 |
| | | 2023/06/13-20:11:43.777721 b914 Options.compaction_options_universal.compression_size_percent: -1 |
| | | 2023/06/13-20:11:43.777724 b914 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize |
| | | 2023/06/13-20:11:43.777727 b914 Options.compaction_options_fifo.max_table_files_size: 1073741824 |
| | | 2023/06/13-20:11:43.777731 b914 Options.compaction_options_fifo.allow_compaction: 0 |
| | | 2023/06/13-20:11:43.777734 b914 Options.compaction_options_fifo.ttl: 0 |
| | | 2023/06/13-20:11:43.777737 b914 Options.table_properties_collectors: |
| | | 2023/06/13-20:11:43.777740 b914 Options.inplace_update_support: 0 |
| | | 2023/06/13-20:11:43.777743 b914 Options.inplace_update_num_locks: 10000 |
| | | 2023/06/13-20:11:43.777746 b914 Options.memtable_prefix_bloom_size_ratio: 0.125000 |
| | | 2023/06/13-20:11:43.777750 b914 Options.memtable_huge_page_size: 0 |
| | | 2023/06/13-20:11:43.777753 b914 Options.bloom_locality: 0 |
| | | 2023/06/13-20:11:43.777756 b914 Options.max_successive_merges: 0 |
| | | 2023/06/13-20:11:43.777759 b914 Options.optimize_filters_for_hits: 0 |
| | | 2023/06/13-20:11:43.777762 b914 Options.paranoid_file_checks: 0 |
| | | 2023/06/13-20:11:43.777765 b914 Options.force_consistency_checks: 1 |
| | | 2023/06/13-20:11:43.777768 b914 Options.report_bg_io_stats: 0 |
| | | 2023/06/13-20:11:43.777771 b914 Options.ttl: 0 |
| | | 2023/06/13-20:11:43.779325 b914 [db\db_impl.cc:1606] Created column family [Configuration] (ID 1) |
| | | 2023/06/13-20:11:43.835284 b914 [db\db_impl_open.cc:1314] DB pointer 0000000025961900 |
| | | 2023/06/13-20:11:43.835661 147f8 [WARN] [db\db_impl.cc:669] ------- DUMPING STATS ------- |
| | | 2023/06/13-20:11:43.835674 147f8 [WARN] [db\db_impl.cc:670] |
| | | ** DB Stats ** |
| | | Uptime(secs): 0.1 total, 0.1 interval |
| | | Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s |
| | | Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s |
| | | Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent |
| | | Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s |
| | | Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 MB, 0.00 MB/s |
| | | Interval stall: 00:00:0.000 H:M:S, 0.0 percent |
| | | |
| | | ** Compaction Stats [default] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 0.1 total, 0.1 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [default] ** |
| | | |
| | | ** Compaction Stats [Configuration] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 0.1 total, 0.1 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [Configuration] ** |
| | | |
| | | ** Compaction Stats [default] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 0.1 total, 0.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [default] ** |
| | | |
| | | ** Compaction Stats [Configuration] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 0.1 total, 0.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [Configuration] ** |
| | | 2023/06/13-20:11:43.836072 147f8 [WARN] [db\db_impl.cc:617] STATISTICS: |
| | | rocksdb.block.cache.miss COUNT : 0 |
| | | rocksdb.block.cache.hit COUNT : 0 |
| | | rocksdb.block.cache.add COUNT : 0 |
| | | rocksdb.block.cache.add.failures COUNT : 0 |
| | | rocksdb.block.cache.index.miss COUNT : 0 |
| | | rocksdb.block.cache.index.hit COUNT : 0 |
| | | rocksdb.block.cache.index.add COUNT : 0 |
| | | rocksdb.block.cache.index.bytes.insert COUNT : 0 |
| | | rocksdb.block.cache.index.bytes.evict COUNT : 0 |
| | | rocksdb.block.cache.filter.miss COUNT : 0 |
| | | rocksdb.block.cache.filter.hit COUNT : 0 |
| | | rocksdb.block.cache.filter.add COUNT : 0 |
| | | rocksdb.block.cache.filter.bytes.insert COUNT : 0 |
| | | rocksdb.block.cache.filter.bytes.evict COUNT : 0 |
| | | rocksdb.block.cache.data.miss COUNT : 0 |
| | | rocksdb.block.cache.data.hit COUNT : 0 |
| | | rocksdb.block.cache.data.add COUNT : 0 |
| | | rocksdb.block.cache.data.bytes.insert COUNT : 0 |
| | | rocksdb.block.cache.bytes.read COUNT : 0 |
| | | rocksdb.block.cache.bytes.write COUNT : 0 |
| | | rocksdb.bloom.filter.useful COUNT : 0 |
| | | rocksdb.bloom.filter.full.positive COUNT : 0 |
| | | rocksdb.bloom.filter.full.true.positive COUNT : 0 |
| | | rocksdb.persistent.cache.hit COUNT : 0 |
| | | rocksdb.persistent.cache.miss COUNT : 0 |
| | | rocksdb.sim.block.cache.hit COUNT : 0 |
| | | rocksdb.sim.block.cache.miss COUNT : 0 |
| | | rocksdb.memtable.hit COUNT : 0 |
| | | rocksdb.memtable.miss COUNT : 1 |
| | | rocksdb.l0.hit COUNT : 0 |
| | | rocksdb.l1.hit COUNT : 0 |
| | | rocksdb.l2andup.hit COUNT : 0 |
| | | rocksdb.compaction.key.drop.new COUNT : 0 |
| | | rocksdb.compaction.key.drop.obsolete COUNT : 0 |
| | | rocksdb.compaction.key.drop.range_del COUNT : 0 |
| | | rocksdb.compaction.key.drop.user COUNT : 0 |
| | | rocksdb.compaction.range_del.drop.obsolete COUNT : 0 |
| | | rocksdb.compaction.optimized.del.drop.obsolete COUNT : 0 |
| | | rocksdb.compaction.cancelled COUNT : 0 |
| | | rocksdb.number.keys.written COUNT : 0 |
| | | rocksdb.number.keys.read COUNT : 1 |
| | | rocksdb.number.keys.updated COUNT : 0 |
| | | rocksdb.bytes.written COUNT : 0 |
| | | rocksdb.bytes.read COUNT : 0 |
| | | rocksdb.number.db.seek COUNT : 3 |
| | | rocksdb.number.db.next COUNT : 0 |
| | | rocksdb.number.db.prev COUNT : 0 |
| | | rocksdb.number.db.seek.found COUNT : 0 |
| | | rocksdb.number.db.next.found COUNT : 0 |
| | | rocksdb.number.db.prev.found COUNT : 0 |
| | | rocksdb.db.iter.bytes.read COUNT : 0 |
| | | rocksdb.no.file.closes COUNT : 0 |
| | | rocksdb.no.file.opens COUNT : 0 |
| | | rocksdb.no.file.errors COUNT : 0 |
| | | rocksdb.l0.slowdown.micros COUNT : 0 |
| | | rocksdb.memtable.compaction.micros COUNT : 0 |
| | | rocksdb.l0.num.files.stall.micros COUNT : 0 |
| | | rocksdb.stall.micros COUNT : 0 |
| | | rocksdb.db.mutex.wait.micros COUNT : 0 |
| | | rocksdb.rate.limit.delay.millis COUNT : 0 |
| | | rocksdb.num.iterators COUNT : 0 |
| | | rocksdb.number.multiget.get COUNT : 0 |
| | | rocksdb.number.multiget.keys.read COUNT : 0 |
| | | rocksdb.number.multiget.bytes.read COUNT : 0 |
| | | rocksdb.number.deletes.filtered COUNT : 0 |
| | | rocksdb.number.merge.failures COUNT : 0 |
| | | rocksdb.bloom.filter.prefix.checked COUNT : 0 |
| | | rocksdb.bloom.filter.prefix.useful COUNT : 0 |
| | | rocksdb.number.reseeks.iteration COUNT : 0 |
| | | rocksdb.getupdatessince.calls COUNT : 0 |
| | | rocksdb.block.cachecompressed.miss COUNT : 0 |
| | | rocksdb.block.cachecompressed.hit COUNT : 0 |
| | | rocksdb.block.cachecompressed.add COUNT : 0 |
| | | rocksdb.block.cachecompressed.add.failures COUNT : 0 |
| | | rocksdb.wal.synced COUNT : 0 |
| | | rocksdb.wal.bytes COUNT : 0 |
| | | rocksdb.write.self COUNT : 0 |
| | | rocksdb.write.other COUNT : 0 |
| | | rocksdb.write.timeout COUNT : 0 |
| | | rocksdb.write.wal COUNT : 0 |
| | | rocksdb.compact.read.bytes COUNT : 0 |
| | | rocksdb.compact.write.bytes COUNT : 0 |
| | | rocksdb.flush.write.bytes COUNT : 0 |
| | | rocksdb.number.direct.load.table.properties COUNT : 0 |
| | | rocksdb.number.superversion_acquires COUNT : 2 |
| | | rocksdb.number.superversion_releases COUNT : 0 |
| | | rocksdb.number.superversion_cleanups COUNT : 0 |
| | | rocksdb.number.block.compressed COUNT : 0 |
| | | rocksdb.number.block.decompressed COUNT : 0 |
| | | rocksdb.number.block.not_compressed COUNT : 0 |
| | | rocksdb.merge.operation.time.nanos COUNT : 0 |
| | | rocksdb.filter.operation.time.nanos COUNT : 0 |
| | | rocksdb.row.cache.hit COUNT : 0 |
| | | rocksdb.row.cache.miss COUNT : 0 |
| | | rocksdb.read.amp.estimate.useful.bytes COUNT : 0 |
| | | rocksdb.read.amp.total.read.bytes COUNT : 0 |
| | | rocksdb.number.rate_limiter.drains COUNT : 0 |
| | | rocksdb.number.iter.skip COUNT : 0 |
| | | rocksdb.blobdb.num.put COUNT : 0 |
| | | rocksdb.blobdb.num.write COUNT : 0 |
| | | rocksdb.blobdb.num.get COUNT : 0 |
| | | rocksdb.blobdb.num.multiget COUNT : 0 |
| | | rocksdb.blobdb.num.seek COUNT : 0 |
| | | rocksdb.blobdb.num.next COUNT : 0 |
| | | rocksdb.blobdb.num.prev COUNT : 0 |
| | | rocksdb.blobdb.num.keys.written COUNT : 0 |
| | | rocksdb.blobdb.num.keys.read COUNT : 0 |
| | | rocksdb.blobdb.bytes.written COUNT : 0 |
| | | rocksdb.blobdb.bytes.read COUNT : 0 |
| | | rocksdb.blobdb.write.inlined COUNT : 0 |
| | | rocksdb.blobdb.write.inlined.ttl COUNT : 0 |
| | | rocksdb.blobdb.write.blob COUNT : 0 |
| | | rocksdb.blobdb.write.blob.ttl COUNT : 0 |
| | | rocksdb.blobdb.blob.file.bytes.written COUNT : 0 |
| | | rocksdb.blobdb.blob.file.bytes.read COUNT : 0 |
| | | rocksdb.blobdb.blob.file.synced COUNT : 0 |
| | | rocksdb.blobdb.blob.index.expired.count COUNT : 0 |
| | | rocksdb.blobdb.blob.index.expired.size COUNT : 0 |
| | | rocksdb.blobdb.blob.index.evicted.count COUNT : 0 |
| | | rocksdb.blobdb.blob.index.evicted.size COUNT : 0 |
| | | rocksdb.blobdb.gc.num.files COUNT : 0 |
| | | rocksdb.blobdb.gc.num.new.files COUNT : 0 |
| | | rocksdb.blobdb.gc.failures COUNT : 0 |
| | | rocksdb.blobdb.gc.num.keys.overwritten COUNT : 0 |
| | | rocksdb.blobdb.gc.num.keys.expired COUNT : 0 |
| | | rocksdb.blobdb.gc.num.keys.relocated COUNT : 0 |
| | | rocksdb.blobdb.gc.bytes.overwritten COUNT : 0 |
| | | rocksdb.blobdb.gc.bytes.expired COUNT : 0 |
| | | rocksdb.blobdb.gc.bytes.relocated COUNT : 0 |
| | | rocksdb.blobdb.fifo.num.files.evicted COUNT : 0 |
| | | rocksdb.blobdb.fifo.num.keys.evicted COUNT : 0 |
| | | rocksdb.blobdb.fifo.bytes.evicted COUNT : 0 |
| | | rocksdb.txn.overhead.mutex.prepare COUNT : 0 |
| | | rocksdb.txn.overhead.mutex.old.commit.map COUNT : 0 |
| | | rocksdb.txn.overhead.duplicate.key COUNT : 0 |
| | | rocksdb.txn.overhead.mutex.snapshot COUNT : 0 |
| | | rocksdb.number.multiget.keys.found COUNT : 0 |
| | | rocksdb.num.iterator.created COUNT : 3 |
| | | rocksdb.num.iterator.deleted COUNT : 3 |
| | | rocksdb.db.get.micros P50 : 2.000000 P95 : 2.000000 P99 : 2.000000 P100 : 2.000000 COUNT : 1 SUM : 2 |
| | | rocksdb.db.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.compaction.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.subcompaction.setup.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.table.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.compaction.outfile.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.wal.file.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.manifest.file.sync.micros P50 : 27299.000000 P95 : 27299.000000 P99 : 27299.000000 P100 : 27299.000000 COUNT : 2 SUM : 50582 |
| | | rocksdb.table.open.io.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.read.block.compaction.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.read.block.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.write.raw.block.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.l0.slowdown.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.memtable.compaction.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.num.files.stall.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.hard.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.soft.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.numfiles.in.singlecompaction P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.write.stall P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.sst.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.num.subcompactions.scheduled P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.per.read P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 1 SUM : 0 |
| | | rocksdb.bytes.per.write P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.per.multiget P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.compressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.decompressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.compression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.decompression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.read.num.merge_operands P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.key.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.value.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.next.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.prev.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.blob.file.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.blob.file.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.blob.file.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.gc.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.compression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.decompression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.flush.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | 2023/06/13-20:21:43.842579 147f8 [WARN] [db\db_impl.cc:669] ------- DUMPING STATS ------- |
| | | 2023/06/13-20:21:43.842602 147f8 [WARN] [db\db_impl.cc:670] |
| | | ** DB Stats ** |
| | | Uptime(secs): 600.1 total, 600.0 interval |
| | | Cumulative writes: 1 writes, 2 keys, 1 commit groups, 0.5 writes per commit group, ingest: 0.00 GB, 0.00 MB/s |
| | | Cumulative WAL: 1 writes, 1 syncs, 0.50 writes per sync, written: 0.00 GB, 0.00 MB/s |
| | | Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent |
| | | Interval writes: 1 writes, 2 keys, 1 commit groups, 0.5 writes per commit group, ingest: 0.00 MB, 0.00 MB/s |
| | | Interval WAL: 1 writes, 1 syncs, 0.50 writes per sync, written: 0.00 MB, 0.00 MB/s |
| | | Interval stall: 00:00:0.000 H:M:S, 0.0 percent |
| | | |
| | | ** Compaction Stats [default] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 600.1 total, 600.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [default] ** |
| | | |
| | | ** Compaction Stats [Configuration] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 600.1 total, 600.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [Configuration] ** |
| | | |
| | | ** Compaction Stats [default] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 600.1 total, 0.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [default] ** |
| | | |
| | | ** Compaction Stats [Configuration] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 600.1 total, 0.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [Configuration] ** |
| | | 2023/06/13-20:21:43.842941 147f8 [WARN] [db\db_impl.cc:617] STATISTICS: |
| | | rocksdb.block.cache.miss COUNT : 0 |
| | | rocksdb.block.cache.hit COUNT : 0 |
| | | rocksdb.block.cache.add COUNT : 0 |
| | | rocksdb.block.cache.add.failures COUNT : 0 |
| | | rocksdb.block.cache.index.miss COUNT : 0 |
| | | rocksdb.block.cache.index.hit COUNT : 0 |
| | | rocksdb.block.cache.index.add COUNT : 0 |
| | | rocksdb.block.cache.index.bytes.insert COUNT : 0 |
| | | rocksdb.block.cache.index.bytes.evict COUNT : 0 |
| | | rocksdb.block.cache.filter.miss COUNT : 0 |
| | | rocksdb.block.cache.filter.hit COUNT : 0 |
| | | rocksdb.block.cache.filter.add COUNT : 0 |
| | | rocksdb.block.cache.filter.bytes.insert COUNT : 0 |
| | | rocksdb.block.cache.filter.bytes.evict COUNT : 0 |
| | | rocksdb.block.cache.data.miss COUNT : 0 |
| | | rocksdb.block.cache.data.hit COUNT : 0 |
| | | rocksdb.block.cache.data.add COUNT : 0 |
| | | rocksdb.block.cache.data.bytes.insert COUNT : 0 |
| | | rocksdb.block.cache.bytes.read COUNT : 0 |
| | | rocksdb.block.cache.bytes.write COUNT : 0 |
| | | rocksdb.bloom.filter.useful COUNT : 0 |
| | | rocksdb.bloom.filter.full.positive COUNT : 0 |
| | | rocksdb.bloom.filter.full.true.positive COUNT : 0 |
| | | rocksdb.persistent.cache.hit COUNT : 0 |
| | | rocksdb.persistent.cache.miss COUNT : 0 |
| | | rocksdb.sim.block.cache.hit COUNT : 0 |
| | | rocksdb.sim.block.cache.miss COUNT : 0 |
| | | rocksdb.memtable.hit COUNT : 0 |
| | | rocksdb.memtable.miss COUNT : 1 |
| | | rocksdb.l0.hit COUNT : 0 |
| | | rocksdb.l1.hit COUNT : 0 |
| | | rocksdb.l2andup.hit COUNT : 0 |
| | | rocksdb.compaction.key.drop.new COUNT : 0 |
| | | rocksdb.compaction.key.drop.obsolete COUNT : 0 |
| | | rocksdb.compaction.key.drop.range_del COUNT : 0 |
| | | rocksdb.compaction.key.drop.user COUNT : 0 |
| | | rocksdb.compaction.range_del.drop.obsolete COUNT : 0 |
| | | rocksdb.compaction.optimized.del.drop.obsolete COUNT : 0 |
| | | rocksdb.compaction.cancelled COUNT : 0 |
| | | rocksdb.number.keys.written COUNT : 2 |
| | | rocksdb.number.keys.read COUNT : 1 |
| | | rocksdb.number.keys.updated COUNT : 0 |
| | | rocksdb.bytes.written COUNT : 105 |
| | | rocksdb.bytes.read COUNT : 0 |
| | | rocksdb.number.db.seek COUNT : 3 |
| | | rocksdb.number.db.next COUNT : 0 |
| | | rocksdb.number.db.prev COUNT : 0 |
| | | rocksdb.number.db.seek.found COUNT : 0 |
| | | rocksdb.number.db.next.found COUNT : 0 |
| | | rocksdb.number.db.prev.found COUNT : 0 |
| | | rocksdb.db.iter.bytes.read COUNT : 0 |
| | | rocksdb.no.file.closes COUNT : 0 |
| | | rocksdb.no.file.opens COUNT : 0 |
| | | rocksdb.no.file.errors COUNT : 0 |
| | | rocksdb.l0.slowdown.micros COUNT : 0 |
| | | rocksdb.memtable.compaction.micros COUNT : 0 |
| | | rocksdb.l0.num.files.stall.micros COUNT : 0 |
| | | rocksdb.stall.micros COUNT : 0 |
| | | rocksdb.db.mutex.wait.micros COUNT : 0 |
| | | rocksdb.rate.limit.delay.millis COUNT : 0 |
| | | rocksdb.num.iterators COUNT : 0 |
| | | rocksdb.number.multiget.get COUNT : 0 |
| | | rocksdb.number.multiget.keys.read COUNT : 0 |
| | | rocksdb.number.multiget.bytes.read COUNT : 0 |
| | | rocksdb.number.deletes.filtered COUNT : 0 |
| | | rocksdb.number.merge.failures COUNT : 0 |
| | | rocksdb.bloom.filter.prefix.checked COUNT : 0 |
| | | rocksdb.bloom.filter.prefix.useful COUNT : 0 |
| | | rocksdb.number.reseeks.iteration COUNT : 0 |
| | | rocksdb.getupdatessince.calls COUNT : 0 |
| | | rocksdb.block.cachecompressed.miss COUNT : 0 |
| | | rocksdb.block.cachecompressed.hit COUNT : 0 |
| | | rocksdb.block.cachecompressed.add COUNT : 0 |
| | | rocksdb.block.cachecompressed.add.failures COUNT : 0 |
| | | rocksdb.wal.synced COUNT : 1 |
| | | rocksdb.wal.bytes COUNT : 105 |
| | | rocksdb.write.self COUNT : 1 |
| | | rocksdb.write.other COUNT : 0 |
| | | rocksdb.write.timeout COUNT : 0 |
| | | rocksdb.write.wal COUNT : 2 |
| | | rocksdb.compact.read.bytes COUNT : 0 |
| | | rocksdb.compact.write.bytes COUNT : 0 |
| | | rocksdb.flush.write.bytes COUNT : 0 |
| | | rocksdb.number.direct.load.table.properties COUNT : 0 |
| | | rocksdb.number.superversion_acquires COUNT : 2 |
| | | rocksdb.number.superversion_releases COUNT : 0 |
| | | rocksdb.number.superversion_cleanups COUNT : 0 |
| | | rocksdb.number.block.compressed COUNT : 0 |
| | | rocksdb.number.block.decompressed COUNT : 0 |
| | | rocksdb.number.block.not_compressed COUNT : 0 |
| | | rocksdb.merge.operation.time.nanos COUNT : 0 |
| | | rocksdb.filter.operation.time.nanos COUNT : 0 |
| | | rocksdb.row.cache.hit COUNT : 0 |
| | | rocksdb.row.cache.miss COUNT : 0 |
| | | rocksdb.read.amp.estimate.useful.bytes COUNT : 0 |
| | | rocksdb.read.amp.total.read.bytes COUNT : 0 |
| | | rocksdb.number.rate_limiter.drains COUNT : 0 |
| | | rocksdb.number.iter.skip COUNT : 0 |
| | | rocksdb.blobdb.num.put COUNT : 0 |
| | | rocksdb.blobdb.num.write COUNT : 0 |
| | | rocksdb.blobdb.num.get COUNT : 0 |
| | | rocksdb.blobdb.num.multiget COUNT : 0 |
| | | rocksdb.blobdb.num.seek COUNT : 0 |
| | | rocksdb.blobdb.num.next COUNT : 0 |
| | | rocksdb.blobdb.num.prev COUNT : 0 |
| | | rocksdb.blobdb.num.keys.written COUNT : 0 |
| | | rocksdb.blobdb.num.keys.read COUNT : 0 |
| | | rocksdb.blobdb.bytes.written COUNT : 0 |
| | | rocksdb.blobdb.bytes.read COUNT : 0 |
| | | rocksdb.blobdb.write.inlined COUNT : 0 |
| | | rocksdb.blobdb.write.inlined.ttl COUNT : 0 |
| | | rocksdb.blobdb.write.blob COUNT : 0 |
| | | rocksdb.blobdb.write.blob.ttl COUNT : 0 |
| | | rocksdb.blobdb.blob.file.bytes.written COUNT : 0 |
| | | rocksdb.blobdb.blob.file.bytes.read COUNT : 0 |
| | | rocksdb.blobdb.blob.file.synced COUNT : 0 |
| | | rocksdb.blobdb.blob.index.expired.count COUNT : 0 |
| | | rocksdb.blobdb.blob.index.expired.size COUNT : 0 |
| | | rocksdb.blobdb.blob.index.evicted.count COUNT : 0 |
| | | rocksdb.blobdb.blob.index.evicted.size COUNT : 0 |
| | | rocksdb.blobdb.gc.num.files COUNT : 0 |
| | | rocksdb.blobdb.gc.num.new.files COUNT : 0 |
| | | rocksdb.blobdb.gc.failures COUNT : 0 |
| | | rocksdb.blobdb.gc.num.keys.overwritten COUNT : 0 |
| | | rocksdb.blobdb.gc.num.keys.expired COUNT : 0 |
| | | rocksdb.blobdb.gc.num.keys.relocated COUNT : 0 |
| | | rocksdb.blobdb.gc.bytes.overwritten COUNT : 0 |
| | | rocksdb.blobdb.gc.bytes.expired COUNT : 0 |
| | | rocksdb.blobdb.gc.bytes.relocated COUNT : 0 |
| | | rocksdb.blobdb.fifo.num.files.evicted COUNT : 0 |
| | | rocksdb.blobdb.fifo.num.keys.evicted COUNT : 0 |
| | | rocksdb.blobdb.fifo.bytes.evicted COUNT : 0 |
| | | rocksdb.txn.overhead.mutex.prepare COUNT : 0 |
| | | rocksdb.txn.overhead.mutex.old.commit.map COUNT : 0 |
| | | rocksdb.txn.overhead.duplicate.key COUNT : 0 |
| | | rocksdb.txn.overhead.mutex.snapshot COUNT : 0 |
| | | rocksdb.number.multiget.keys.found COUNT : 0 |
| | | rocksdb.num.iterator.created COUNT : 3 |
| | | rocksdb.num.iterator.deleted COUNT : 3 |
| | | rocksdb.db.get.micros P50 : 2.000000 P95 : 2.000000 P99 : 2.000000 P100 : 2.000000 COUNT : 1 SUM : 2 |
| | | rocksdb.db.write.micros P50 : 31606.000000 P95 : 31606.000000 P99 : 31606.000000 P100 : 31606.000000 COUNT : 1 SUM : 31606 |
| | | rocksdb.compaction.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.subcompaction.setup.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.table.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.compaction.outfile.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.wal.file.sync.micros P50 : 31431.000000 P95 : 31431.000000 P99 : 31431.000000 P100 : 31431.000000 COUNT : 1 SUM : 31431 |
| | | rocksdb.manifest.file.sync.micros P50 : 27299.000000 P95 : 27299.000000 P99 : 27299.000000 P100 : 27299.000000 COUNT : 2 SUM : 50582 |
| | | rocksdb.table.open.io.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.read.block.compaction.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.read.block.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.write.raw.block.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.l0.slowdown.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.memtable.compaction.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.num.files.stall.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.hard.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.soft.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.numfiles.in.singlecompaction P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.write.stall P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.sst.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.num.subcompactions.scheduled P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.per.read P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 1 SUM : 0 |
| | | rocksdb.bytes.per.write P50 : 105.000000 P95 : 105.000000 P99 : 105.000000 P100 : 105.000000 COUNT : 1 SUM : 105 |
| | | rocksdb.bytes.per.multiget P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.compressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.decompressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.compression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.decompression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.read.num.merge_operands P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.key.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.value.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.next.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.prev.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.blob.file.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.blob.file.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.blob.file.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.gc.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.compression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.decompression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.flush.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | 2023/06/13-20:31:43.844123 147f8 [WARN] [db\db_impl.cc:669] ------- DUMPING STATS ------- |
| | | 2023/06/13-20:31:43.844149 147f8 [WARN] [db\db_impl.cc:670] |
| | | ** DB Stats ** |
| | | Uptime(secs): 1200.1 total, 600.0 interval |
| | | Cumulative writes: 1 writes, 2 keys, 1 commit groups, 0.5 writes per commit group, ingest: 0.00 GB, 0.00 MB/s |
| | | Cumulative WAL: 1 writes, 1 syncs, 0.50 writes per sync, written: 0.00 GB, 0.00 MB/s |
| | | Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent |
| | | Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s |
| | | Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 MB, 0.00 MB/s |
| | | Interval stall: 00:00:0.000 H:M:S, 0.0 percent |
| | | |
| | | ** Compaction Stats [default] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 1200.1 total, 600.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [default] ** |
| | | |
| | | ** Compaction Stats [Configuration] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 1200.1 total, 600.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [Configuration] ** |
| | | |
| | | ** Compaction Stats [default] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 1200.1 total, 0.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [default] ** |
| | | |
| | | ** Compaction Stats [Configuration] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 1200.1 total, 0.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [Configuration] ** |
| | | 2023/06/13-20:31:43.844501 147f8 [WARN] [db\db_impl.cc:617] STATISTICS: |
| | | rocksdb.block.cache.miss COUNT : 0 |
| | | rocksdb.block.cache.hit COUNT : 0 |
| | | rocksdb.block.cache.add COUNT : 0 |
| | | rocksdb.block.cache.add.failures COUNT : 0 |
| | | rocksdb.block.cache.index.miss COUNT : 0 |
| | | rocksdb.block.cache.index.hit COUNT : 0 |
| | | rocksdb.block.cache.index.add COUNT : 0 |
| | | rocksdb.block.cache.index.bytes.insert COUNT : 0 |
| | | rocksdb.block.cache.index.bytes.evict COUNT : 0 |
| | | rocksdb.block.cache.filter.miss COUNT : 0 |
| | | rocksdb.block.cache.filter.hit COUNT : 0 |
| | | rocksdb.block.cache.filter.add COUNT : 0 |
| | | rocksdb.block.cache.filter.bytes.insert COUNT : 0 |
| | | rocksdb.block.cache.filter.bytes.evict COUNT : 0 |
| | | rocksdb.block.cache.data.miss COUNT : 0 |
| | | rocksdb.block.cache.data.hit COUNT : 0 |
| | | rocksdb.block.cache.data.add COUNT : 0 |
| | | rocksdb.block.cache.data.bytes.insert COUNT : 0 |
| | | rocksdb.block.cache.bytes.read COUNT : 0 |
| | | rocksdb.block.cache.bytes.write COUNT : 0 |
| | | rocksdb.bloom.filter.useful COUNT : 0 |
| | | rocksdb.bloom.filter.full.positive COUNT : 0 |
| | | rocksdb.bloom.filter.full.true.positive COUNT : 0 |
| | | rocksdb.persistent.cache.hit COUNT : 0 |
| | | rocksdb.persistent.cache.miss COUNT : 0 |
| | | rocksdb.sim.block.cache.hit COUNT : 0 |
| | | rocksdb.sim.block.cache.miss COUNT : 0 |
| | | rocksdb.memtable.hit COUNT : 0 |
| | | rocksdb.memtable.miss COUNT : 1 |
| | | rocksdb.l0.hit COUNT : 0 |
| | | rocksdb.l1.hit COUNT : 0 |
| | | rocksdb.l2andup.hit COUNT : 0 |
| | | rocksdb.compaction.key.drop.new COUNT : 0 |
| | | rocksdb.compaction.key.drop.obsolete COUNT : 0 |
| | | rocksdb.compaction.key.drop.range_del COUNT : 0 |
| | | rocksdb.compaction.key.drop.user COUNT : 0 |
| | | rocksdb.compaction.range_del.drop.obsolete COUNT : 0 |
| | | rocksdb.compaction.optimized.del.drop.obsolete COUNT : 0 |
| | | rocksdb.compaction.cancelled COUNT : 0 |
| | | rocksdb.number.keys.written COUNT : 2 |
| | | rocksdb.number.keys.read COUNT : 1 |
| | | rocksdb.number.keys.updated COUNT : 0 |
| | | rocksdb.bytes.written COUNT : 105 |
| | | rocksdb.bytes.read COUNT : 0 |
| | | rocksdb.number.db.seek COUNT : 3 |
| | | rocksdb.number.db.next COUNT : 0 |
| | | rocksdb.number.db.prev COUNT : 0 |
| | | rocksdb.number.db.seek.found COUNT : 0 |
| | | rocksdb.number.db.next.found COUNT : 0 |
| | | rocksdb.number.db.prev.found COUNT : 0 |
| | | rocksdb.db.iter.bytes.read COUNT : 0 |
| | | rocksdb.no.file.closes COUNT : 0 |
| | | rocksdb.no.file.opens COUNT : 0 |
| | | rocksdb.no.file.errors COUNT : 0 |
| | | rocksdb.l0.slowdown.micros COUNT : 0 |
| | | rocksdb.memtable.compaction.micros COUNT : 0 |
| | | rocksdb.l0.num.files.stall.micros COUNT : 0 |
| | | rocksdb.stall.micros COUNT : 0 |
| | | rocksdb.db.mutex.wait.micros COUNT : 0 |
| | | rocksdb.rate.limit.delay.millis COUNT : 0 |
| | | rocksdb.num.iterators COUNT : 0 |
| | | rocksdb.number.multiget.get COUNT : 0 |
| | | rocksdb.number.multiget.keys.read COUNT : 0 |
| | | rocksdb.number.multiget.bytes.read COUNT : 0 |
| | | rocksdb.number.deletes.filtered COUNT : 0 |
| | | rocksdb.number.merge.failures COUNT : 0 |
| | | rocksdb.bloom.filter.prefix.checked COUNT : 0 |
| | | rocksdb.bloom.filter.prefix.useful COUNT : 0 |
| | | rocksdb.number.reseeks.iteration COUNT : 0 |
| | | rocksdb.getupdatessince.calls COUNT : 0 |
| | | rocksdb.block.cachecompressed.miss COUNT : 0 |
| | | rocksdb.block.cachecompressed.hit COUNT : 0 |
| | | rocksdb.block.cachecompressed.add COUNT : 0 |
| | | rocksdb.block.cachecompressed.add.failures COUNT : 0 |
| | | rocksdb.wal.synced COUNT : 1 |
| | | rocksdb.wal.bytes COUNT : 105 |
| | | rocksdb.write.self COUNT : 1 |
| | | rocksdb.write.other COUNT : 0 |
| | | rocksdb.write.timeout COUNT : 0 |
| | | rocksdb.write.wal COUNT : 2 |
| | | rocksdb.compact.read.bytes COUNT : 0 |
| | | rocksdb.compact.write.bytes COUNT : 0 |
| | | rocksdb.flush.write.bytes COUNT : 0 |
| | | rocksdb.number.direct.load.table.properties COUNT : 0 |
| | | rocksdb.number.superversion_acquires COUNT : 2 |
| | | rocksdb.number.superversion_releases COUNT : 0 |
| | | rocksdb.number.superversion_cleanups COUNT : 0 |
| | | rocksdb.number.block.compressed COUNT : 0 |
| | | rocksdb.number.block.decompressed COUNT : 0 |
| | | rocksdb.number.block.not_compressed COUNT : 0 |
| | | rocksdb.merge.operation.time.nanos COUNT : 0 |
| | | rocksdb.filter.operation.time.nanos COUNT : 0 |
| | | rocksdb.row.cache.hit COUNT : 0 |
| | | rocksdb.row.cache.miss COUNT : 0 |
| | | rocksdb.read.amp.estimate.useful.bytes COUNT : 0 |
| | | rocksdb.read.amp.total.read.bytes COUNT : 0 |
| | | rocksdb.number.rate_limiter.drains COUNT : 0 |
| | | rocksdb.number.iter.skip COUNT : 0 |
| | | rocksdb.blobdb.num.put COUNT : 0 |
| | | rocksdb.blobdb.num.write COUNT : 0 |
| | | rocksdb.blobdb.num.get COUNT : 0 |
| | | rocksdb.blobdb.num.multiget COUNT : 0 |
| | | rocksdb.blobdb.num.seek COUNT : 0 |
| | | rocksdb.blobdb.num.next COUNT : 0 |
| | | rocksdb.blobdb.num.prev COUNT : 0 |
| | | rocksdb.blobdb.num.keys.written COUNT : 0 |
| | | rocksdb.blobdb.num.keys.read COUNT : 0 |
| | | rocksdb.blobdb.bytes.written COUNT : 0 |
| | | rocksdb.blobdb.bytes.read COUNT : 0 |
| | | rocksdb.blobdb.write.inlined COUNT : 0 |
| | | rocksdb.blobdb.write.inlined.ttl COUNT : 0 |
| | | rocksdb.blobdb.write.blob COUNT : 0 |
| | | rocksdb.blobdb.write.blob.ttl COUNT : 0 |
| | | rocksdb.blobdb.blob.file.bytes.written COUNT : 0 |
| | | rocksdb.blobdb.blob.file.bytes.read COUNT : 0 |
| | | rocksdb.blobdb.blob.file.synced COUNT : 0 |
| | | rocksdb.blobdb.blob.index.expired.count COUNT : 0 |
| | | rocksdb.blobdb.blob.index.expired.size COUNT : 0 |
| | | rocksdb.blobdb.blob.index.evicted.count COUNT : 0 |
| | | rocksdb.blobdb.blob.index.evicted.size COUNT : 0 |
| | | rocksdb.blobdb.gc.num.files COUNT : 0 |
| | | rocksdb.blobdb.gc.num.new.files COUNT : 0 |
| | | rocksdb.blobdb.gc.failures COUNT : 0 |
| | | rocksdb.blobdb.gc.num.keys.overwritten COUNT : 0 |
| | | rocksdb.blobdb.gc.num.keys.expired COUNT : 0 |
| | | rocksdb.blobdb.gc.num.keys.relocated COUNT : 0 |
| | | rocksdb.blobdb.gc.bytes.overwritten COUNT : 0 |
| | | rocksdb.blobdb.gc.bytes.expired COUNT : 0 |
| | | rocksdb.blobdb.gc.bytes.relocated COUNT : 0 |
| | | rocksdb.blobdb.fifo.num.files.evicted COUNT : 0 |
| | | rocksdb.blobdb.fifo.num.keys.evicted COUNT : 0 |
| | | rocksdb.blobdb.fifo.bytes.evicted COUNT : 0 |
| | | rocksdb.txn.overhead.mutex.prepare COUNT : 0 |
| | | rocksdb.txn.overhead.mutex.old.commit.map COUNT : 0 |
| | | rocksdb.txn.overhead.duplicate.key COUNT : 0 |
| | | rocksdb.txn.overhead.mutex.snapshot COUNT : 0 |
| | | rocksdb.number.multiget.keys.found COUNT : 0 |
| | | rocksdb.num.iterator.created COUNT : 3 |
| | | rocksdb.num.iterator.deleted COUNT : 3 |
| | | rocksdb.db.get.micros P50 : 2.000000 P95 : 2.000000 P99 : 2.000000 P100 : 2.000000 COUNT : 1 SUM : 2 |
| | | rocksdb.db.write.micros P50 : 31606.000000 P95 : 31606.000000 P99 : 31606.000000 P100 : 31606.000000 COUNT : 1 SUM : 31606 |
| | | rocksdb.compaction.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.subcompaction.setup.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.table.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.compaction.outfile.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.wal.file.sync.micros P50 : 31431.000000 P95 : 31431.000000 P99 : 31431.000000 P100 : 31431.000000 COUNT : 1 SUM : 31431 |
| | | rocksdb.manifest.file.sync.micros P50 : 27299.000000 P95 : 27299.000000 P99 : 27299.000000 P100 : 27299.000000 COUNT : 2 SUM : 50582 |
| | | rocksdb.table.open.io.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.read.block.compaction.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.read.block.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.write.raw.block.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.l0.slowdown.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.memtable.compaction.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.num.files.stall.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.hard.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.soft.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.numfiles.in.singlecompaction P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.write.stall P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.sst.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.num.subcompactions.scheduled P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.per.read P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 1 SUM : 0 |
| | | rocksdb.bytes.per.write P50 : 105.000000 P95 : 105.000000 P99 : 105.000000 P100 : 105.000000 COUNT : 1 SUM : 105 |
| | | rocksdb.bytes.per.multiget P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.compressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.decompressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.compression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.decompression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.read.num.merge_operands P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.key.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.value.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.next.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.prev.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.blob.file.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.blob.file.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.blob.file.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.gc.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.compression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.decompression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.flush.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | 2023/06/13-20:41:43.850521 147f8 [WARN] [db\db_impl.cc:669] ------- DUMPING STATS ------- |
| | | 2023/06/13-20:41:43.850575 147f8 [WARN] [db\db_impl.cc:670] |
| | | ** DB Stats ** |
| | | Uptime(secs): 1800.1 total, 600.0 interval |
| | | Cumulative writes: 1 writes, 2 keys, 1 commit groups, 0.5 writes per commit group, ingest: 0.00 GB, 0.00 MB/s |
| | | Cumulative WAL: 1 writes, 1 syncs, 0.50 writes per sync, written: 0.00 GB, 0.00 MB/s |
| | | Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent |
| | | Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s |
| | | Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 MB, 0.00 MB/s |
| | | Interval stall: 00:00:0.000 H:M:S, 0.0 percent |
| | | |
| | | ** Compaction Stats [default] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 1800.1 total, 600.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [default] ** |
| | | |
| | | ** Compaction Stats [Configuration] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 1800.1 total, 600.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [Configuration] ** |
| | | |
| | | ** Compaction Stats [default] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 1800.1 total, 0.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [default] ** |
| | | |
| | | ** Compaction Stats [Configuration] ** |
| | | Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop |
| | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 |
| | | Uptime(secs): 1800.1 total, 0.0 interval |
| | | Flush(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(GB): cumulative 0.000, interval 0.000 |
| | | AddFile(Total Files): cumulative 0, interval 0 |
| | | AddFile(L0 Files): cumulative 0, interval 0 |
| | | AddFile(Keys): cumulative 0, interval 0 |
| | | Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds |
| | | Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count |
| | | |
| | | ** File Read Latency Histogram By Level [Configuration] ** |
| | | 2023/06/13-20:41:43.851049 147f8 [WARN] [db\db_impl.cc:617] STATISTICS: |
| | | rocksdb.block.cache.miss COUNT : 0 |
| | | rocksdb.block.cache.hit COUNT : 0 |
| | | rocksdb.block.cache.add COUNT : 0 |
| | | rocksdb.block.cache.add.failures COUNT : 0 |
| | | rocksdb.block.cache.index.miss COUNT : 0 |
| | | rocksdb.block.cache.index.hit COUNT : 0 |
| | | rocksdb.block.cache.index.add COUNT : 0 |
| | | rocksdb.block.cache.index.bytes.insert COUNT : 0 |
| | | rocksdb.block.cache.index.bytes.evict COUNT : 0 |
| | | rocksdb.block.cache.filter.miss COUNT : 0 |
| | | rocksdb.block.cache.filter.hit COUNT : 0 |
| | | rocksdb.block.cache.filter.add COUNT : 0 |
| | | rocksdb.block.cache.filter.bytes.insert COUNT : 0 |
| | | rocksdb.block.cache.filter.bytes.evict COUNT : 0 |
| | | rocksdb.block.cache.data.miss COUNT : 0 |
| | | rocksdb.block.cache.data.hit COUNT : 0 |
| | | rocksdb.block.cache.data.add COUNT : 0 |
| | | rocksdb.block.cache.data.bytes.insert COUNT : 0 |
| | | rocksdb.block.cache.bytes.read COUNT : 0 |
| | | rocksdb.block.cache.bytes.write COUNT : 0 |
| | | rocksdb.bloom.filter.useful COUNT : 0 |
| | | rocksdb.bloom.filter.full.positive COUNT : 0 |
| | | rocksdb.bloom.filter.full.true.positive COUNT : 0 |
| | | rocksdb.persistent.cache.hit COUNT : 0 |
| | | rocksdb.persistent.cache.miss COUNT : 0 |
| | | rocksdb.sim.block.cache.hit COUNT : 0 |
| | | rocksdb.sim.block.cache.miss COUNT : 0 |
| | | rocksdb.memtable.hit COUNT : 1 |
| | | rocksdb.memtable.miss COUNT : 1 |
| | | rocksdb.l0.hit COUNT : 0 |
| | | rocksdb.l1.hit COUNT : 0 |
| | | rocksdb.l2andup.hit COUNT : 0 |
| | | rocksdb.compaction.key.drop.new COUNT : 0 |
| | | rocksdb.compaction.key.drop.obsolete COUNT : 0 |
| | | rocksdb.compaction.key.drop.range_del COUNT : 0 |
| | | rocksdb.compaction.key.drop.user COUNT : 0 |
| | | rocksdb.compaction.range_del.drop.obsolete COUNT : 0 |
| | | rocksdb.compaction.optimized.del.drop.obsolete COUNT : 0 |
| | | rocksdb.compaction.cancelled COUNT : 0 |
| | | rocksdb.number.keys.written COUNT : 2 |
| | | rocksdb.number.keys.read COUNT : 2 |
| | | rocksdb.number.keys.updated COUNT : 0 |
| | | rocksdb.bytes.written COUNT : 105 |
| | | rocksdb.bytes.read COUNT : 35 |
| | | rocksdb.number.db.seek COUNT : 3 |
| | | rocksdb.number.db.next COUNT : 0 |
| | | rocksdb.number.db.prev COUNT : 0 |
| | | rocksdb.number.db.seek.found COUNT : 0 |
| | | rocksdb.number.db.next.found COUNT : 0 |
| | | rocksdb.number.db.prev.found COUNT : 0 |
| | | rocksdb.db.iter.bytes.read COUNT : 0 |
| | | rocksdb.no.file.closes COUNT : 0 |
| | | rocksdb.no.file.opens COUNT : 0 |
| | | rocksdb.no.file.errors COUNT : 0 |
| | | rocksdb.l0.slowdown.micros COUNT : 0 |
| | | rocksdb.memtable.compaction.micros COUNT : 0 |
| | | rocksdb.l0.num.files.stall.micros COUNT : 0 |
| | | rocksdb.stall.micros COUNT : 0 |
| | | rocksdb.db.mutex.wait.micros COUNT : 0 |
| | | rocksdb.rate.limit.delay.millis COUNT : 0 |
| | | rocksdb.num.iterators COUNT : 0 |
| | | rocksdb.number.multiget.get COUNT : 0 |
| | | rocksdb.number.multiget.keys.read COUNT : 0 |
| | | rocksdb.number.multiget.bytes.read COUNT : 0 |
| | | rocksdb.number.deletes.filtered COUNT : 0 |
| | | rocksdb.number.merge.failures COUNT : 0 |
| | | rocksdb.bloom.filter.prefix.checked COUNT : 0 |
| | | rocksdb.bloom.filter.prefix.useful COUNT : 0 |
| | | rocksdb.number.reseeks.iteration COUNT : 0 |
| | | rocksdb.getupdatessince.calls COUNT : 0 |
| | | rocksdb.block.cachecompressed.miss COUNT : 0 |
| | | rocksdb.block.cachecompressed.hit COUNT : 0 |
| | | rocksdb.block.cachecompressed.add COUNT : 0 |
| | | rocksdb.block.cachecompressed.add.failures COUNT : 0 |
| | | rocksdb.wal.synced COUNT : 1 |
| | | rocksdb.wal.bytes COUNT : 105 |
| | | rocksdb.write.self COUNT : 1 |
| | | rocksdb.write.other COUNT : 0 |
| | | rocksdb.write.timeout COUNT : 0 |
| | | rocksdb.write.wal COUNT : 2 |
| | | rocksdb.compact.read.bytes COUNT : 0 |
| | | rocksdb.compact.write.bytes COUNT : 0 |
| | | rocksdb.flush.write.bytes COUNT : 0 |
| | | rocksdb.number.direct.load.table.properties COUNT : 0 |
| | | rocksdb.number.superversion_acquires COUNT : 3 |
| | | rocksdb.number.superversion_releases COUNT : 0 |
| | | rocksdb.number.superversion_cleanups COUNT : 0 |
| | | rocksdb.number.block.compressed COUNT : 0 |
| | | rocksdb.number.block.decompressed COUNT : 0 |
| | | rocksdb.number.block.not_compressed COUNT : 0 |
| | | rocksdb.merge.operation.time.nanos COUNT : 0 |
| | | rocksdb.filter.operation.time.nanos COUNT : 0 |
| | | rocksdb.row.cache.hit COUNT : 0 |
| | | rocksdb.row.cache.miss COUNT : 0 |
| | | rocksdb.read.amp.estimate.useful.bytes COUNT : 0 |
| | | rocksdb.read.amp.total.read.bytes COUNT : 0 |
| | | rocksdb.number.rate_limiter.drains COUNT : 0 |
| | | rocksdb.number.iter.skip COUNT : 0 |
| | | rocksdb.blobdb.num.put COUNT : 0 |
| | | rocksdb.blobdb.num.write COUNT : 0 |
| | | rocksdb.blobdb.num.get COUNT : 0 |
| | | rocksdb.blobdb.num.multiget COUNT : 0 |
| | | rocksdb.blobdb.num.seek COUNT : 0 |
| | | rocksdb.blobdb.num.next COUNT : 0 |
| | | rocksdb.blobdb.num.prev COUNT : 0 |
| | | rocksdb.blobdb.num.keys.written COUNT : 0 |
| | | rocksdb.blobdb.num.keys.read COUNT : 0 |
| | | rocksdb.blobdb.bytes.written COUNT : 0 |
| | | rocksdb.blobdb.bytes.read COUNT : 0 |
| | | rocksdb.blobdb.write.inlined COUNT : 0 |
| | | rocksdb.blobdb.write.inlined.ttl COUNT : 0 |
| | | rocksdb.blobdb.write.blob COUNT : 0 |
| | | rocksdb.blobdb.write.blob.ttl COUNT : 0 |
| | | rocksdb.blobdb.blob.file.bytes.written COUNT : 0 |
| | | rocksdb.blobdb.blob.file.bytes.read COUNT : 0 |
| | | rocksdb.blobdb.blob.file.synced COUNT : 0 |
| | | rocksdb.blobdb.blob.index.expired.count COUNT : 0 |
| | | rocksdb.blobdb.blob.index.expired.size COUNT : 0 |
| | | rocksdb.blobdb.blob.index.evicted.count COUNT : 0 |
| | | rocksdb.blobdb.blob.index.evicted.size COUNT : 0 |
| | | rocksdb.blobdb.gc.num.files COUNT : 0 |
| | | rocksdb.blobdb.gc.num.new.files COUNT : 0 |
| | | rocksdb.blobdb.gc.failures COUNT : 0 |
| | | rocksdb.blobdb.gc.num.keys.overwritten COUNT : 0 |
| | | rocksdb.blobdb.gc.num.keys.expired COUNT : 0 |
| | | rocksdb.blobdb.gc.num.keys.relocated COUNT : 0 |
| | | rocksdb.blobdb.gc.bytes.overwritten COUNT : 0 |
| | | rocksdb.blobdb.gc.bytes.expired COUNT : 0 |
| | | rocksdb.blobdb.gc.bytes.relocated COUNT : 0 |
| | | rocksdb.blobdb.fifo.num.files.evicted COUNT : 0 |
| | | rocksdb.blobdb.fifo.num.keys.evicted COUNT : 0 |
| | | rocksdb.blobdb.fifo.bytes.evicted COUNT : 0 |
| | | rocksdb.txn.overhead.mutex.prepare COUNT : 0 |
| | | rocksdb.txn.overhead.mutex.old.commit.map COUNT : 0 |
| | | rocksdb.txn.overhead.duplicate.key COUNT : 0 |
| | | rocksdb.txn.overhead.mutex.snapshot COUNT : 0 |
| | | rocksdb.number.multiget.keys.found COUNT : 0 |
| | | rocksdb.num.iterator.created COUNT : 3 |
| | | rocksdb.num.iterator.deleted COUNT : 3 |
| | | rocksdb.db.get.micros P50 : 2.000000 P95 : 21.300000 P99 : 21.860000 P100 : 22.000000 COUNT : 2 SUM : 24 |
| | | rocksdb.db.write.micros P50 : 31606.000000 P95 : 31606.000000 P99 : 31606.000000 P100 : 31606.000000 COUNT : 1 SUM : 31606 |
| | | rocksdb.compaction.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.subcompaction.setup.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.table.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.compaction.outfile.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.wal.file.sync.micros P50 : 31431.000000 P95 : 31431.000000 P99 : 31431.000000 P100 : 31431.000000 COUNT : 1 SUM : 31431 |
| | | rocksdb.manifest.file.sync.micros P50 : 27299.000000 P95 : 27299.000000 P99 : 27299.000000 P100 : 27299.000000 COUNT : 2 SUM : 50582 |
| | | rocksdb.table.open.io.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.read.block.compaction.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.read.block.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.write.raw.block.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.l0.slowdown.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.memtable.compaction.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.num.files.stall.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.hard.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.soft.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.numfiles.in.singlecompaction P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.write.stall P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.sst.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.num.subcompactions.scheduled P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.per.read P50 : 1.000000 P95 : 35.000000 P99 : 35.000000 P100 : 35.000000 COUNT : 2 SUM : 35 |
| | | rocksdb.bytes.per.write P50 : 105.000000 P95 : 105.000000 P99 : 105.000000 P100 : 105.000000 COUNT : 1 SUM : 105 |
| | | rocksdb.bytes.per.multiget P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.compressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.bytes.decompressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.compression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.decompression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.read.num.merge_operands P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.key.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.value.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.next.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.prev.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.blob.file.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.blob.file.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.blob.file.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.gc.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.compression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.blobdb.decompression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
| | | rocksdb.db.flush.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0 |
nacos/data/protocol/raft/naming_instance_metadata/log/MANIFEST-000004
nacos/data/protocol/raft/naming_instance_metadata/log/OPTIONS-000006
nacos/data/protocol/raft/naming_instance_metadata/log/OPTIONS-000008
nacos/data/protocol/raft/naming_instance_metadata/meta-data/raft_meta
nacos/data/protocol/raft/naming_instance_metadata/snapshot/snapshot_1/__raft_snapshot_meta
nacos/data/protocol/raft/naming_instance_metadata/snapshot/snapshot_1/instance_metadata.zip
nacos/data/protocol/raft/naming_persistent_service_v2/log/000003.log
nacos/data/protocol/raft/naming_persistent_service_v2/log/CURRENT
nacos/data/protocol/raft/naming_persistent_service_v2/log/IDENTITY
nacos/data/protocol/raft/naming_persistent_service_v2/log/LOCK
nacos/data/protocol/raft/naming_persistent_service_v2/log/LOG
nacos/data/protocol/raft/naming_persistent_service_v2/log/MANIFEST-000004
nacos/data/protocol/raft/naming_persistent_service_v2/log/OPTIONS-000006
nacos/data/protocol/raft/naming_persistent_service_v2/log/OPTIONS-000008
nacos/data/protocol/raft/naming_persistent_service_v2/meta-data/raft_meta
nacos/data/protocol/raft/naming_persistent_service_v2/snapshot/snapshot_1/__raft_snapshot_meta
nacos/data/protocol/raft/naming_persistent_service_v2/snapshot/snapshot_1/persistent_instance.zip
nacos/data/protocol/raft/naming_service_metadata/log/000003.log
nacos/data/protocol/raft/naming_service_metadata/log/CURRENT
nacos/data/protocol/raft/naming_service_metadata/log/IDENTITY
nacos/data/protocol/raft/naming_service_metadata/log/LOCK
nacos/data/protocol/raft/naming_service_metadata/log/LOG
nacos/data/protocol/raft/naming_service_metadata/log/MANIFEST-000004
nacos/data/protocol/raft/naming_service_metadata/log/OPTIONS-000006
nacos/data/protocol/raft/naming_service_metadata/log/OPTIONS-000008
nacos/data/protocol/raft/naming_service_metadata/meta-data/raft_meta
nacos/data/protocol/raft/naming_service_metadata/snapshot/snapshot_1/__raft_snapshot_meta
nacos/data/protocol/raft/naming_service_metadata/snapshot/snapshot_1/service_metadata.zip
nacos/data/tps/CONFIG_PUSH_COUNT
nacos/data/tps/CONFIG_PUSH_FAIL
nacos/data/tps/CONFIG_PUSH_SUCCESS
nacos/data/tps/ClusterConfigChangeNotify
nacos/data/tps/ConfigListen
nacos/data/tps/ConfigPublish
nacos/data/tps/ConfigQuery
nacos/data/tps/ConfigRemove
nacos/data/tps/HealthCheck
nacos/data/tps/NAMING_DISTRO_SYNC
nacos/data/tps/NAMING_DISTRO_SYNC_FAIL
nacos/data/tps/NAMING_DISTRO_SYNC_SUCCESS
nacos/data/tps/NAMING_DISTRO_VERIFY
nacos/data/tps/NAMING_DISTRO_VERIFY_FAIL
nacos/data/tps/NAMING_DISTRO_VERIFY_SUCCESS
nacos/data/tps/NAMING_RPC_PUSH
nacos/data/tps/NAMING_RPC_PUSH_FAIL
nacos/data/tps/NAMING_RPC_PUSH_SUCCESS
nacos/data/tps/NAMING_UDP_PUSH
nacos/data/tps/NAMING_UDP_PUSH_FAIL
nacos/data/tps/NAMING_UDP_PUSH_SUCCESS |