- 博客(112)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 记一次接入websocket过程中@ServerEndpoint和@Scope(“prototype“)、@Autowire、@Postconstruct一起使用不生效的原因分析
记一次接入websocket过程中@ServerEndpoint和@Scope(“prototype“)、@Autowire、@Postconstruct一起使用不生效的原因分析
2022-06-22 19:05:19
2632
原创 Java8 Optional 常用api
public class OptionalExample { public static void main(String[] args) { testOfNullable(); testOrElseGet(); testFlatMap(); testPresent(); testFilter(); testEquals(); } /** * Optional.of方法基本.
2022-03-31 16:04:32
405
原创 Java8 CompletableFuture常用方法举例
public static void main(String[] args) throws ExecutionException, InterruptedException { // supplyAsync提供返回值 CompletableFuture<Integer> c1 = CompletableFuture.supplyAsync(() -> { return 1; }); // suppl.
2022-02-15 16:52:01
629
原创 通过分析dubbo源码注入service bean并搭建springboot dubbo zookeeper框架
抽空搭了一下dubbo脚手架,发现网上的教程五花八门,所以自己研究了一下dubbo注入service的原理,在这里记录一下。我用的是springboot 2.4.3、zookeeper 3.5.9、dubbo 2.7.8首先了解一下spring的BeanDefinitionRegistryPostProcessor和dubbo包的ServiceClassPostProcessor;BeanDefinitionRegistryPostProcessor:spring中自定义bean重要的类,它
2021-03-01 15:44:58
911
原创 Java类型转换(详细)
(1)数组=》 字符串:Arrays.toString(array);(2)字符串=》字符数组第一种:String.getChars(srcBegin,srcEnd,destn,destBegin);第二种:String.toCharArray();(3)字符=》字符串chara[]={‘a’,’b’,’c’};方法一:System.out...
2019-12-18 11:55:29
696
原创 Java8 Stream(聚合操作)的常用api以及它和parallelStream的主要区别
/** * 构造Stream流的几种方式 */ //数组 String[] arr = new String[]{"a", "b", "c"}; Stream<String> stream = Arrays.stream(arr); Stream<String&g...
2019-07-01 15:39:44
1275
原创 Spring源码解析之BeanFactory和ApplicationContext的区别
相同点:1.ApplicationContext间接继承了BeanFactory接口,在ClassPathXmlApplicationContext构造函数的源码中获取了BeanFactory,所以ApplicationContext拥有BeanFactory的所有功能(加载bean和获取bean的功能)。不同点:1.ApplicationContext提供的额外功能:增加SP...
2019-05-22 13:35:46
608
转载 解决spring boot swagger ui使用 nginx 部署后无法使用问题
spring boot 使用 swagger ui做接口文档, 本地测试没有问题,但是部署到linux上时,访问域名,就会得到如下结果:解决办法:修改nginx配置文件: nginx/conf.d/default.conf原文件:server { listen 80; server_name quanke.name; loca...
2019-05-09 13:18:05
2717
原创 记一次在编译openjdk源码时踩的坑!
最近在看《深入理解jvm虚拟机》一书,第一章中介绍道编译openjdk源码,需要到官网下载openjdk以及jdk plug,我发现下载链接都是打不开的看到一篇博客聊到这个话题,https://blog.youkuaiyun.com/chenyyhh92/article/details/78298510,他说openjdk的下载链接是错误的原链接(错误):http://www.java.ne...
2019-04-19 13:43:44
661
原创 利用Redis分布式锁实现Quartz分布式调度
背景前两天研究的利用数据库锁实现Quartz分布式调度一文中提到几点问题,利用数据库行锁机制和唯一性约束,不仅无法解决单点问题,而且频繁访问数据库,造成db性能降低。那么最近就研究了一下redis缓存服务,通过redis的哨兵和复制功能(不知道这两个功能的,请自行百度)可以实现redis集群部署和redis分布式锁,并且数据是缓存在内存中的,所以性能要比数据库锁提高很多。思路1.既然是...
2019-04-12 18:06:36
3354
4
原创 利用数据库锁实现Quartz分布式调度
背景当我们使用Quartz做任务调度的时候,随着访问量越来越大,我们需要在多台机器上同时实现Quartz,这里会出现一个问题,分布式环境下,同一个任务调度可能被执行多次,这就与我们期望的结果不一致了,那么如何解决呢?下面提供两种基于数据库锁的解决方法。两种思路1.使用数据库自带的行锁机制,使得只有一个线程能获得该锁,并在线程执行完毕后释放该锁2.利用unique key的唯一性,...
2019-04-11 11:29:32
3383
1
原创 SpringBoot集成Quartz,动态创建,更新,暂停,唤醒,删除任务调度
Quartz介绍Quartz可以实现创建任务,修改任务周期等等功能,可以通过javaconfig配置任务调度,并在启动时执行,也可以动态创建任务。SpringBoot也集成了Quartz框架,并提供spring-boot-starter-quartz依赖。Quartz中几个核心概念:SchedulerFactoryBean:用来创建,配置一个Scheduler,并管理其生命周期。 T...
2019-03-26 17:54:39
2612
1
转载 springboot集成memcached的两种方式
http://www.ityouknow.com/springboot/2018/09/01/spring-boot-memcached.htmlhttps://blog.youkuaiyun.com/oneil2016/article/details/81665682
2019-03-25 17:25:12
3287
1
原创 Oracle日期函数add_months()、last_day()、months_between()的用法
add_months(date,n)返回指定日期date加上n月后的日期select add_months(to_date('20190321','yyyyMMdd'),22) from dual;--返回2021/1/21last_day(date,n)返回指定日期date减去n个月后的日期select last_day(to_date('20190321','yyyyMM...
2019-03-21 16:56:44
7897
原创 java中如何造成死锁的?以及如何解决死锁
造成死锁的原因:1.在一个代码块中同时获得多个锁,导致多个线程同时执行代码时,获取锁之间相互依赖,从而导致锁“抱死”。例如,t1线程首先获得A锁,再获得B锁,t2线程先获得B锁,再获得A锁,当t1获得A锁的同时,t2获得了B锁的使用权,此时t1无法获取B锁,t2也无法获得A锁,线程一直等待,这就叫锁“抱死”。2.在同步代码块中调用了外部的同步方法(常见)下面我将结合实际情况分析账户...
2019-03-21 15:26:37
5167
原创 在SpringBoot使用mybatis-plus实现Oracle主键自增的详细配置
第一种方案首先在mybatis的配置文件中写一个全局配置bean,使用com.baomidou.mybatisplus.incrementer.OracleKeyGenerator<bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration"> ...
2019-03-19 14:33:49
7624
原创 SpringBoot中如何做全局统一异常处理
注解解读:@ControllerAdvice:它定义在一个类上,和@Component类似,它使得@ExceptionHandler、@InitBindler、@ModelAttribute注解可以作用在所有@RequestMapping注解上。@ExceptionHandler:它定义在Controller的方法上,作用是捕获指定的异常,然后进行统一处理并返回最后的结果。理解了@...
2019-03-15 16:05:13
3364
原创 spring中bean标签的属性、子元素配置详解
spring中有4种默认标签:import,alias,bean,beans;以下是各个标签中属性以及子元素配置的作用和用法。(本人使用的是spring 4.2,若有错误,烦请指正)bean标签标签属性idid是bean的唯一标识符,在spring容器中不可能同时存在两个相同的id;class类的全限定名(包名+类名),用“.”号连接;name别名(alia...
2019-02-27 15:59:13
9707
2
原创 spring读取xml配置文件的6种方法
第一种: ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = (User) ctx.getBean("user");第二种: BeanFactory bf = new XmlBeanFactory...
2019-02-22 16:40:19
4221
原创 spring中profile属性实现开发、测试、生产环境的切换
profile的用法<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http:/
2019-02-22 15:34:24
1559
转载 String的intern方法详解
引言 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:直接使用双引号声明出来的String对象会直接存储在常量池中。 如果不是用双引号声明的String...
2019-02-20 09:58:59
429
原创 2019年规划
2018,来到公司的第一个整年,在这一年里在工作中主要涉及sql编写,sql优化,业务逻辑,代码编写以及学习一些金融知识(ps:公司是做金融服务系统的),印象深刻的是做了一个单点登录的需求,通过was系统(ibm公司的一个集群服务器websphere)配置拦截器实现用户输入一次账号密码,可以登录多个系统,was系统是已经搭建好的,难点是要学会如何配置拦截器,并且如何实现用户域账户的自动存储和识别...
2019-02-11 11:14:54
427
原创 设计模式-访问者模式(visitor)以及JDK类库中的应用
访问者模式定义表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变元素的类的前提下定义作用于这些元素的新操作。结构Visitor:抽象访问者类,为该对象结构中的每一个类声明visit操作。ConcreteVisitor:具体抽象类,实现visit操作,将ConcreteElement作为方法参数。Element:抽象元素类,定义一个accpet接口,将visior作...
2019-01-31 09:37:25
409
原创 java代码优化(十)——序列化
谨慎地实现序列化接口实现序列化接口的利与弊:坏处一是一旦被序列化的类发布,就大大降低类的灵活性。坏处二是它增增加了bug和安全漏洞的可能性。坏处三是随着发行版本的增加,相关的测试任务急剧增加。好处就是将一个对象加入到框架中,当该框架需要依靠序列化来实现对象传输或持久化时,让该对象实现序列化是非常有必要的。例如Date、BigInteger、集合等应该实现serializable...
2019-01-29 10:36:54
630
原创 java代码优化(九)——并发
同步访问共享的可变数据①关键字synchronized可以保证同一时刻只有一个线程执行一个方法或者一段代码块。②同步的意义:同步不仅可以阻止一个线程看到对象处于不一致的状态之中,它还可以保证进入每个同步代码块或者同步方法的线程都可以看到由同一个锁保护的之前的修改效果。③java语言规范保证读写一个变量是原子的,换句话说,读取一个非long或者非double类型的变量时,可以保证返回的值...
2019-01-24 09:53:10
272
原创 java代码优化(八)——异常
只针对异常的情况才使用异常不要将它用在普通的控制流上,比如遍历数组请不要使用以下方式: try { int a[] = {1,2,34,5}; int i = 0; while(true){ System.out.println(a[i++]); } } catch (ArrayIndexOutOfBoundsException e) { e....
2019-01-16 14:23:15
353
原创 设计模式-解释器模式
解释器模式定义给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器可以使用该表示来解释这个句子。结构Context:环境类,它包含除解释器以外的全局信息。AbstractExpression:抽象解释器类,定义一个实现类的接口。TerminalExpression:终结符表达式类,实现与文法中的终结符相关联的解释操作。NonTerminalExpressi...
2019-01-15 17:22:25
179
转载 使用Quartz做任务调度
废话的前言以前凭借年轻,凡事都靠脑记。现在工作几年后发现,很多以前看过、用过的东西,再次拿起的时候总觉得记不牢靠。"好记性不如烂笔头"应该是某位上了年纪的大叔的切肤之痛(仅次于上了年纪的难言之瘾)。我觉得这事得怪怪中国的应试教育,中国的考试方式就是要求把脑袋当数据库,以前中学那点知识,确实还能装得下。但现在所需的知识量再一次性装入大脑,就是内存溢出的节奏。另,再相信什么人脑只开发5%的蠢话...
2019-01-14 16:29:47
439
原创 设计模式-享元模式(flyweight)以及在JDK类库中的应用
享元模式定义运用共享技术支持大量细粒度的对象。结构FlyWeight:抽象享元类,它定义了具体享元类实现的接口。ConcreteFlyWeight:具体享元类, 为内部状态增加存储空间。FlyWeightFactory:享元工厂类,核心是HashMap或者HashTable,工厂类初始化时将享元对象put到集合中,根据客户端提供的标识来返回指定的享元对象。Unshare...
2019-01-11 15:30:25
691
原创 java代码优化(七)——通用程序设计
将局部变量的作用域最小化在方法的一开头就声明一个局部变量这样的做法是不正确的,请在第一次使用该变量的地方声明局部变量。for循环优先于while循环,因为while循环将会在while循环体外声明局部变量,而for循环只会在循环体内声明局部变量,这样局部变量的作用域就限定在了循环体内。 for-each循环优先于传统的for循环for-each不仅可以遍历数组、集合还可以遍历任...
2019-01-10 17:35:17
257
原创 设计模式-中介者模式(Mediator)以及JDK类库中的应用
中介者模式定义用一个中介者来封装一系列的对象交互,这一系列对象不需要显示的互相引用,从而使其解耦合,而且可以独立的改变它们之间的交互。结构Mediator:抽象中介者,它定义了具体同事类交互的接口。ConcreteMediator:具体中介者类,它持有所有具体同事类的引用,实现了抽象类中定义的接口,并且维护具体同事类之间交互的业务逻辑。Colleague:抽象同事类,它持有...
2019-01-10 14:33:30
776
转载 Spring源码构建项目,导入eclipse后,缺失spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar的解决办法
在导入ide之后,发现有spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar不存在,在spring-framework目录下执行gradle objenesisRepackJar和gradle cglibRepackJar命令,会在Spring-framework\spring-core\build\libs目录下生成jar包。...
2019-01-09 16:32:46
668
1
转载 Gradle 编译spring源码时报错 peer not authenticated
从git下载spring3.2源码后,安装Gradle进行编译时报错,peer not authenticated,不能正常从仓库下载文件。使用 JDK版本为1.7,Gradle版本为3.0,更换Gradle版本也不起作用。解决方法,1.打开build.gradle文件,把所有网址中的 https 改成 http。2.在repositories中新增 maven { url "...
2019-01-09 15:45:37
615
转载 oracle使用logminer工具对日志进行分析
logminer日志分析:http://www.cnblogs.com/shishanyuan/p/3140440.html归档日志路径三个参数DB_RECOVERY_FILE_DEST和LOG_ARCHIVE_DEST和LOG_ARCHIVE_DEST_n:https://blog.youkuaiyun.com/landdin2013/article/details/47204329...
2019-01-04 10:15:38
362
原创 Oracle使用触发器实现实时监控DDL操作
说到触发器,它其实就是一种特殊的存储过程,存储过程是需要我们人为的执行,而触发器是通过一个“触发事件”来执行的,这个触发事件可以是行级触发事件、语句级触发事件、替换触发事件或者用户触发事件。而这里我要讨论的是用户事件触发,顾名思义用户事件触发就是指当用户执行了DDL操作或者用户登录、登出操作时记录下这一行为。常见的用户触发事件操作包括:create、alter、drop、truncate、co...
2019-01-03 16:56:56
2263
2
原创 java代码优化——方法
检查方法中参数的有效性请在编写方法时考虑参数的有效性,一般的需要在方法体的开头校验参数的有效性。例如ArrayList的get方法中参数i是一个非负数,如果输入一个负数将会报错:ArrayIndexOutOfBoundsException,这是因为在get方法体首先对i做了检查:/** * Returns the element at the specified positio...
2019-01-01 18:16:25
420
原创 设计模式-职责链模式(Reposibility)以及在JDK类库中的应用
职责链模式定义使多个对象都可以处理一个请求,将这个对象连成一条链,并沿着这条链传递该请求,直到其中某个对象可以处理它为止。结构抽象处理类:它持有自身的一个引用,定义了一个用来处理请求的接口具体处理类:实现了抽象处理类的接口方法,在方法内部判断是否让其处理请求还是放到下一个处理类来处理。类图个人理解:职责链模式的思想是复合+转发的方式实现的,只不过这次复合的对象是它...
2018-12-29 14:08:16
401
原创 设计模式-命令模式(Command)以及JDK类库中的应用
命令模式定义将一个请求封装为一个对象,根据不同的请求对客户进行参数化。结构Command(命令抽象类):定义一组可以执行的操作接口。ConcreteCommand(具体命令类):它持有Receiver的引用,针对不同的命令执行具体的操作方法。Receiver(接受者):定义执行者统一的接口,它可以是接口,也可以是具体实现类。Invoker(调用类):它持有Command...
2018-12-28 17:34:54
1086
原创 java代码优化(五)——枚举和注解
枚举和注解用enum代替int常量java枚举的本质是int值,枚举类型的常量事实上是公有的静态final域修饰的,所以每个常量都是不可被修改的,只有在类加载时实例化一次,另外枚举类型是自动序列化的,防止反序列化攻击,可以保证常量一定是单例的。枚举类型中可以增加成员变量、方法、构造器、接口、抽象类。public enum Computer { APPLE, DELL, LE...
2018-12-27 17:21:50
379
指教!新手如何做demo
2016-11-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人