Java 时间工具类(珍藏版)

2023-10-08 07:50
文章标签 java 工具 时间 珍藏版

本文主要是介绍Java 时间工具类(珍藏版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

肝了两天,重新整理了下时间工具类,以后我就以该时间工具类进行项目开发了,后会不定期更新功能,也欢迎留言需求,让工具类不断的完善。

常量介绍

相关方法

工具类源码

package com.zyq.util.date;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;/*** 创作者链接:https://blog.csdn.net/sunnyzyq/article/details/125377621* @author zyq* @since 2022/6/17*/
public class DateUtils {/** 一星期的天数 */public static final int WEEK_DAYS = 7;/** 一年的月份数 */public static final int YEAR_MONTHS = 12;/** 一天的小时数 */public static final int DAY_HOURS = 24;/** 一小时分钟数 */public static final int HOUR_MINUTES = 60;/** 一天分钟数 (24 * 60) */public static final int DAY_MINUTES = 1440;/** 一分钟的秒数 */public static final int MINUTE_SECONDS = 60;/** 一个小时的秒数 (60 * 60) */public static final int HOUR_SECONDS = 3600;/** 一天的秒数 (24 * 60 * 60) */public static final int DAY_SECONDS = 86400;/** 一秒的毫秒数 */public static final long SECOND_MILLISECONDS = 1000L;/** 一分钟的毫秒数(60 * 1000) */public static final long MINUTE_MILLISECONDS = 60000L;/** 一小时的毫秒数(60 * 60 * 1000) */public static final long HOUR_MILLISECONDS = 3600000L;/** 一天的毫秒数(24 * 60* 60* 1000) */public static final long DAY_MILLISECONDS = 86400000L;/** 星期一 */public static final int WEEK_1_MONDAY = 1;/** 星期二 */public static final int WEEK_2_TUESDAY = 2;/** 星期三 */public static final int WEEK_3_WEDNESDAY = 3;/** 星期四 */public static final int WEEK_4_THURSDAY = 4;/** 星期五 */public static final int WEEK_5_FRIDAY = 5;/** 星期六 */public static final int WEEK_6_SATURDAY = 6;/** 星期天 */public static final int WEEK_7_SUNDAY = 7;/** 一月 */public static final int MONTH_1_JANUARY = 1;/** 二月 */public static final int MONTH_2_FEBRUARY = 2;/** 三月 */public static final int MONTH_3_MARCH = 3;/** 四月 */public static final int MONTH_4_APRIL= 4;/** 五月 */public static final int MONTH_5_MAY = 5;/** 六月 */public static final int MONTH_6_JUNE = 6;/** 七月 */public static final int MONTH_7_JULY = 7;/** 八月 */public static final int MONTH_8_AUGUST = 8;/** 九月 */public static final int MONTH_9_SEPTEMBER = 9;/** 十月 */public static final int MONTH_10_OCTOBER = 10;/** 十一月 */public static final int MONTH_11_NOVEMBER = 11;/** 十二月 */public static final int MONTH_12_DECEMBER= 12;/** 显示到日期 */public static final String FORMAT_DATE = "yyyy-MM-dd";/** 显示到小时 */public static final String FORMAT_HOUR = "yyyy-MM-dd HH";/** 显示到分 */public static final String FORMAT_MINUTE = "yyyy-MM-dd HH:mm";/** 显示到秒 */public static final String FORMAT_SECOND = "yyyy-MM-dd HH:mm:ss";/** 显示到毫秒 */public static final String FORMAT_MILLISECOND = "yyyy-MM-dd HH:mm:ss:SSS";/** 显示到日期(数字格式) */public static final String FORMAT_NO_DATE = "yyyyMMdd";/** 显示到小时(数字格式) */public static final String FORMAT_NO_HOUR = "yyyyMMddHH";/** 显示到分(数字格式) */public static final String FORMAT_NO_MINUTE = "yyyyMMddHHmm";/** 显示到秒(数字格式) */public static final String FORMAT_NO_SECOND = "yyyyMMddHHmmss";/** 显示到毫秒(数字格式) */public static final String FORMAT_NO_MILLISECOND = "yyyyMMddHHmmssSSS";/*** 获取指定时间格式化器** @param formatStyle 时间格式* @return 时间格式化器*/private static SimpleDateFormat getSimpleDateFormat(String formatStyle) {return new SimpleDateFormat(formatStyle);}/*** 将 Date 格式时间转化为指定格式时间** @param date        Date 格式时间* @param formatStyle 转化指定格式(如: yyyy-MM-dd HH:mm:ss)* @return 转化格式时间*/public static String format(Date date, String formatStyle) {if (Objects.isNull(date)) {return "";}return getSimpleDateFormat(formatStyle).format(date);}/*** 将 Date 格式时间转化为 yyyy-MM-dd 格式时间** @param date Date 格式时间* @return yyyy-MM-dd 格式时间(如:2022-06-17)*/public static String formatDate(Date date) {return format(date, FORMAT_DATE);}/*** 将 Date 格式时间转化为 yyyy-MM-dd HH:mm:ss 格式时间** @param date Date 格式时间* @return yyyy-MM-dd HH:mm:ss 格式时间(如:2022-06-17 16:06:17)*/public static String formatDateTime(Date date) {return format(date, FORMAT_SECOND);}/*** 将 Date 格式时间转化为 yyyy-MM-dd HH:mm:ss:SSS 格式时间** @param date Date 格式时间* @return yyyy-MM-dd HH:mm:ss:SSS 格式时间(如:2022-06-17 16:06:17:325)*/public static String formatDateTimeStamp(Date date) {return format(date, FORMAT_MILLISECOND);}/*** 将 yyyy-MM-dd 格式时间转化为 Date 格式时间* * @param dateString yyyy-MM-dd 格式时间(如:2022-06-17)* @return Date 格式时间*/public static Date parseDate(String dateString) {return parse(dateString, FORMAT_DATE);}/*** 将 yyyy-MM-dd HH:mm:ss 格式时间转化为 Date 格式时间* * @param dateTimeStr yyyy-MM-dd HH:mm:ss 格式时间(如:2022-06-17 16:06:17)* @return Date 格式时间*/public static Date parseDateTime(String dateTimeStr) {return parse(dateTimeStr, FORMAT_SECOND);}/*** 将 yyyy-MM-dd HH:mm:ss:SSS 格式时间转化为 Date 格式时间* * @param dateTimeStr yyyy-MM-dd HH:mm:ss:SSS 格式时间(如:2022-06-17 16:06:17)* @return Date 格式时间*/public static Date parseDateTimeStamp(String dateTimeStampStr) {return parse(dateTimeStampStr, FORMAT_MILLISECOND);}/*** 将字符串格式时间转化为 Date 格式时间* * @param dateString 字符串时间(如:2022-06-17 16:06:17)* @return formatStyle 格式内容* @return Date 格式时间*/public static Date parse(String dateString, String formatStyle) {String s = getString(dateString);if (s.isEmpty()) {return null;}try {return getSimpleDateFormat(formatStyle).parse(dateString);} catch (ParseException e) {e.printStackTrace();return null;}}/*** 获取字符串有效内容* * @param s 字符串* @return 有效内容*/private static String getString(String s) {return Objects.isNull(s) ? "" : s.trim();}/*** 获取一天的开始时间(即:0 点 0 分 0 秒 0 毫秒)* * @param date 指定时间* @return 当天的开始时间*/public static Date getDateStart(Date date) {if (Objects.isNull(date)) {return null;}Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(Calendar.HOUR_OF_DAY, 0);calendar.set(Calendar.MINUTE, 0);calendar.set(Calendar.SECOND, 0);calendar.set(Calendar.MILLISECOND, 0);return calendar.getTime();}/*** 获取一天的截止时间(即:23 点 59 分 59 秒 999 毫秒)* * @param date 指定时间* @return 当天的开始时间*/public static Date getDateEnd(Date date) {if (Objects.isNull(date)) {return null;}Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(Calendar.HOUR_OF_DAY, 23);calendar.set(Calendar.MINUTE, 59);calendar.set(Calendar.SECOND, 59);calendar.set(Calendar.MILLISECOND, 999);return calendar.getTime();}/*** 获取日期数字* * @param date 日期* @return 日期数字*/public static int getDateNo(Date date) {if (Objects.isNull(date)) {return 0;}return Integer.valueOf(format(date, FORMAT_NO_DATE));}/*** 获取日期时间数字(到秒)* * @param date 日期* @return 日期数字*/public static long getDateTimeNo(Date date) {if (Objects.isNull(date)) {return 0L;}return Long.valueOf(format(date, FORMAT_NO_SECOND));}/*** 获取日期时间数字(到毫秒)* * @param date 日期* @return 日期数字*/public static long getDateTimeStampNo(Date date) {if (Objects.isNull(date)) {return 0L;}return Long.valueOf(format(date, FORMAT_NO_MILLISECOND));}/*** 获取星期几* * @param date 时间* @return 0(时间为空), 1(周一), 2(周二),3(周三),4(周四),5(周五),6(周六),7(周日)*/public static int getWeek(Date date) {if (Objects.isNull(date)) {return 0;}Calendar calendar = Calendar.getInstance();calendar.setTime(date);return getWeek(calendar);}/*** 获取星期几* * @param date 时间* @return 0(时间为空), 1(周一), 2(周二),3(周三),4(周四),5(周五),6(周六),7(周日)*/private static int getWeek(Calendar calendar) {switch (calendar.get(Calendar.DAY_OF_WEEK)) {case Calendar.MONDAY:return 1;case Calendar.TUESDAY:return 2;case Calendar.WEDNESDAY:return 3;case Calendar.THURSDAY:return 4;case Calendar.FRIDAY:return 5;case Calendar.SATURDAY:return 6;case Calendar.SUNDAY:return 7;default:return 0;}}/*** 获取该日期是今年的第几周(以本年的周一为第1周,详见下面说明)<br>* * 【说明】<br>* 比如 2022-01-01(周六)和 2022-01-02(周日)虽然在 2022 年里,但他们两天则属于 2021 年最后一周,<br>* 那么这两天不会算在 2022 年第 1 周里,此时会返回 0 ;而 2022 年第 1 周将从 2022-01-03(周一) 开始计算。<br>* * @param date 时间* @return -1(时间为空), 0(为上个年的最后一周),其他数字(今年的第几周)*/public static int getWeekOfYear(Date date) {if (Objects.isNull(date)) {return -1;}int weeks = getWeekOfYearIgnoreLastYear(date);Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(Calendar.MONTH, Calendar.JANUARY);calendar.set(Calendar.DAY_OF_MONTH, 1);int week = getWeek(calendar);if (week == 1) {return weeks;}return weeks - 1;}/*** 获取今年的第几周(以本年的1月1日为第1周第1天)<br>* * @param date 时间* @return -1(时间为空),其他数字(今年的第几周)*/public static int getWeekOfYearIgnoreLastYear(Date date) {if (Objects.isNull(date)) {return -1;}Calendar calendar = Calendar.getInstance();calendar.setTime(date);int days = calendar.get(Calendar.DAY_OF_YEAR);int weeks = days / 7;// 如果是 7 的倍数,则表示恰好是多少周if (days % 7 == 0) {return weeks;}// 如果有余数,则需要再加 1return weeks + 1;}/*** 获取时间节点对象* * @param date 时间对象* @return DateNode*/public static DateNode getDateNode(Date date) {if (Objects.isNull(date)) {return null;}Calendar calendar = Calendar.getInstance();calendar.setTime(date);DateNode node = new DateNode();node.setTime(format(date, FORMAT_MILLISECOND));node.setYear(calendar.get(Calendar.YEAR));node.setMonth(calendar.get(Calendar.MONTH) + 1);node.setDay(calendar.get(Calendar.DAY_OF_MONTH));node.setHour(calendar.get(Calendar.HOUR_OF_DAY));node.setMinute(calendar.get(Calendar.MINUTE));node.setSecond(calendar.get(Calendar.SECOND));node.setMillisecond(calendar.get(Calendar.MILLISECOND));node.setWeek(getWeek(calendar));node.setDayOfYear(calendar.get(Calendar.DAY_OF_YEAR));node.setWeekOfYear(getWeekOfYear(date));node.setWeekOfYearIgnoreLastYear(getWeekOfYearIgnoreLastYear(date));node.setMillisecondStamp(date.getTime());node.setSecondStamp(node.getMillisecondStamp() / 1000);return node;}/*** 日期变更* * @param date   指定日期* @param field  变更属性(如变更年份,则该值为 Calendar.DAY_OF_YEAR)* @param amount 变更大小(大于 0 时增加,小于 0 时减少)* @return 变更后的日期时间*/public static Date add(Date date, int field, int amount) {if (Objects.isNull(date)) {return null;}Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(field, amount);return calendar.getTime();}/*** 指定日期加减年份* * @param date 指定日期* @param year 变更年份(大于 0 时增加,小于 0 时减少)* @return 变更年份后的日期*/public static Date addYear(Date date, int year) {return add(date, Calendar.YEAR, year);}/*** 指定日期加减月份* * @param date  指定日期* @param month 变更月份(大于 0 时增加,小于 0 时减少)* @return 变更月份后的日期*/public static Date addMonth(Date date, int month) {return add(date, Calendar.MONTH, month);}/*** 指定日期加减天数* * @param date 指定日期* @param day  变更天数(大于 0 时增加,小于 0 时减少)* @return 变更天数后的日期*/public static Date addDay(Date date, int day) {return add(date, Calendar.DAY_OF_YEAR, day);}/*** 指定日期加减星期* * @param date 指定日期* @param week 变更星期数(大于 0 时增加,小于 0 时减少)* @return 变更星期数后的日期*/public static Date addWeek(Date date, int week) {return add(date, Calendar.WEEK_OF_YEAR, week);}/*** 指定日期加减小时* * @param date 指定日期时间* @param hour 变更小时数(大于 0 时增加,小于 0 时减少)* @return 变更小时数后的日期时间*/public static Date addHour(Date date, int hour) {return add(date, Calendar.HOUR_OF_DAY, hour);}/*** 指定日期加减分钟* * @param date   指定日期时间* @param minute 变更分钟数(大于 0 时增加,小于 0 时减少)* @return 变更分钟数后的日期时间*/public static Date addMinute(Date date, int minute) {return add(date, Calendar.MINUTE, minute);}/*** 指定日期加减秒* * @param date   指定日期时间* @param second 变更秒数(大于 0 时增加,小于 0 时减少)* @return 变更秒数后的日期时间*/public static Date addSecond(Date date, int second) {return add(date, Calendar.SECOND, second);}/*** 指定日期加减秒* * @param date   指定日期时间* @param minute 变更毫秒数(大于 0 时增加,小于 0 时减少)* @return 变更毫秒数后的日期时间*/public static Date addMillisecond(Date date, int millisecond) {return add(date, Calendar.MILLISECOND, millisecond);}/*** 获取该日期所在周指定星期的日期* * @param date 日期所在时间* @return index 指定星期(1 - 7 分别对应星期一到星期天)*/public static Date getWeekDate(Date date, int index) {if (index < WEEK_1_MONDAY || index > WEEK_7_SUNDAY) {return null;}int week = getWeek(date);return addDay(date, index - week);}/*** 获取该日期所在周开始日期* * @param date 日期所在时间* @return 所在周开始日期*/public static Date getWeekDateStart(Date date) {return getDateStart(getWeekDate(date, WEEK_1_MONDAY));}/*** 获取该日期所在周开始日期* * @param date 日期所在时间* @return 所在周开始日期*/public static Date getWeekDateEnd(Date date) {return getWeekDateEnd(getWeekDate(date, WEEK_7_SUNDAY));}/*** 获取该日期所在周的所有日期(周一到周日)* * @param Date 日期* @return 该日照所在周的所有日期*/public static List<Date> getWeekDateList(Date date) {if (Objects.isNull(date)) {return Collections.emptyList();}// 获取本周开始时间Date weekFromDate = getWeekDateStart(date);// 获取本周截止时间Date weekeEndDate = getWeekDateEnd(date);return getBetweenDateList(weekFromDate, weekeEndDate, true);}/*** 获取该日期所在周的所有日期(周一到周日)* * @param dateString* @return 该日照所在周的所有日期*/public static List<String> getWeekDateList(String dateString) {Date date = parseDate(dateString);if (Objects.isNull(date)) {return Collections.emptyList();}return getDateStrList(getWeekDateList(date));}/*** 获取该日期所在月的所有日期* * @param dateString* @return 该日照所月的所有日期*/public static List<Date> getMonthDateList(Date date) {if (Objects.isNull(date)) {return Collections.emptyList();}Date monthDateStart = getMonthDateStart(date);Date monthDateEnd = getMonthDateEnd(date);return getBetweenDateList(monthDateStart, monthDateEnd, true);}/*** 获取该日期所在月的所有日期* * @param dateString* @return 该日照所月的所有日期*/public static List<String> getMonthDateList(String dateString) {Date date = parseDate(dateString);if (Objects.isNull(date)) {return Collections.emptyList();}return getDateStrList(getMonthDateList(date));}/*** 获取本日期所在月第一天* * @param date 日期* @return 本日期所在月第一天*/public static Date getMonthDateStart(Date date) {if (Objects.isNull(date)) {return null;}Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(Calendar.DAY_OF_MONTH, 1);return getDateStart(calendar.getTime());}/*** 获取本日期所在月最后一天* * @param date 日期* @return 本日期所在月最后一天*/public static Date getMonthDateEnd(Date date) {if (Objects.isNull(date)) {return null;}Date monthDateStart = getMonthDateStart(date);Date nextMonthDateStart = getMonthDateStart(addMonth(monthDateStart, 1));return getDateEnd(addDay(nextMonthDateStart, -1));}/*** 获取两个日期相差的天数(以日期为单位计算,不以24小时制计算,详见下面说明)<br>* * 【说明】比如 2022-06-17 23:00:00 和 2022-06-17 01:00:00,两者虽然只相差 2 个小时,但也算相差 1 天 <br>* * @param date1 日期1* @param date2 日期2* @return 相差天数(若返回 -1,则至少有一个日期存在为空,此时不能进行比较)*/public static int countBetweenDays(Date date1, Date date2) {if (Objects.isNull(date1) || Objects.isNull(date2)) {return -1;}// 获取两个日期 0 点 0 时 0 分 0 秒 0 毫秒时的时间戳(毫秒级)long t1 = getDateStart(date1).getTime();long t2 = getDateStart(date2).getTime();// 相差天数 = 相差的毫秒数 / 一天的毫秒数return (int) (Math.abs(t1 - t2) / DAY_MILLISECONDS);}/*** 获取两个日期之间的所有日期* * @param date1 日期1* @param date2 日期2* @return 两个日期之间的所有日期的开始时间*/public static List<Date> getBetweenDateList(Date date1, Date date2) {return getBetweenDateList(date1, date2, false);}/*** 获取两个日期之间的所有日期* * @param date1 日期1* @param date2 日期2* @return 两个日期之间的所有日期的开始时间*/public static List<Date> getBetweenDateList(Date date1, Date date2, boolean isContainParams) {if (Objects.isNull(date1) || Objects.isNull(date2)) {return Collections.emptyList();}// 确定前后日期Date fromDate = date1;Date toDate = date2;if (date2.before(date1)) {fromDate = date2;toDate = date1;}// 获取两个日期每天的开始时间Date from = getDateStart(fromDate);Date to = getDateStart(toDate);// 获取日期,开始循环List<Date> dates = new ArrayList<Date>();if (isContainParams) {dates.add(from);}Date date = from;boolean isBefore = true;while (isBefore) {date = addDay(date, 1);isBefore = date.before(to);if (isBefore) {dates.add(getDateStart(date));}}if (isContainParams) {dates.add(to);}return dates;}/*** 获取两个日期之间的所有日期* * @param dateString1 日期1(如:2022-06-20)* @param dateString2 日期2(如:2022-07-15)* @return 两个日期之间的所有日期(不包含参数日期)*/public static List<String> getBetweenDateList(String dateString1, String dateString2) {return getBetweenDateList(dateString1, dateString2, false);}/*** 获取两个日期之间的所有日期* * @param dateString1     日期1(如:2022-06-20)* @param dateString2     日期2(如:2022-07-15)* @param isContainParams 是否包含参数的两个日期* @return 两个日期之间的所有日期的开始时间*/public static List<String> getBetweenDateList(String dateString1, String dateString2, boolean isContainParams) {Date date1 = parseDate(dateString1);Date date2 = parseDate(dateString2);List<Date> dates = getBetweenDateList(date1, date2, isContainParams);return getDateStrList(dates);}/*** List<Date> 转 List<String>* * @param dates 日期集合* @return 日期字符串集合*/public static List<String> getDateStrList(List<Date> dates) {if (dates.isEmpty()) {return Collections.emptyList();}List<String> dateList = new ArrayList<String>();for (Date date : dates) {dateList.add(formatDate(date));}return dateList;}static class DateNode {/** 年 */private int year;/** 月 */private int month;/** 日 */private int day;/** 时 */private int hour;/** 分 */private int minute;/** 秒 */private int second;/** 毫秒 */private int millisecond;/** 星期几( 1 - 7 对应周一到周日) */private int week;/** 当年第几天 */private int dayOfYear;/** 当年第几周(本年周 1 为第 1 周,0 则表示属于去年最后一周) */private int weekOfYear;/** 当年第几周(本年周 1 为第 1 周,0 则表示属于去年最后一周) */private int weekOfYearIgnoreLastYear;/** 时间戳(秒级) */private long secondStamp;/** 时间戳(毫秒级) */private long millisecondStamp;/** 显示时间 */private String time;public int getYear() {return year;}public void setYear(int year) {this.year = year;}public int getMonth() {return month;}public void setMonth(int month) {this.month = month;}public int getDay() {return day;}public void setDay(int day) {this.day = day;}public int getHour() {return hour;}public void setHour(int hour) {this.hour = hour;}public int getMinute() {return minute;}public void setMinute(int minute) {this.minute = minute;}public int getSecond() {return second;}public void setSecond(int second) {this.second = second;}public int getMillisecond() {return millisecond;}public void setMillisecond(int millisecond) {this.millisecond = millisecond;}public int getWeek() {return week;}public void setWeek(int week) {this.week = week;}public int getDayOfYear() {return dayOfYear;}public void setDayOfYear(int dayOfYear) {this.dayOfYear = dayOfYear;}public int getWeekOfYear() {return weekOfYear;}public void setWeekOfYear(int weekOfYear) {this.weekOfYear = weekOfYear;}public int getWeekOfYearIgnoreLastYear() {return weekOfYearIgnoreLastYear;}public void setWeekOfYearIgnoreLastYear(int weekOfYearIgnoreLastYear) {this.weekOfYearIgnoreLastYear = weekOfYearIgnoreLastYear;}public long getSecondStamp() {return secondStamp;}public void setSecondStamp(long secondStamp) {this.secondStamp = secondStamp;}public long getMillisecondStamp() {return millisecondStamp;}public void setMillisecondStamp(long millisecondStamp) {this.millisecondStamp = millisecondStamp;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}}
}

这篇关于Java 时间工具类(珍藏版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/163805

相关文章

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("