- 博客(60)
- 资源 (8)
- 收藏
- 关注
原创 IDEA中SpringBoot修改html,Js,Java不重启生效-终极解决
IDEA中SpringBoot修改html,Js,Java不重启生效-终极解决IDEA中SpringBoot修改html,Js,Java不重启生效1. Build project automatically 选中设置2. compiler.automake.allow.when.app.running 选中设置3. Run/Debug Configurations4.终极大招总结IDEA中SpringBoot修改html,Js,Java不重启生效关于这个问题,网上其实已经有太多的帖子了,但还是有很多人照
2020-12-09 17:56:50 2657 4
原创 Springboot2.x+Quartz分布式集群
Springboot2.x+Quartz分布式集群Springboot2.x+Quartz分布式集群数据库脚本MysqlOracleMavenapplication.ymlBeanServiceJobController测试Springboot2.x+Quartz分布式集群生产环境一般都是多节点高可用,Springboot本身自带有定时任务功能,但我们项目需求要求能对定时任务进行增,删,改,查。所以考虑引进Quartz,引入Quartz就需要考虑分布式集群,所以就有了这篇文章。数据库脚本Quartz
2020-09-21 18:19:06 565 1
原创 Java后台服务慢优化杂谈
Java后台服务慢优化杂谈Java后台服务慢优化杂谈前言方案For循环内查询数据库优化For循环内修改数据库优化多线程并发处理缓存异步服务器集群Java后台服务慢优化杂谈前言你是否遇到过这样的场景,当我们点击页面某个按钮后,页面一直loading,要等待好几分钟才出结果的画面,有时直接502或504,作为一个后台开发,看到自己开发的系统是这个样子,就问你惭愧吗。这种问题其实是性能问题,当用户量少数据少的时候,处理还是很快的,数据量一旦大起来,后台处理时间就会延长,前端大部分直接超时或无限等待直接死掉
2020-08-28 12:37:27 859
原创 Redis+Kafka异步提高并发
Redis+Kafka异步提高并发Redis+Kafka异步提高并发设计实现提交请求接口Kafka消费队列异步处理Service客户端轮询获取结果Redis集群节点配置KafKa集群节点配置压力测试Redis+Kafka异步提高并发我们平时开发的后台接口,如果不优化,比如加缓存,异步等,接口并发量很难上得来,因为业务逻辑处理需要时间,后面的请求都在排队,时间一长就都超时了,这就是压力测试经常遇到的问题。简单说就是并发量上不来,那如何提高并发呢。设计提高并发通常有几个步骤,而且是循序渐进的。通常我是按
2020-07-08 08:21:44 2028
原创 Java回调接口
所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的,其实我刚开始也是这样不理解,看了人家说比较经典的回调方式:Class A实现接口CallBack callback——背景1class A中包含一个class B的引用b ——背景2class B有一个参数为callback的方法f(CallBac...
2018-05-20 21:53:12 221
原创 Java并发编程:Callable、Future和FutureTask
在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任...
2018-04-01 22:07:17 122
原创 Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用法 三.Semaphore用法 一.CountDownLatch用法Cou...
2018-04-01 18:54:55 135
原创 Java并发编程:线程池
我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的效果。今天我们...
2018-04-01 18:15:56 139
原创 Java并发编程:阻塞队列
今天我们来讨论另外一类容器:阻塞队列。 在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。 使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就...
2018-04-01 15:20:36 110
原创 ThreadLocal详解
本篇介绍ThreadLocal以下三点:1.ThreadLocal概述2.ThreadLocal基本操作3.ThreadLoad实现原理 一、ThreadLocal概述ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。举个例子,我出门需要先坐公交再做地铁,这里的坐...
2018-04-01 10:32:59 180
策略模式
策略模式,定义了统一的服务接口,封装了不同的实现,对外提供统一的上下文接口,隐藏具体实现。通俗讲就是:相同的功能,不同的规则、算法实现,就可以用策略模式。比如支付功能,系统提供阿里支付,微信支付,银联支付,都是支付功能,不同的实现接口,下面来模拟一下策略模式的实现。/** * 策略接口定义 */public abstract class PayStrategy { ...
2018-03-26 18:16:10 106
模板方法模式
模板方法模式,一般是为了统一子类的算法实现步骤,所使用的一种手段或方式。它在父类定义一系列的算法步骤,而将具体实现推迟到子类。通常情况下,模板方法模式用于定义构建某个对象的步骤与顺序,或定义一个算法的骨架。通常来说父类定义的步骤和顺序或算法骨架,是不允许子类覆盖的,所以在某些场景中,可以直接将父类提供的骨架方法声明为final类型的。下面模拟构建一个html页面,来应用模板方法模式:...
2018-03-26 15:02:58 114
代理模式
说起代理模式,我们想到的就是Spring AOP的实现,主要场景有记录日志,事务管理等。而Spring AOP实现代理模式有两种方式,一种是基于接口的JDK动态代理,一种是基于类的CGlib,今天我们要说的就是基于接口的JDK动态代理。主要从两个方面介绍,一个是使用,一个是原理。 JDK的动态代理如何使用呢?比如我们有这样的需求,要统计Service层的各个方法的开始时间,结束时间,...
2018-03-25 21:29:39 123
单例模式
单例模式简单但重要,主要作用就是保证一个类只能有一个实例对象。 单例模式特点如下:1.必须由类自身来构造实例对象。2.类的构造方法必须私有化。3.对外提供静态方法用于获取实例对象。4.不同的代码写法需要考虑线程安全的问题。 先来看第一种实现方式:public class NoSafeSingleton { private static...
2018-03-25 21:24:41 118
原创 Java IO流总结
本篇主要对Java基础中BIO文件输入输出流做一个总结。首先来看一下IO流的分类,图片来自网络:直接上代码吧: 1.字节输入流FileInputStream,字节输出流FileOutputStream:/** * FileInputStream 读取原始字节流 **/public class TestFileInputStream{ public sta...
2018-03-20 13:47:05 374
Object类的equals方法和hashCode方法
Object 类是所有类的父类,Object类中定义了很多重要的方法,有些基础方法是必须要搞清楚的,今天我们就来学习下Object类中的equals方法和hashCode方法。 一、equals方法首先我们来看下Object类的equals方法的源码:public boolean equals(Object obj) { return (this == obj)...
2018-03-19 18:12:05 245
Java中的static关键字
静态变量静态方法static关键字基本用法:1.被static修饰的变量为静态变量,通过类名.变量名可以直接访问。2.被static修饰的方法为静态方法,通过类名.方法名可以直接访问。静态变量和静态方法属于类自身,被类对象实例共享。有些人容易混淆的一个问题:静态方法能不能引用非静态资源?静态方法里面能不能引用静态资源?非静态方法里面能不能引用静态资源?比如就以这段代码为例,...
2018-03-19 15:12:22 112
Java中的final关键字
我们都知道Java中final关键字的用法:被fiinal修饰的类不能被继承。被final修饰的方法不能被重写。被final修饰的变量不能被修改。 然而,被final修饰的变量不能被修改,这个怎么理解呢,是变量的值不能被修改,还是引用不能被修改呢,引用的对象可以被修改吗,我们来看代码:package com.yuwl.jdk;/** * 测试内容:f...
2018-03-18 22:39:33 105
Maven解决Missing artifact com.sun:tools:jar:1.5.0错误
关于这个错,其实网上有很多解决方案,这里记录主要是我被踩坑了,坑就在下面。我在import maven项目时,pom.xml报错Missing artifact com.sun:tools:jar:1.5.0,经过盘查发现是pom引入的struts2相关jar包导致报错。上网查询说是struts2-core.jar需要依赖Java运行时的tools.jar,解决方案就是将这个jar包手...
2017-03-25 21:26:15 527
Java并发编程:AtomicInteger&CAS
很多情况下我们只需要一个简单的、高效的、线程安全的递增递减方案,而Java中++i或--i并不是线程安全的,但是java.util.concurrent包中提供原子(Atomic) 操作的类,今天我们就来学习它最基本的AtomicInteger。 以下是本文包含的知识点:1.什么是原子操作2.AtomicInteger用法3.CAS介绍4.AtomicIntegerAr...
2016-07-30 16:47:59 179
Java并发编程:Lock&ReentrantLock&Condition
在Java中,除了使用synchronized关键字实现线程同步,还可以使用java.util.concurrent.locks包下的重入锁(ReentrantLock)来实现同步。今天我们就来学习ReentrantLock同步。以下是本文包含的知识点:1.Lock接口介绍2.ReentrantLock的使用3.ReentrantLock与synchronized实现同步的区别...
2016-07-23 22:45:27 184
Java并发编程:synchronized&volatile
根据前面讲的Java内存模型,已经接触不少synchronized,而且它非常强大,能解决大部分的并发问题,今天我们一起来学习它吧。以下是本文包含的知识点:1.Java的线程安全2.synchronized的用法3.synchronized的实现原理4.volatile关键字 一、Java的线程安全我们这里讨论的线程安全,限定于多个线程之间存在共享数据访问的...
2016-07-19 16:37:30 130
Java并发编程:Java内存模型
学习Java并发编程,必须要学习Java内存模型,也是学习和理解后面更深入的课程打下基础,做好准备。今天我们就来学习下Java内存模型。以下是本文包含的知识点:1.硬件的效率与一致性2.Java内存模型3.主内存和工作内存4.原子性、可见性与有序性5.先行发生原则(Happens-before)一、硬件的效率与一致性由于计算机的存储设备与处理器的运算速...
2016-07-18 17:13:52 141
Java并发编程:Thread类的使用
Java并发编程,是Java的高级开发部分,平时项目很少用到,主要原因还是不熟悉,从今天开始整体学习研究下,后面会有一个系列的学习,也为以后在项目中经常使用打下基础。首先来回顾下Java最基本的多线程开发,就是java.lang.Thread类。以下是本文包含的知识点:一、线程的基本概念二、线程的创建和启动三、线程的状态控制四、线程的同步五、生产者消费下面开始本文的...
2016-07-16 11:40:22 171
原创 Spring+Quartz配置总结
用过好几次Spring+Quartz配置,来做定时任务,以前也用jdk自带的Timer,今天来好好总结下Spring+Quartz配置吧。 在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法仍然是普通类。很显然,第二种方式远比第一种方式来的灵活。这里详细介绍下第二种方式 一、先...
2016-02-16 14:11:04 289
原创 Ajax请求导出Excel的问题
Ajax请求导出Excel的问题描述:前端发起Ajax请求get或post,后台使用Poi生成excel文件,最后用response输出excel文件流。整个调用过程都没有报任何错,excel文件也生成在本地,但浏览器没有弹出文件下载,毫无反应。 解决:开始一直以为是浏览器兼容性,或后台输出文件流代码有问题,调了半天,也都一样,不报任何错。后来上网搜发现在类似的问题,Ajax导出...
2016-02-01 16:12:02 1811 1
项目管理利器-Maven实战
Maven基于项目对象模型(POM),集项目构建,编译,测试,打包,安装一站式服务。是目前主流的项目开发的管理利器,今天来详细学习下。一、Maven下载与环境搭建Maven下载:http://maven.apache.org/download下载压缩包,解压缩到D盘要目录即可配置环境变量:M2_HOME:D:\apache-maven-3.1.1\Path添加:;%M2_...
2016-01-24 21:01:24 145
Java注解-自定义注解实例
在Java中注解随处可见,学习Java注解,知道其原理,可以读懂很多开源框架,如Spring,Mybatis等,还可以自定义注解实现更高级的功能。 一、常见的Java注解 Jdk自带的注解:@Override,@SuppressWarnings,@Deprecated(方法过时) 第三方框架注解:Spring,Mybatis等 二、注解的分类1.按运行机制分 源...
2016-01-23 21:24:42 326
原创 Mysql在Linux下数据库名表名严格区分大小写
公司在做服务器牵移,应用,数据库都要从windows移到 linux。开始在windows下没有任何问题,上线的产品。后来一挪到linux下,报部分表找不到,但去数据库查还有的。最后问题是:我们用的ibatis,数据库的名表有的是大写的,有的是小写的。网上一查发现Linux下,Mysql数据库名表名严格区分大小写。解决方法:sql语句中表名统一都使用小写,其它的按规范也尽量都...
2015-07-06 09:22:51 145
原创 Log4j基本使用
Log4j基本使用方法Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。 定义配置文件其实您也可以完全不使用配置文件,而是在代码中配置Lo...
2015-05-23 16:31:59 86
原创 Eclipse使用Ant插件打war包
Eclipse使用Ant插件打包 工程的根目录,创建build.xml文件,内容如下:<?xml version="1.0" encoding="UTF-8" ?><project name="mtcps" default="war" basedir="."> <!-- ====================
2015-05-23 16:23:06 560
原创 oracle数据库使用数据泵导入导出
主要使用expdp,impdp两个命令 --导出数据1.创建目录create directory yzdump as 'd:/dump'; 2.给用户授权目录(sys用户)grant read,write on directory yzdump to yuzheng; 3.在命令行cmd窗口导出数据expdp yuzheng/yuzheng@orcl di...
2015-05-23 16:16:19 422
原创 LinkedList源码解析(Jdk6)
Java的LinkedList是基于双向链表实现的List集合类。它的特点有:1.没有容量限制。2.添加,删除元素比较快;检索元素较慢(较ArrayList)。3.可能实现为队列,栈4.线程不安全下面来看其源码实现:1.类定义 public class LinkedList<E> extends AbstractSequentialList...
2015-05-12 22:35:48 187
原创 ArrayList源码解析
ArrayList是Java集合框架中,我们平时用得最多的一种实现类。它的底层其实是数组实现,只不过是动态改变数据大小,来看源码。1.类定义public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, ja...
2015-05-10 22:13:28 109
原创 Java集合框架
转自:http://www.cnblogs.com/skywang12345/p/3308498.htmlhttp://www.cnblogs.com/hzmark/archive/2012/12/17/CollectionBase.html Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*...
2015-05-10 20:37:57 153
原创 Windows下Nginx+Tomcat整合的安装与配置(转)
转自《Nginx - Windows下Nginx基本安装和配置》,《Windows下Nginx+Tomcat整合的安装与配置(一)【精】》 Nginx 是一个轻量级的高性能 Http WebServer,以事件驱动方式编写,因此相比 Apache 而言,Nginx 更加稳定、性能更好,而且配置简单,资源占用较低。 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就...
2015-05-07 23:11:30 223
原创 数据库索引的实现原理(转)
这是源自一个道面试题,当然答得不好了,回来google吧转自《数据库索引的实现原理》,《MySQL索引背后的数据结构及算法原理》 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实...
2015-05-07 18:27:19 179
原创 SQL查询语句执行顺序(转)
今天面试被问到一问题:sql查询语句的执行先后顺序,一时没回答好,回来google下转自《SQL逻辑查询语句执行顺序》,个人感觉分析得还不错。 我的抱怨我一个搞应用开发的,非要会数据库,这不是专门的数据库开发人员干的事么?话说,小公司也没有数据库开发人员这么个职位吧。好吧,对数据库最深的印象还停留在大学《数据库原理》这堂课上,什么第一范式,第二范式…,这些理论的东西,多多少少还是...
2015-05-07 17:39:28 507
原创 java设计模式学习(转)
转自《Java之美[从菜鸟到高手演变]之设计模式》参考:《如何正确地写出单例模式》,《JDK里的设计模式》 一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模...
2015-05-01 22:37:02 108
原创 jdk动态代理学习笔记(转)
转自java动态代理学习笔记我自己的总结:1.jdk动态代理要解决的问题是什么呢?说白了就是在调用我们的方法前后做些其它处理,如日志,性能监测,事务管理等。而这些操作一般都是批量,所有的service,所有的方法。因此Spring的AOP将它应用地非常好。2.那jdk如何实现动态代理呢?它主要有两个东西,一个是InvocationHandler接口,它就一个方法invoke,我们...
2015-04-26 19:14:48 127
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人