java
文章平均质量分 80
刘信坚的博客
少说话,多做事
展开
-
SpringBoot1.5.9升级到SpringBoot2.1.3出现Hibernate唯一性约束问题(DataIntegrityViolationException)
org.springframework.dao.DataIntegrityViolationException由于Hibernate4使用的旧的生成器,而Hibernate5默认使用的是新版的生成器.可通过设置spring.jpa.hibernate.use-new-id-generator-mappings=false来解决新生成器生成的id与之前的id冲突,当然也可以用配置类的方式:...原创 2020-06-18 17:47:43 · 562 阅读 · 0 评论 -
JAVA实现快速排序
package com.lxj.alg;public class QuickSorted { public static void main(String[] args) { int [] array = {545,654,2,-11,24,745,58,35,64,75,253,35}; //int [] array = {10,9,8,7,6,5,4,3,2,...原创 2018-07-26 21:57:21 · 457 阅读 · 0 评论 -
Java之23种设计模式-单例模式
单例模式 单例对象(Singleton)是一种常用的设计模式。在 Java 应用中,单例对象能保证在一个 JVM 中,该对象只有一个实例存在。这样的模式有几个好处:1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。2、省去了 new 操作符,降低了系统内存的使用频率,减轻 GC 压力。3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多...原创 2018-07-30 14:28:11 · 218 阅读 · 0 评论 -
用于解决多线程安全问题的三种方式
用于解决多线程安全问题的方式:1. 同步代码块 (隐式锁)2. 同步方法(隐式锁)3. 同步锁 Lock( jdk 1.5 后) 注意:是一个显示锁,需要通过 lock() 方法上锁,必须通过 unlock() 方法进行释放锁下面举一个售票例子:1)同步代码块package com.lxj.juc;public class TestSync { public stat...原创 2018-07-30 21:35:28 · 4918 阅读 · 0 评论 -
多线程实现的四种方式
实现多线程有以下四种方式:1. 继承Thread类2.实现Runnable接口3.实现Callable接口4.线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。体系结构:java.util.concurrent.Executor : 负责线程的使用与调度的根接口 |--ExecutorService 子...原创 2018-07-31 16:52:46 · 54024 阅读 · 2 评论 -
JAVA实现静态代理
首先看看什么是代理模式。一 代理模式 使用一个代理对象将对象包装起来,然后用该代理对象来取代该对象,任何对原始对象的调用都要通过代理,代理对象决定是否以及何时调用原始对象的方法二 静态模式 要求被代理类和代理类同时实现相应的一套接口,通过代理类调用重写接口的方法,实际上调用的是原始对象的同样的方法。如下图:Cilent调用Source的method(...原创 2018-07-27 23:40:24 · 8111 阅读 · 9 评论 -
JAVA实现动态代理
一 动态代理 动态代理是指客户通过代理类来调用其它对象的方法,并且是在程序运行时根据需要动态创建目标类的代理对象,下面直接看代码: 二 测试Animal.javapackage com.lxj.dynamic.proxy;public interface Animal { public void action(); public void breat...原创 2018-07-28 00:56:16 · 934 阅读 · 2 评论 -
强大的Stream并行流
一 了解StreamStream API(java.util.stream.*) Stream 是JAVA8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API对集合数据进行操作,就类似于使用SQL执行数据查询一样。也可使用StreamAPI做并行操作,总之,StreamAPI提供了一种高效且易于使用的处理数据的方...原创 2018-08-01 22:31:46 · 24407 阅读 · 4 评论 -
Java -jar 如何在后台运行项目
说到运行jar包通常我们都会以下面的方式运行:[root@iZ2zei8ft0h4q485kxwxjgZ babyshark]# java -jar babyshark-0.0.1-SNAPSHOT.jar这样运行的话会有一个问题,就是我们一关闭当前窗口就会停止运行项目,要想解决这个问题,就需要在后台运行。[root@iZ2zei8ft0h4q485kxwxjgZ babysh...原创 2018-08-15 20:32:53 · 118637 阅读 · 4 评论 -
并发编程框架----disruptor框架(一)
一 简介 Martin Fowler在自己网站上写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易。这个系统是建立在JVM平台上,其核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单。业务逻辑处理器完全是运行在内存中,使用事件源驱动方式。业务逻辑处理器的核心是Disruptor。Disruptor它是一个开源的...原创 2018-08-18 20:44:34 · 646 阅读 · 0 评论 -
并发编程框架----disruptor框架(二)
一 从上一篇博客可以知道disruptor的工作图如下:给人的印象就是RingBuffer是其核心,生产者向RingBuffer中写入元素,消费者从RingBuffer中消费元素。 RingBuffer其实就是一个环,首尾连接的一个环,只维护一个next()指向的下一个元素,当数据超过最大的限制的时候,其实就是一个覆盖操作,打个比方现在RingBuffer的长度为2^3=...原创 2018-08-19 00:31:17 · 494 阅读 · 0 评论 -
JAVA NIO
一 简介Java NIO, 是从Java 1.4版本开始引入的 一个新的IO API,可以替代标准的Java IO API。 NIO与原来的IO有同样的作用和目的,但是使用 的方式完全不同, NIO支持面向缓冲区的、基于 通道的IO操作。 NIO将以更加高效的方式进行文 件的读写操作。io 与 nio的区别如下IO NIO 面向流(Stream Oriented) 面向...原创 2018-08-20 17:12:09 · 213 阅读 · 1 评论 -
Netty5
在上一篇文章写了JAVA的NIO1.0,这一篇写的Netty其实是基于NIO2(AIO)的一个NIO框架,我们知道传统的IO是一种同步阻塞式的IO,而JDK1.4之后处理的NIO1是一种同步非阻塞式的IO,他们都有一个共同的特点就是都是同步的,这样在多个线程并发访问的时候效率是不高的,NIO2是一种异步非阻塞的IO,效率非常的高,类似ajax和Future模式。如果自己去实现NI...原创 2018-08-20 22:49:04 · 1875 阅读 · 0 评论 -
MapReduce实战一手写WordCount案例
需求: 在一堆给定的文本文件中统计输出每一个单词出现的总次数如下图所示为MapReduce统计WordCount的分析图:map阶段从文件中读取数据,行号作为key,读取的每行值作为value,将每个key/value对输出给reduce阶段,reduce阶段将map阶段所有执行完的结果进行reduce操作,每个相同的key执行一次reduce方法。代码如下:WordCountM...原创 2018-11-04 13:15:15 · 2171 阅读 · 0 评论 -
Java之23种设计模式-抽象工厂模式
一 抽象工厂模式(工厂方法模式请点我)工厂方法模式和抽象工厂模式不好分清楚,他们的区别如下:工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产...原创 2018-07-29 21:15:32 · 213 阅读 · 0 评论 -
Java之23种设计模式-工厂方法模式
一 简单工厂模式在说工厂方法模式之前,先看看简单工厂模式。简单工厂模式分为三种。1)普通就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: 下面举一个发短信和邮箱的例子:Sender.javapackage com.lxj.simplefactory;public interface Sender { public void se...原创 2018-07-29 19:26:20 · 770 阅读 · 0 评论 -
Mybatis中如何调用存储过程
下面就用一个例子来测试Mybatis调用存储过程,并进行分页的例子:使用的是oracle数据库1 存储过程代码如下:create or replace procedure test_page( page_start in int,page_end in int,page_count out int, page_emps out sys_refcursor)asb...原创 2018-07-21 10:38:35 · 17765 阅读 · 0 评论 -
Spring中的任务(异步,定时,发邮件)
一 Spring中的异步任务使用: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题,使用的方法很简单,如下:Serivce.java 和Controller.java 如下package c...原创 2018-06-21 00:54:40 · 2996 阅读 · 0 评论 -
SpringBoot与缓存使用及原理(下)
这次的博客文章是基于上一篇博客SpringBoot与缓存使用及原理(上)一 环境准备pom.xml文件中导入spring-boot-starter-cache,我这里是使用了redis做为缓存<dependencies><dependency><groupId>org.springframework.boot</groupId&g...原创 2018-06-14 02:01:55 · 3629 阅读 · 5 评论 -
(JAVA必备)Lombok(小辣椒)的安装与出现注解无效的问题
一 . 概述使用lombok可以简化我们的JAVA代码,虽然使用Eclipse或者IDEA可以一键生成,但是还是有点麻烦,下面推荐这款工具:二 . 安装与可能出现的问题1 首先官网下载lombok.jar2 打开下载好的lombo.jar,会弹出下面的界面,能够识别你电脑上的IDE3 如果出现权限不足的情况,可以手动安装4 如果出现权限不足的情况,可以手动安装(1) 在eclipse中首先找到ec...原创 2018-06-23 16:45:06 · 5542 阅读 · 0 评论 -
Docker轻松入门(详解)
一 Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。Docker 可以让开发者打包他们的应用以及依赖包到一个...原创 2018-06-18 00:48:29 · 1184 阅读 · 1 评论 -
SpringBoot整合高级消息队列RabbitMQ及原理
一 SpringBoot 与消息概述二 RabbitMQ 概述RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现。Message:消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、de...原创 2018-06-19 01:26:51 · 16021 阅读 · 8 评论 -
SpringBoot整合ElasticSearch及源码
一 Springboot 与检索二 搭建环境整合Elasticsearch,选中该模块,如下图:先来看看自动配置文件,看下为我们做了哪些自动配置:接下来使用docker来创建elasticSearch容器,可以参考之前的博客 Docker轻松入门(详解) 或 Docker轻松入门(详解) 这个时候就可以使用IP地址:9301 进行访问了,如下:出现以下信息就说明已经连接上了。三 插入数据注意:...原创 2018-06-20 01:53:32 · 5392 阅读 · 2 评论 -
Field 'Id' doesn't have a default value解决方法
今天写代码遇到的一个小问题:使用工具将SQL文件导入数据库时出现的问题,一开始没注意到,后来检查了下数据表,发现在Mysql中没有将主键设置为自增,所以在使用Mybatis时获取生成主键时出现异常,异常如下:七月 14, 2018 12:27:33 上午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.s...原创 2018-07-14 00:53:03 · 47154 阅读 · 5 评论 -
Mybatis源码解析之四大对象
一 环境准备以一个最简单的例子来看看Mybatis的运行流程以及Mybatis四大对象起了什么作用。Employee.javapackage com.lxj.bean;public class Employee { private Integer id; private String lastName; private String email; private S...原创 2018-07-19 23:29:01 · 3057 阅读 · 1 评论 -
JAVASE之JAVA集合篇
一 集合概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。JAVA集合可分为Collection和Map两中体系: ...原创 2018-07-28 16:29:17 · 289 阅读 · 0 评论 -
JAVASE之JAVA泛型篇
一 概述 泛型,JDK1.5新加入的,解决数据类型的安全性问题,其主要原理是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这样在类声明或实例化时只要指定好需要的具体的类型即可。 Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。同时,代码更加简洁、健壮。如下图描述:二 使用泛型1...原创 2018-07-28 17:51:35 · 285 阅读 · 0 评论 -
JAVASE之JAVA枚举篇
一 概述JDK5.0之前需要自定义枚举类,而JDK5.0新增的enum关键字用于定于枚举类,若枚举只有一个成员,则可以作为一种单例模式的实现方式枚举类对象的属性不应允许被改动,所以应该使用private final修饰,应该在构造器为其赋值,若枚举类显式的定义了带参数的个构造器,则在列出枚举类时,也必须对应的传入参数。二 Enum枚举类必须在枚举类的第一行声明枚举类对象。...原创 2018-07-28 18:36:59 · 361 阅读 · 0 评论 -
JAVASE之JAVA注解篇
一 注解Annotation概述从 JDK 5.0 开始, Java 增加了对元数据(MetaData) 的支持, 也就是 Annotation(注解)Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理. 通过使用 Annotation, 程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息.Annotatio...原创 2018-07-28 19:57:58 · 230 阅读 · 0 评论 -
JAVASE之JAVAI/O流篇
一 Java IOIO流用来处理设备之间的数据传输。Java程序中,对于数据的输入/输出操作以”流(stream)” 的方式进行。java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中。...原创 2018-07-29 01:56:54 · 333 阅读 · 0 评论 -
如何解决Maven导入Oracle驱动出现Missing artifact com.oracle:ojdbc14:jar:10.2.0.1.0
1. 由于Oracle的授权问题,若要以Maven方式导入Oracle数据库驱动,则必须先手动添加到本地仓库2.首先登录oracle,查看当前数据库版本信息 select * from v$instance;INSTANCE_NUMBER INSTANCE_NAME--------------- ----------------HOST_NAME---------------...原创 2018-07-21 08:52:54 · 5210 阅读 · 0 评论 -
SpringBoot与缓存使用及原理(上)
下面我就开始介绍springboot中的缓存:首先了解下JSR107、Spring缓存抽象等等概念。一 JSR107(下面会有具体Springboot代码演示)Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry。1 CachingProvider定义了创建、配置、获取、管理和控制多个CacheM...原创 2018-06-11 18:17:35 · 63240 阅读 · 16 评论