网站首页 编程语言 正文
/**
* 日期工具类(使用了ThreadLocal获取SimpleDateFormat,其他方法可以直接拷贝common-lang)
*/
public class DateUtil {
private static SimpleDateFormat sdfShot = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
private static Map<String, ThreadLocal<SimpleDateFormat>> sdfMap = new HashMap<String, ThreadLocal<SimpleDateFormat>>();
private static Logger logger = LoggerFactory.getLogger(DateUtil.class);
public final static String MDHMSS = "MMddHHmmssSSS";
public final static String YMDHMS = "yyyyMMddHHmmss";
public final static String YMDHMS_ = "yyyy-MM-dd HH:mm:ss";
public final static String YMD = "yyyyMMdd";
public final static String YMD_ = "yyyy-MM-dd";
public final static String HMS = "HHmmss";
public static DateBeginAndEnd getYearBeginAndEnd(String year ,boolean isNow){
DateBeginAndEnd dateBeginAndEnd = new DateBeginAndEnd();
dateBeginAndEnd.setBeginDate(year+"-01-01");
dateBeginAndEnd.setEndDate(year+"-12-31");
if(isNow){
dateBeginAndEnd.setEndDate(DateUtils.getDate());
}
return dateBeginAndEnd;
}
public static DateBeginAndEnd getMonthBeginAndEnd(String month ){
String dataStr = month + "-01";
Date date = DateUtils.dateParse(dataStr, "yyyy-MM-dd");
Map<String, String> map= getFirstdayCurrentMonth(date);
DateBeginAndEnd dateBeginAndEnd = new DateBeginAndEnd();
dateBeginAndEnd.setBeginDate(map.get("first"));
dateBeginAndEnd.setEndDate(map.get("last"));
return dateBeginAndEnd;
}
public static Map<String, String> getFirstdayCurrentMonth(Date date) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//calendar.add(Calendar.MONTH, -1);
//calendar.add(Calendar.MONTH, -10);
Date theDate = calendar.getTime();
//上个月第一天
GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
gcLast.setTime(theDate);
gcLast.set(Calendar.DAY_OF_MONTH, 1);
String day_first = df.format(gcLast.getTime());
StringBuffer str = new StringBuffer().append(day_first);
day_first = str.toString();
//上个月最后一天
calendar.add(Calendar.MONTH, 1); //加一个月
calendar.set(Calendar.DATE, 1); //设置为该月第一天
calendar.add(Calendar.DATE, -1); //再减一天即为上个月最后一天
String day_last = df.format(calendar.getTime());
StringBuffer endStr = new StringBuffer().append(day_last);
day_last = endStr.toString();
Map<String, String> map = new HashMap<String, String>();
map.put("first", day_first);
map.put("last", day_last);
return map;
}
/**
* 获取一个月的同比月
*
* @param month
* @return
*/
public static String getTbStringMonth(String month) {
String dataStr = month + "-01";
Date date = DateUtils.dateParse(dataStr, "yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.YEAR, -1);
Date date2 = calendar.getTime();
return DateUtils.parseDateToStr("yyyy-MM", date2);
}
/**
* 获取一个月的环比比月
*
* @param month
* @return
*/
public static String getHbStringMonth(String month) {
String dataStr = month + "-01";
Date date = DateUtils.dateParse(dataStr, "yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, -1);
Date date2 = calendar.getTime();
return DateUtils.parseDateToStr("yyyy-MM", date2);
}
public static String getTbYear(String year) {
Integer yearNum = Integer.parseInt(year);
yearNum = yearNum - 1;
return yearNum.toString();
}
/**
* 根据map中的key得到对应线程的sdf实例
*
* @param pattern map中的key
* @return 该实例
*/
private static SimpleDateFormat getSdf(final String pattern) {
ThreadLocal<SimpleDateFormat> sdfThread = sdfMap.get(pattern);
if (sdfThread == null) {
//双重检验,防止sdfMap被多次put进去值,和双重锁单例原因是一样的
synchronized (DateUtil.class) {
sdfThread = sdfMap.get(pattern);
if (sdfThread == null) {
logger.debug("put new sdf of pattern " + pattern + " to map");
sdfThread = new ThreadLocal<SimpleDateFormat>() {
@Override
protected SimpleDateFormat initialValue() {
logger.debug("thread: " + Thread.currentThread() + " init pattern: " + pattern);
return new SimpleDateFormat(pattern);
}
};
sdfMap.put(pattern, sdfThread);
}
}
}
return sdfThread.get();
}
/**
* 按照指定pattern解析日期
*
* @param date 要解析的date
* @param pattern 指定格式
* @return 解析后date实例
*/
public static Date parseDate(String date, String pattern) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
}
try {
return getSdf(pattern).parse(date);
} catch (ParseException e) {
e.printStackTrace();
logger.error("解析的格式不支持:" + pattern);
}
return null;
}
/**
* 按照指定pattern格式化日期
*
* @param date 要格式化的date
* @param pattern 指定格式
* @return 解析后格式
*/
public static String formatDate(Date date, String pattern) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
} else {
return getSdf(pattern).format(date);
}
}
public static Long getNowToNextDaySeconds() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
}
public static LocalDate toLocalDate(Date date) {
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
LocalDate localDate = localDateTime.toLocalDate();
return localDate;
}
public static Date toDate(LocalDate date) {
//LocalDate date = LocalDate.of(2006,07,26);
ZoneId zone = ZoneId.systemDefault();
Instant instant = date.atStartOfDay().atZone(zone).toInstant();
java.util.Date da = Date.from(instant);
return da;
}
public static String getWeekStart(Date d) {
TemporalAccessor date = toLocalDate(d);
TemporalField fieldIso = WeekFields.of(DayOfWeek.MONDAY, 1).dayOfWeek();
LocalDate localDate = LocalDate.from(date);
localDate = localDate.with(fieldIso, 1);
return sdfShot.format(Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()));
}
public static String getWeekEnd(Date d) {
TemporalAccessor date = toLocalDate(d);
TemporalField fieldIso = WeekFields.of(DayOfWeek.MONDAY, 1).dayOfWeek();
LocalDate localDate = LocalDate.from(date);
localDate = localDate.with(fieldIso, 7);
return sdfShot.format(Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()));
}
// 获取本周
public static CustomWeek getCustomWeekFromBenWeek() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
Date date = new Date();
String beginDateStr = getWeekStart(date);
String endDateStr = getWeekEnd(date);
Date beginDate = sdf.parse(beginDateStr);
Date endDate = sdf.parse(endDateStr);
if (date.getTime() < endDate.getTime()) {
endDate = date;
}
CustomWeek customWeek = new CustomWeek();
customWeek.setEndDate(sdf.format(endDate));
customWeek.setStartDate(sdf.format(beginDate));
Calendar calendar = Calendar.getInstance();
calendar.setTime(beginDate);
List<String> dayList = new ArrayList<>();
Map<String, String> dayOfWeekMap = new HashMap<>();
List<Integer> dyaNumList = new ArrayList<>();
Map<Integer, String> dayNumMap = new HashMap<>();
for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
Date dateit = calendar.getTime();
String dateStrit = sdf.format(dateit);
int n = calendar.get(Calendar.DAY_OF_WEEK);
if (n == 1) {
System.out.println("周日");
dayOfWeekMap.put(dateStrit, "周日");
dayList.add("周日");
dyaNumList.add(1);
dayNumMap.put(1, "周日");
}
if (n == 2) {
System.out.println("周一");
dayOfWeekMap.put(dateStrit, "周一");
dayList.add("周一");
dyaNumList.add(2);
dayNumMap.put(2, "周一");
}
if (n == 3) {
System.out.println("周二");
dayOfWeekMap.put(dateStrit, "周二");
dayList.add("周二");
dyaNumList.add(3);
dayNumMap.put(3, "周二");
}
if (n == 4) {
System.out.println("周三");
dayOfWeekMap.put(dateStrit, "周三");
dayList.add("周三");
dyaNumList.add(4);
dayNumMap.put(4, "周三");
}
if (n == 5) {
System.out.println("周四");
dayOfWeekMap.put(dateStrit, "周四");
dayList.add("周四");
dyaNumList.add(5);
dayNumMap.put(5, "周四");
}
if (n == 6) {
System.out.println("周五");
dayOfWeekMap.put(dateStrit, "周五");
dayList.add("周五");
dyaNumList.add(6);
dayNumMap.put(6, "周五");
}
if (n == 7) {
System.out.println("周六");
dayOfWeekMap.put(dateStrit, "周六");
dayList.add("周六");
dyaNumList.add(7);
dayNumMap.put(7, "周六");
}
calendar.add(Calendar.DAY_OF_YEAR, 1);
}
customWeek.setDayOfWeekMap(dayOfWeekMap);
customWeek.setDayList(dayList);
customWeek.setDayNumList(dyaNumList);
customWeek.setDayNumMap(dayNumMap);
return customWeek;
}
//获取本月的周
public static CustomMonth getCustomMonthFromBenYue() throws ParseException {
SimpleDateFormat sdf0 = new SimpleDateFormat("yyyy-MM");
String yearMonth = sdf0.format(new Date());
CustomMonth customMonth = new CustomMonth();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
Date startDate = sdf.parse(yearMonth + "-01");
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
int n = calendar.get(Calendar.DAY_OF_WEEK);
int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
Date endDate = sdf.parse(yearMonth + "-" + lastDay);
Date curDate = sdf.parse(sdf.format(new Date()));
if (curDate.getTime() < endDate.getTime()) {
endDate = curDate;
}
if (n == 3) {
calendar.add(Calendar.DAY_OF_YEAR, -1);
System.out.println(sdf.format(calendar.getTime()));
}
if (n == 4) {
calendar.add(Calendar.DAY_OF_YEAR, -2);
System.out.println(sdf.format(calendar.getTime()));
}
if (n == 5) {
calendar.add(Calendar.DAY_OF_YEAR, -3);
System.out.println(sdf.format(calendar.getTime()));
}
if (n == 6) {
calendar.add(Calendar.DAY_OF_YEAR, -4);
System.out.println(sdf.format(calendar.getTime()));
}
if (n == 7) {
calendar.add(Calendar.DAY_OF_YEAR, -5);
System.out.println(sdf.format(calendar.getTime()));
}
if (n == 1) { //周日
calendar.add(Calendar.DAY_OF_YEAR, -6);
System.out.println(sdf.format(calendar.getTime()));
}
startDate = calendar.getTime();
customMonth.setStartDate(sdf.format(startDate));
customMonth.setEndDate(sdf.format(endDate));
Map<String, String> dayWeekMap = new HashMap<>();
Set<String> weekList = new HashSet<>();
Set<Integer> weekArray = new HashSet<>();
List<DateAndWeek> list = new ArrayList<>();
for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
Date dateit = calendar.getTime();
String dateStrit = sdf.format(dateit);
System.out.println(dateStrit);
// Long c= (dateit.getTime() -startDate.getTime())/(3600*24*1000*7)+1;
int c = getWeekOfYearByDate(dateStrit);
System.out.println(c);
dayWeekMap.put(dateStrit, "第" + c + "周");
weekList.add("第" + c + "周");
weekArray.add(c);
DateAndWeek dateAndWeek = new DateAndWeek();
dateAndWeek.setDateStr(dateStrit);
dateAndWeek.setWeekNum(c);
list.add(dateAndWeek);
calendar.add(Calendar.DAY_OF_YEAR, 1);
}
customMonth.setDayWeekMap(dayWeekMap);
List<String> weekList0 = new ArrayList<String>(weekList);
Collections.sort(weekList0);
customMonth.setWeekList(weekList0);
List<Integer> weekArray0 = new ArrayList<Integer>(weekArray);
Collections.sort(weekArray0);
customMonth.setWeekArray(weekArray0);
Map<Integer, DateBeginAndEnd> weekNumDateMap = new HashMap<>();
weekArray0.forEach(item -> {
String max = list.stream().filter(it -> it.getWeekNum().equals(item)).max(Comparator.comparing(DateAndWeek::getDateStr)).get().getDateStr();
String min = list.stream().filter(it -> it.getWeekNum().equals(item)).max(Comparator.comparing(DateAndWeek::getDateStr)).get().getDateStr();
DateBeginAndEnd dateBeginAndEnd = new DateBeginAndEnd();
dateBeginAndEnd.setBeginDate(min);
dateBeginAndEnd.setEndDate(max);
weekNumDateMap.put(item,dateBeginAndEnd);
});
customMonth.setWeekNumDateMap(weekNumDateMap);
return customMonth;
}
/**
* 两个日期之间的周
*
* @param beginDateStr
* @param endDateStr
* @return
* @throws ParseException
*/
public static CustomMonth getWeekBetweenBeginAndEnd(String beginDateStr, String endDateStr) throws ParseException {
CustomMonth customMonth = new CustomMonth();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
Date beginDate = sdf.parse(beginDateStr);
Date endDate = sdf.parse(endDateStr);
customMonth.setStartDate(sdf.format(beginDate));
customMonth.setEndDate(sdf.format(endDate));
Calendar calendar = Calendar.getInstance();
calendar.setTime(beginDate);
Map<String, String> dayWeekMap = new HashMap<>();
Set<String> weekList = new HashSet<>();
Set<Integer> weekArray = new HashSet<>();
List<DateAndWeek> list = new ArrayList<>();
for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
Date dateit = calendar.getTime();
String dateStrit = sdf.format(dateit);
System.out.println(dateStrit);
// Long c= (dateit.getTime() -startDate.getTime())/(3600*24*1000*7)+1;
int c = getWeekOfYearByDate(dateStrit);
System.out.println(c);
dayWeekMap.put(dateStrit, "第" + c + "周");
weekList.add("第" + c + "周");
weekArray.add(c);
DateAndWeek dateAndWeek = new DateAndWeek();
dateAndWeek.setDateStr(dateStrit);
dateAndWeek.setWeekNum(c);
list.add(dateAndWeek);
calendar.add(Calendar.DAY_OF_YEAR, 1);
}
customMonth.setDayWeekMap(dayWeekMap);
List<String> weekList0 = new ArrayList<String>(weekList);
Collections.sort(weekList0);
customMonth.setWeekList(weekList0);
List<Integer> weekArray0 = new ArrayList<Integer>(weekArray);
Collections.sort(weekArray0);
customMonth.setWeekArray(weekArray0);
Map<Integer, DateBeginAndEnd> weekNumDateMap = new HashMap<>();
weekArray0.forEach(item -> {
String max = list.stream().filter(it -> it.getWeekNum().equals(item)).max(Comparator.comparing(DateAndWeek::getDateStr)).get().getDateStr();
String min = list.stream().filter(it -> it.getWeekNum().equals(item)).min(Comparator.comparing(DateAndWeek::getDateStr)).get().getDateStr();
DateBeginAndEnd dateBeginAndEnd = new DateBeginAndEnd();
dateBeginAndEnd.setBeginDate(min);
dateBeginAndEnd.setEndDate(max);
weekNumDateMap.put(item,dateBeginAndEnd);
});
customMonth.setWeekNumDateMap(weekNumDateMap);
return customMonth;
}
/**
* 两个日期之间的月
*
* @param beginDateStr
* @param endDateStr
* @return
* @throws ParseException
*/
public static CustomYear getYearMonthFromBeginAndEnd(String beginDateStr, String endDateStr) throws ParseException {
CustomYear customYear = new CustomYear();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
Date beginDate = sdf.parse(beginDateStr);
Date endDate = sdf.parse(endDateStr);
List<String> monthList = new ArrayList<>();
SimpleDateFormat sdfy = new SimpleDateFormat("yyyy-MM");
Calendar calendar = Calendar.getInstance();
calendar.setTime(beginDate);
for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
String ym = sdfy.format(calendar.getTime());
monthList.add(ym);
calendar.add(Calendar.MONTH, 1);
}
customYear.setBeginDate(sdf.format(beginDate));
customYear.setEndDate(sdf.format(endDate));
customYear.setMonthList(monthList);
return customYear;
}
/**
* 两个日期之间的日期
*
* @param beginDateStr
* @param endDateStr
* @return
* @throws ParseException
*/
public static CustomerDate getCustomerDateFromBeginAndEnd(String beginDateStr, String endDateStr) throws ParseException {
CustomerDate customerDate = new CustomerDate();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
Date beginDate = sdf.parse(beginDateStr);
Date endDate = sdf.parse(endDateStr);
List<String> dateList = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
calendar.setTime(beginDate);
for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
String ym = sdf.format(calendar.getTime());
dateList.add(ym);
calendar.add(Calendar.DAY_OF_YEAR, 1);
}
customerDate.setStartDate(sdf.format(beginDate));
customerDate.setEndDate(sdf.format(endDate));
customerDate.setDateList(dateList);
return customerDate;
}
/**
* 获取本年的月
*
* @return
* @throws ParseException
*/
public static CustomYear getYearMonthFromBenYear() throws ParseException {
CustomYear customYear = new CustomYear();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
String year = DateUtils.getYYYY();
String beginDateStr = year + "-" + "01" + "-" + "01";
String endDateStr = year + "-" + "12" + "-" + "31";
Date beginDate = sdf.parse(beginDateStr);
Date endDate = sdf.parse(endDateStr);
Date curDate = sdf.parse(sdf.format(new Date()));
if (curDate.getTime() < endDate.getTime()) {
endDate = curDate;
}
List<String> monthList = new ArrayList<>();
SimpleDateFormat sdfy = new SimpleDateFormat("yyyy-MM");
Calendar calendar = Calendar.getInstance();
calendar.setTime(beginDate);
for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
String ym = sdfy.format(calendar.getTime());
monthList.add(ym);
calendar.add(Calendar.MONTH, 1);
}
customYear.setBeginDate(sdf.format(beginDate));
customYear.setEndDate(sdf.format(endDate));
customYear.setMonthList(monthList);
return customYear;
}
/**
* 获取两个日期之间的年
*
* @return
* @throws ParseException
*/
public static List<String> getYearList(String beginDateStr, String endDateStr) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
Date beginDate = sdf.parse(beginDateStr);
Date endDate = sdf.parse(endDateStr);
List<String> yearList = new ArrayList<>();
SimpleDateFormat sdfy = new SimpleDateFormat("yyyy");
Calendar calendar = Calendar.getInstance();
calendar.setTime(beginDate);
for (; calendar.getTime().getTime() <= endDate.getTime(); ) {
String ym = sdfy.format(calendar.getTime());
yearList.add(ym);
calendar.add(Calendar.YEAR, 1);
}
return yearList;
}
public static Integer getWeekOfYearByDate(String dateStr) throws ParseException {
String yearBeginDate = dateStr.substring(0, 4) + "-01-01";
Date date0 = sdfShot.parse(yearBeginDate);
Date date = sdfShot.parse(dateStr);
int n = getNumOfWeek(date0);
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(date);
int week = calendar.get(Calendar.WEEK_OF_YEAR);
if (n != 1) {
return week - 1;
} else {
return week;
}
}
public static Integer getNumOfWeekOld(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_WEEK);
}
public static Integer getNumOfWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(date);
int n = calendar.get(Calendar.DAY_OF_WEEK);
if ((n >= 2) && (n <= 7)) {
return n - 1;
} else {
return 7;
}
}
public static Integer getNumOfWeek(String dateStr) throws ParseException {
Date date = sdfShot.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(date);
int n = calendar.get(Calendar.DAY_OF_WEEK);
if ((n >= 2) && (n <= 7)) {
return n - 1;
} else {
return 7;
}
}
/*
* @Description 获取当前季度str 如:202001为2020年第一季度
* @Param []
* @return java.lang.String
**/
public static String getThisQuarter() {
Calendar now = Calendar.getInstance();
String quarter = null;
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) + 1;
if (month == 1 || month == 2 || month == 3) {
quarter = "1";
} else if (month == 4 || month == 5 || month == 6) {
quarter = "2";
} else if (month == 7 || month == 8 || month == 9) {
quarter = "3";
} else if (month == 10 || month == 11 || month == 12) {
quarter = "4";
}
return quarter;
}
}
原文链接:https://blog.csdn.net/qq_41955670/article/details/127286842
相关推荐
- 2022-11-15 Python函数式编程之返回函数实例详解_python
- 2022-06-28 react18中react-redux状态管理的实现_React
- 2022-04-11 Python中性能分析利器pyinstrument详细讲解_python
- 2022-08-27 Oracle缩表空间的完整解决实例_oracle
- 2022-11-01 C++中的pair使用详解_C 语言
- 2022-03-24 C语言常见的文件操作函数_C 语言
- 2023-03-27 Android数据结构优化教程_Android
- 2022-03-29 python中apply函数详情_python
- 最近更新
-
- window11 系统安装 yarn
- 超详细win安装深度学习环境2025年最新版(
- Linux 中运行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存储小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基础操作-- 运算符,流程控制 Flo
- 1. Int 和Integer 的区别,Jav
- spring @retryable不生效的一种
- Spring Security之认证信息的处理
- Spring Security之认证过滤器
- Spring Security概述快速入门
- Spring Security之配置体系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置权
- redisson分布式锁中waittime的设
- maven:解决release错误:Artif
- restTemplate使用总结
- Spring Security之安全异常处理
- MybatisPlus优雅实现加密?
- Spring ioc容器与Bean的生命周期。
- 【探索SpringCloud】服务发现-Nac
- Spring Security之基于HttpR
- Redis 底层数据结构-简单动态字符串(SD
- arthas操作spring被代理目标对象命令
- Spring中的单例模式应用详解
- 聊聊消息队列,发送消息的4种方式
- bootspring第三方资源配置管理
- GIT同步修改后的远程分支