自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 问答 (1)
  • 收藏
  • 关注

原创 Spring Boot整合JdbcTemplate

JdbcTemplate是Spring提供的JDBC的一套模板框架,目的是利用AOP技术减少了直接使用JDBC的大量重复代码。Spring Boot对JdbcTemplate提供了默认的装载配置类JdbcTemplateAutoConfiguration,部分源码为:@Configuration@ConditionalOnClass({DataSource.class, JdbcTemplat...

2020-02-24 09:39:32 301

原创 Spring Boot整合Servlet、Filter和Listener

整合Servletimport javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet...

2020-02-12 17:25:56 179

原创 Spring Boot自定义拦截器

拦截器顾名思义就是起到拦截的作用,具体是拦截什么呢?可以通过自定义拦截器来拦截你想拦截的请求,下面通过结合API请求时长的例子来说说自定义拦截器。创建拦截器并实现HandlerInterceptor接口import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;i...

2020-02-12 17:25:07 171

原创 Spring Boot全局异常处理、全局数据、参数预处理

整个实现围绕着@ControllerAdvice注解来进行的,@ControllerAdvice主要用来处理全局数据,一般搭配@ExceptionHandler、@ModelAttribute、@InitBinder使用。全局异常处理:一般我们在实际项目中都会对异常进行一个全局处理,方便统一返回,利于前后端的交互,通过搭配@ExceptionHandler来实现全局异常处理。假设目前我们需要定...

2020-02-12 17:24:08 733

原创 Spring Boot整合AOP

AOP作为Spring的一个重点同时也是一个难点,其实我整的也不是很明白,哈哈哈。进入正题,AOP官方的解释是:面向切面编程在AOP中有几个概念需要知道:Joinpoint:连接点,类里面被增强的方法称为连接点Pointcut: 切入点,对增强的方法进行拦截视为切入点Advice:通知,在切入点切入需要干的事情,可以分为前置通知、后置通知、异常通知、最终通知和环绕通知Aspect:切...

2020-02-12 17:22:02 141

原创 Spring Boot上传文件

本文介绍Spring Boot上传文件的两种形式,一种是解析方式是StandardServletMultipartResolver,它是基于Servlet3.0的,所以不需要依赖其他jar包,另一个组件是CommonsMultipartResolver,使用它需要额外引用其它jar包,如想了解,请继续往下看:公共引用方法:private final static String PATH =...

2020-02-06 13:40:41 198

原创 Spring Boot项目基础配置

自定义打包方式首先去除pom文件中的原有的parent<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE&...

2020-01-20 09:22:15 328

原创 创建Spring Boot项目

Intellij idea创建Spring Boot项目选择官方默认的脚手架工具就行next后进入项目信息填写页面,填好信息后直接next就行在上一步过来后基本上只要确认下代码存储位置就行到此,一个简易的Spring Boot项目就创建完成了。新建Spring Boot项目结构简介项目启动为了方便演示,去pom文件中增加web项目依赖 <depe...

2020-01-18 08:45:00 128

原创 Java实现API限流

企业应用中,特别是商城网站,针对于某些API接口请求过于频繁作出某时间段限制访问次数,此文介绍的是通过注解+拦截器来实现限流。自定义注解import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;imp...

2020-01-14 09:27:46 1634

原创 JSON转换工具类及ObjectMapper配置

bean:import lombok.*;@Getter@Setter@AllArgsConstructor@NoArgsConstructor@ToStringpublic class People { private int age; private String name;}JSON工具类:import java.io.IOException;i...

2020-01-06 08:57:29 703

原创 创建Vue项目

初学Vue,如有错误之处欢迎留言指正

2020-01-02 09:45:35 99

原创 日期工具类

本文为一个日期操作的工具类,希望能在工作中帮到大家:package com.lei.tang.java8.utils;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import lombok.AllArgsConstructor;import lombok.Ge...

2019-12-30 09:19:33 90

原创 文件操作

好记性不如烂笔头,此文为了记录下文件的基本操作,需要的时候,方便查阅,下面进行实例:按字节读取文件 /** * 按字节读取文件,一般用于读取图片、声音、影像等二进制文件 * * @param fileName 文件全名 * @param bytes 单次读取字节长度 * @throws IOException */...

2019-12-23 09:53:35 62

原创 Mac nodejs卸载、安装

查看nodejs版本:node -vnodejs npm卸载:sudo npm uninstall npm -gsudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.*sudo rm -rf /usr/local/include/node /Users/$USE...

2019-12-18 15:42:28 3891 1

原创 Java实现url调用远程接口

前段时间做了一些关于微信方面的开发,在项目中写了个调用微信接口的工具类,当然此工具不只是用来调用微信API,也可调用类似微信API的所有接口,多的不说,直接上代码:import java.net.URI;import java.util.List;import java.util.Map;import java.util.stream.Collectors;import com.goo...

2019-12-18 09:09:47 1276

原创 微信报错:45027

错误信息:{“errcode”:45027,“errmsg”:“template conflict with industry hint: [WxS7va04591975]”}创建微信模板失败,以上错误造成原因为公众号设置行业与需创建的模板行业存在冲突,重新选择模板或更改公众号行业信息。...

2019-12-11 09:00:02 2020

原创 腾讯云服务器CentOS Maven安装

获取对应版本下载地址:http://maven.apache.org/download.cgi服务器下载:wget 对应版本下载链接解压压缩包:tar -zxvf 压缩包名 配置环境变量:vi /etc/profile刷新配置文件:source /etc/profile验证是否安装成功:mvn -version...

2019-12-10 11:26:41 193

原创 腾讯云服务器CentOS jdk安装

复制下载链接:官网地址(https://www.oracle.com/technetwork/java/javase/downloads/index.html),华为镜像(https://mirrors.huaweicloud.com/),通过华为镜像地址下载比官网速度快,选择对应版本的下载链接。服务器直接下载:wget 下载链接,下载的压缩包在当前目录解压:tar -zxvf 压缩包,正...

2019-12-03 09:19:20 147

原创 JPA查询报错:java.lang.StackOverflowError: null

org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.StackOverflowError at org.springframework.web.servlet.DispatcherServlet.doDispatch(Dispatch...

2019-11-21 09:00:20 615 1

原创 腾讯云服务器CentOS 7安装MySQL8及密码修改

首先检测下服务器上是否安装了mysql:rpm -qa | grep mysql 无输出证明没有,如已安装,需重新安装的请先卸载查找服务器是否自带mysql安装包:yum search mysql,CentOS 7中未带mysql服务,所以需要先下载repo源,mysql下载地址可选择直接下载,下载到本地后通过命令:scp 本地文件路径 远程用户@远程地址:远程文件路径 上传到服务器,当...

2019-11-19 08:46:38 554

原创 Java8之构建流

由值构建流:使用静态方法Stream.of,通过显式值创建一个流。它可以接受任意数量的参数Stream<String> stringStream = Stream.of("我", "是", "字", "符", "串");由数组构建流:使用静态方法Arrays.stream从数组创建一个流。它接受一个数组作为参数Stream<String> stringStr...

2019-11-12 08:59:50 132

原创 Java8之数值流

在Java8之规约那篇文章中我们用到了数值的计算:Integer sum = numbers.stream().reduce(0, (a, b) -> a + b);,这段代码的问题是,它有一个暗含的装箱成本。每个Integer都必须拆箱成一个原始类型,在进行求和。所以Stream API提供了原始类型流特化,专门支持处理数值流的方法。映射到数值流:将流转换为特化版本的常用方法有mapT...

2019-11-06 09:28:38 172

原创 最长回文子串

题:给定一个字符串 s,找到 s 中最长的回文子串 public String longestPalindrome(String s) { if (s == null || s.length() < 1) { return ""; } char[] chars = s.toCharArray(); in...

2019-10-30 12:58:35 76

原创 Java8之流操作函数介绍

操作类型返回类型使用的类型/函数式接口函数描述符filter中间Stream<T>Predicate<T>T -> booleandistinct中间(有转态-无界)Stream<T>skip中间(有转态-有界)Stream<T>longlimit中间(有转态-有界)Str...

2019-10-24 09:06:15 177

原创 Java8之归约

归约:将流中所有元素反复结合得到一个新值,这样的查询可用被归类为规约操作(将流规约成一个值)。用函数式编程语言的术语来说,这称为折叠。数值类型集合:元素求和 Integer sum = numbers.stream().reduce(0, (a, b) -> a + b); log.debug("sum 操作得到:[{}]", sum); ...

2019-10-21 08:51:43 550

原创 Java8之查找与匹配

首先准备集合:List<People> list = Lists.newArrayList(new People(19, "张三"), new People(23, "李四"), new People(15, "王二"),new People(30, "麻子"));匹配anyMatch:流中是否有一个元素能匹配给定的谓词,存在则返回true,否则false。例:警察检查网...

2019-10-14 10:00:16 542

原创 Java8之map和flatMap

首先定义一个实体类,下面demo中用到:@Getter@Setter@AllArgsConstructor@NoArgsConstructorpublic class People { private int age; private String name;}map方法:这里的map所指的并不是Java中的Map集合,而是Stream中的一个方法,它的作用是...

2019-10-10 15:42:11 269

原创 Java8流操作之筛选与切片

筛选:用谓词筛选(一个返回boolean的函数)筛选,筛选出各不相同的元素用谓词筛选:Stream支持的filter方法,接受一个谓词作为参数,返回所有符合要求元素的流List<Integer> list = Lists.newArrayList(1, 3, 10, 2, 8, 4, -10, -5);//筛选出大于等于4并是偶数的元素后迭代输出list.stream()....

2019-09-25 09:26:18 912

原创 Java8之流操作

java.util.stream.Stream中的Stream接口定义了许多操作。它们可分为两大类: List<Orange> list = Lists.newArrayList(new Orange(1.2, "红"), new Orange(2.3, "黄"), new Orange(3.2, "绿"), new Orange(0.2...

2019-09-18 08:59:08 154

原创 微信接口报错:40163

场景:当使用H5做微信授权时,微信服务器返回错误信息{"errcode":40163,"errmsg":"code been used, hints: [ req_id: nkeen7aLRa-tGQn4 ]"},从返回的errmsg中可以看出是code被使用过。结论:微信网页授权,通过code去获取用户微信信息,code只能调用一次,如果code已使用,则需要获取新的code作为微信凭证。...

2019-09-09 21:48:48 10300

原创 手机号隐藏

多的不说,直接上demo String phone = "12345678983"; phone.replaceAll("(\\d{3})\\d{5}(\\d{3})", "$1*****$2");利用String自带的replaceAll方法进行替换达到隐藏效果,此方法的第一个参数为分组正则表达式参数注释:(\d{3})\d{5}(\d{3}):此参数需...

2019-09-03 09:45:45 168

原创 管道通信

PipedWriter:字符管道输出流,它继承于WriterPipedReader:字符管道输入流,它继承于WriterPipedInputStream:字节管道输入流,继承于InputStreamPipedOutputStream:字节管道输出流,继承于OutputStreamPipedWriter和PipedReader的作用是可以通过管道进行线程间的通讯。在使用管道通信时,必须将P...

2019-08-26 08:51:56 473

原创 线程响应中断

首先介绍下Thread的两个方法:interrupt():设置当前中断标记为trueisInterrupted():检查线程的中断标记@Slf4jpublic class StopThread implements Runnable { public static void main(String[] args) throws InterruptedException { ...

2019-08-19 08:44:50 1826

原创 CyclicBarrier实现线程通信

CyclicBarrier:从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。一个线程组的线程需等到所有线程完成后才继续下一步。例:CyclicBarrier(int parties):parties指定线程数public static void main(String[] args) throws InterruptedException {...

2019-08-12 08:25:33 125

原创 CountDownLatch倒计数器并发工具

CountDownLatch:用于多线程并行执行例:@Slf4jpublic class CountDownLatchDemo { private static volatile int index = 0; public static void main(String[] args) throws InterruptedException { //创建倒...

2019-08-06 08:41:29 142

原创 volatile 共享内存

volatile原理:Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。在访问vola...

2019-08-05 08:53:42 533

原创 线程通信之等待通知机制

等待通知机制模式是java中比较经典的线程通信方式,两个线程通过对同一对象调用等待 wait() 和通知 notify() 方法来进行通讯。例:两个线程从集合中获取数据@Slf4jpublic class ThreadWaitNotify { private static final List<Integer> list = Lists.newArrayList(2, ...

2019-08-02 08:26:10 161

原创 线程通信之join方法

join方法就是挂起调用线程,直到被调用线程执行完毕后再继续执行。例:threadB线程中threadA的join方法,所以threadB需在threadA执行完毕后才继续执行join后的代码,而主线程执行threadB.join(),所以最终主线程需等threadA和threadB执行完毕后才继续。@Slf4jpublic class JoinThread { public sta...

2019-07-30 08:54:44 108

原创 Java线程状态

线程状态:NEW:当使用new Thread()创建一个新的线程,又还没有开始执行它的时候就处于NEW状态;RUNNABLE:当线程执行start之后,线程进入RUNNABLE状态,之后还可能会继续转换成其它状态;BLOCKED:等待执行锁;WAITING:无限期等待另外线程唤醒,即等待其它线程执行notify或notifyAll;TIMED_WAITING:限时等待另外线程唤醒;T...

2019-07-29 09:33:17 72

原创 线程池及Spring Boot举例

创建线程池:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)corePoolSize:线程池的基本大小m...

2019-07-26 08:51:09 195

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除