
java
文章平均质量分 90
ieflex
读书郎
展开
-
elcipse 安装lombok插件解决 @Slf4j 等找不到log变量问题
由于最近在弄elastic-job ,在下载源码后会报一些错误,变量log 找不到,没有getter/setter 方法之类的。之前没有接触过lombok ,这次看了些帖子,也只是暂时解决了这样的问题。1.前往官网下载:https://projectlombok.org/downloadlombok.jar2.将lombok.jar放在eclipse的安装目录下。3.在...转载 2019-12-12 17:19:42 · 361 阅读 · 0 评论 -
物联网云平台ThingsBoard简介
ThingsBoard简介ThingsBoard是一个开源平台,功能强大,性能稳定。用于收集和可视化物联网设备的数据。可以将来自任意数量设备的数据发送到云服务器,在云服务器中可以通过可自定义的仪表板查看或共享。ThingsBoard相关概念租户tenant:拥有或物联网设备的个人或组织。 设备管理:租户可以创建添加自己的设备,每个设备有唯一ID用来和指定传感器进行绑定。 仪表盘:仪...原创 2019-10-29 11:19:31 · 5670 阅读 · 1 评论 -
lombok的使用与eclipse配置lombok插件
背景lombok库提供了一些注解来简化java代码官网:http://projectlombok.org/查看lombok所有api:https://projectlombok.org/api/overview-summary.html几个常用的 lombok 注解:@val : 和 scala 中 val 同名, 可以在运行时确定类型;@NonNull : 注解在参数上,...原创 2019-05-14 15:06:15 · 924 阅读 · 0 评论 -
JVM深入学习与总结
一,JAVA虚拟机JVM内存图解二,JVM区域总体分两类,堆heap区和非堆heap区。非heap区:1.Program Counter Register(程序计数器); 程序计数器是一块较小的内存区域,作用可以看做是当前线程执行的字节码的位置指示器。分支、循环、跳转、异常处理和线程恢复等基础功能都需要依赖这个计算器来完成,线程间内存私有互不影响。2.M...原创 2019-01-30 16:18:14 · 680 阅读 · 0 评论 -
Java多线程再学习,温故知新(十五)Exchanger
ExchangerExchanger可以在两个线程之间交换数据,可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用。下面是一个Exchange...原创 2019-02-06 20:35:28 · 242 阅读 · 0 评论 -
java基础(一)集合
数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。Set 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals(...原创 2019-02-06 15:42:18 · 231 阅读 · 0 评论 -
学习Spring源码(四)Spring Bean注册解析
Spring是通过IoC容器对Bean进行管理的,而Bean的初始化主要分为两个过程:Bean的注册和Bean实例化。Bean的注册主要是指Spring通过读取配置文件获取各个bean的声明信息,并且对这些信息进行注册的过程。Bean的实例化则指的是Spring通过Bean的注册信息对各个Bean进行实例化的过程。本文主要讲解Spring是如何注册Bean,并且为后续的Bean实例化...原创 2019-02-15 16:52:16 · 556 阅读 · 0 评论 -
Java多线程再学习,温故知新(九)线程之间的通信Condition
ConditionCondition主要是为了在J.U.C框架中提供和Java传统的监视器风格的wait,notify和notifyAll方法类似的功能。JDK的官方解释如下: 条件(也称为条件队列 或条件变量)为线程提供了一个含义,以便在某个状态条件现在可能为 true 的另一个线程通知它之前,一直挂起该线程(即让其“等待”)。因为访问此共享状态信息发生在不同的线程中,所以它必须受保...原创 2019-02-02 17:06:11 · 262 阅读 · 0 评论 -
Java多线程再学习,温故知新(十四)Semaphore
Semaphore一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。...原创 2019-02-05 18:00:37 · 346 阅读 · 0 评论 -
Java多线程再学习,温故知新(十三)CyclicBarrier
CyclicBarrier 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。CyclicBarrier 支持一个可选的 Runnable 命...原创 2019-02-05 17:37:12 · 195 阅读 · 0 评论 -
Java多线程再学习,温故知新(十二)CountDownLatch
CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考...原创 2019-02-05 16:58:37 · 252 阅读 · 0 评论 -
Java多线程再学习,温故知新(八)线程之间的通信之wait notify
线程之间的通信 线程通信的目标实际上是线程直接能够互相发送信号,线程在接收到信号后执行特定的逻辑,信号可以是线程直接可见的变量; 也可以说线程直接有一些关联的操作,比如A,B两个线程,B线程需要等A线程执行完毕后在接着执行。 线程实现的方式: 1.使用自旋的方式public class Demo { private volatile i...原创 2019-01-29 14:49:09 · 173 阅读 · 0 评论 -
Java多线程再学习,温故知新(十一)ThreadLocal 使用及实现原理
那么这种情况下使用ThreadLocal是再适合不过的了,因为ThreadLocal在每个线程中对该变量会创建一个副本,即每个线程内部都会有一个该变量,且在线程内部任何地方都可以使用,线程之间互不影响,这样一来就不存在线程安全问题,也不会严重影响程序执行性能。 但是要注意,虽然ThreadLocal能够解决上面说的问题,但是由于在每个线程中都创建了副本,所以要考虑...原创 2019-02-03 17:24:37 · 275 阅读 · 0 评论 -
实战用Eclipse新建或导入SpringBoot项目
1.下载安装jdk1.8https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html2.配置好Java环境变量右击“我的电脑”-->"属性"-->"高级系统设置"-->"高级"-->"环境变量" 在系统变量里新建"JAVA_HOME"变量,变量值为...原创 2019-03-18 11:06:15 · 7066 阅读 · 0 评论 -
Java多线程再学习,温故知新(十六)提前完成任务FutureTask
FutureTask提前完成任务,与FutureTask相关的类或接口,有Runnable,Callable,Future。Future接口表示异步计算的结果,通过Future接口提供的方法,可以很方便的查询异步计算任务是否执行完成,获取异步计算的结果,取消未执行的异步任务,或者中断异步任务的执行。jdk1.5之后,Java提供了Callable接口来封装子任务,Callable接口可以获...原创 2019-02-09 15:18:21 · 718 阅读 · 0 评论 -
Java多线程再学习,温故知新(十七)ForkJoin框架详解
ForkJoin是Java7提供的原生多线程并行处理框架,其基本思想是将大任物分割成小任务,最后将小任务聚合起来得到结果。它非常类似于HADOOP提供的MapReduce框架,只是MapReduce的任务可以针对集群内的所有计算节点,可以充分利用集群的能力完成计算任务。ForkJoin更加类似于单机版的MapReduce。多线程的目的不仅仅是提高程序运行的性能,但是可以充分利用CPU资源For...原创 2019-02-11 13:19:51 · 300 阅读 · 1 评论 -
Tomcat配置与优化
JVM设置 l 一般使用HotSpot JVM。 l 加上-server。 l -Xms/-Xmx:设置Java堆初始化和最大值,默认是1/64物理内存和1/4物理内存,一般不超过物理内存的80%,且这两个应该设置成一样,,够用就好,太高会导致浪费内存和GC回收周期长。 l -XX:NewSize/-XX:NewRatio:设置成25%-33%java堆总量,太高太低都会导致无效GC。 ...原创 2019-02-11 14:50:56 · 315 阅读 · 0 评论 -
ThingsBoard架构简介
之前介绍了一些thingsboard的使用,今天简单的介绍下thingsboard用到的技术ThingsBoard使用笔记(1) 安装ThingsBoard使用笔记(2)模拟传感器发送MQTT并显示监控图表ThingsBoard使用笔记(3)模拟控制远程温度传感器ThingsBoard使用笔记(4)创建资产并在地图上显示架构文档:https://thingsboard.i...原创 2019-08-09 16:47:55 · 18754 阅读 · 0 评论 -
Actor模式理解与使用
最近学习ThingsBoard,其中大量使用了Actor设计模式,再这里做个Actor模式理解与使用的笔记 Actor模式是一种并发模型,与另一种模型共享内存完全相反,Actor模型share nothing。所有的线程(或进程)通过消息传递的方式进行合作,这些线程(或进程)称为Actor。 共享内存更适合单机多核的并发编程,而且共享带来的问题很多,编程也困难...原创 2019-08-08 19:43:46 · 8679 阅读 · 0 评论 -
ThingsBoard使用笔记(1) 安装
官方安装指南https://thingsboard.io/docs/installation/从官方发布的安装指南可以看到,ThingsBoard 最新版本分Community Edition 社区版和Professional Edition专业版,社区版安装较为简单,不需要单独安装配置数据库不过仅作为测试和学习,如果要大规模应用于生产最好还是安装Professional Edition专...原创 2019-07-24 18:23:59 · 8749 阅读 · 1 评论 -
ThingsBoard使用笔记(4)创建资产并在地图上显示
书接上篇博文ThingsBoard使用笔记(1) 安装ThingsBoard使用笔记(2)模拟传感器发送MQTT并显示监控图表ThingsBoard使用笔记(3)模拟控制远程温度传感器1.创建资产2.添加资产属性给资产添加地址,坐标等属性,准备在地图上显示3.资产间关联选择资产【科技大厦】,把另外两个资产【一楼,二楼】添加进来4.资产与硬件关联...原创 2019-07-30 19:28:56 · 7055 阅读 · 10 评论 -
ThingsBoard使用笔记(2)模拟传感器发送MQTT并显示监控图表
书接上一篇博文ThingsBoard使用笔记(1) 安装本片主要是在ThingsBoard安装成功后,开始使用ThingsBoard,模拟一个物联网终端,每隔一秒通过MQTT发送数据到服务器;服务器接收到数据后动态显示在图表上。好了开始吧1.使用默认系统管理员登陆系统创建租户管理员使用默认系统账户登陆:Systen Administrator: sysadmin@thingsb...原创 2019-07-24 19:15:57 · 14431 阅读 · 11 评论 -
使用JWT实现Token认证
为什么使用JWT?随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的方式做登录身份校验,然后通过token去取redis中的缓存的用户信息,随着之后jwt的出现,校验方式更加简单便捷化,无需通过redis缓存,而是直接根据token取出保存的用户信息,以及对token可用性校验,单点登录更为简单。JWT架构图JW...转载 2019-07-24 13:53:36 · 1080 阅读 · 0 评论 -
Redis 安装与SpringBoot整合
1.前言 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。我们都知道,在日常的应用中,数据库瓶颈是最容易出现的。数据量太大和频繁的查询,由于磁盘IO性能的局限性,导致项目的性能越来越低。这时候,基于内存的缓存框架,就能解决我们很多问题。例如Memcache,Redis等。将一些频繁使用的数据放...原创 2020-01-10 14:34:44 · 369 阅读 · 0 评论 -
springboot全局异常拦截
1.异常拦截类的创建package com.liqi.web.core.exception;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody;import org.springframew...原创 2019-06-04 10:46:02 · 10408 阅读 · 1 评论 -
Java开发微信小程序(三)用小程序给用户推送服务消息
第三篇 用小程序给用户推送服务消息1.小程序登录获取,小程序的openId和unionId。2.获取并解密小程序的加密信息包括用户和手机信息。3.用小程序给用户推送服务消息。4.给绑定小程序而且又关注微信公众号的用户推送公众号消息。小程序消息推送机制有两种一种是统一模板消息推送一种是客服消息,本章主要介绍在Java端向指定用户推送指定模板的消息。模板推送又分为两种一种是用小...原创 2018-10-26 11:03:56 · 11373 阅读 · 3 评论 -
Java开发微信小程序(二)获取并解密小程序用户和手机信息
第二篇 获取并解密小程序的加密信息包括用户和手机信息。如果对其他的信息干兴趣,还可以点击以下的连接1.小程序登录获取,小程序的openId和unionId。2.获取并解密小程序的加密信息包括用户和手机信息。3.用小程序给用户推送服务消息。4.给绑定小程序而且又关注微信公众号的用户推送公众号消息。好的,开始我们的获取和解密操作吧,主要有以下这些步骤1.小程序...原创 2018-10-24 19:23:32 · 3521 阅读 · 1 评论 -
Java开发微信小程序(一)登录并获取小程序的openId和unionId
第一篇 小程序登录获取,小程序的openId和unionId。最近公司做了一个微信的小程序应用,做了一些技术研究也踩了不少坑,不过最终结果不错小程序顺利上线。在这里做一个开发笔记,主要记录以下几个方面,分别用四篇文章来记录:1.小程序登录获取,小程序的openId和unionId。2.获取并解密小程序的加密信息包括用户和手机信息。3.用小程序给用户推送服务消息。4.给绑定小...原创 2018-10-18 17:09:59 · 4012 阅读 · 2 评论 -
使用Jsch执行Shell命令
最近在写一个监控方面的项目,总结一下Jsch的特性Jsch是JAVA的SSH客户端,使用的目的是执行远程服务器上的命令。关于Session的使用,创建连接后这个session是一直可用的,所以不需要关闭。由Session中open的Channel在使用后应该关闭。测试了exec的方式,具体参考jsch自带example中的Exec.java。有两个问题:1、无法执行多条命令,每...原创 2018-09-17 16:14:55 · 5523 阅读 · 0 评论 -
自定义JAVA事件监听机制
JAVA中的事件机制的参与者有3种角色:Event、EventSource、Listener1.Event:就是事件产生时具体的“事件”,用于Listener的相应的方法之中,作为参数一般存在于Listener的方法之中。2.EventSource:事件源,它的作用主要是对事件和监听进行统一管理,具体的接受事件的实体,比如说,你点击一个button,那么button就是EventSourc...原创 2018-09-11 14:55:46 · 3566 阅读 · 0 评论 -
Mybatis Generator自动生成JavaEntity带中文注释和注解[Maven]工程
mybatis-generator是一个很好的数据库逆向生成Java实体的插件,可以很方便的生成JavaEntity,不过注释和注解没有太好的解决办法,例如如果我们想生成下面这样一个UserEntity,那么就需要自己动手生成一个扩展一下mybatis-generator。package com.domain.entity;import com.common.entity.BaseEntity...原创 2018-07-12 16:27:58 · 9421 阅读 · 0 评论 -
Java多线程再学习,温故知新(一)线程创建方式
线程的生命周期及五种基本状态线程中断处理1.while(!interrupted())2.td.interrupt()创建线程的几种方式1.继承Thread类public class Demo1 extends Thread { public Demo1(String name) { super(name); } @Override public...原创 2019-01-11 16:52:50 · 200 阅读 · 0 评论 -
解决Mysql数据库移动端发表情emoji报错
最近在开发的时候遇到了奇怪的错误### Error updating database. Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84 ' for column 'reply_content' at row 1### The error may involve com.palmboo.common...原创 2018-07-02 14:40:25 · 554 阅读 · 0 评论 -
Java单例模式(Singleton)以及实现
一. 什么是单例模式因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。二. 单例模式的特点1. 单例模式只能有一个实例。2. 单例类必须创建自己的唯一实例。3. 单例类必须向其他对象提供这一实例。三. 单例模式VS静态类在知道了什么是单例模式后,我想你一定会想到静态类,“既然只使用一个对象,为何不干脆使用静态类?”,这...原创 2018-06-11 15:42:36 · 326 阅读 · 0 评论 -
JSR303通用验证类
JSR303是JAVA EE6中的子规范。用于对Java Bean的字段值进行校验,确保输入进来的数据在语义上是正确的,使验证逻辑从业务代码中脱离出来。JSR303是运行时数据验证框架,验证之后验证的错误信息会马上返回。有两个版本JSR303(BeanValidation1.0)和JSR349(BeanValidation1.1)。工具类BeanValidatorUtils(必要)import j...原创 2018-05-22 21:13:36 · 1539 阅读 · 0 评论 -
Java 代码性能优化总结
代码优化的目标是:1、减小代码的体积2、提高代码运行的效率本文的内容有些来自网络,有些来自平时工作和学习,当然这不重要,重要的是这些代码优化的细节是否真真正正地有用。那本文会保持长期更新,只要有遇到值得分享的代码优化细节,就会不定时地更新此文。 代码优化细节(1)尽量指定类、方法的final修饰符带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java...转载 2018-06-02 17:52:44 · 192 阅读 · 0 评论 -
Java InputStream读取网络响应Response数据的方法
Java InputStream读取数据问题======================================================================原理讲解 1. 关于InputStream.read() 在从数据流里读取数据时,为图简单,经常用InputStream.read()方法。这个方法是从流里每次只读取读取一个字节,效率会非常低...转载 2018-10-26 14:15:35 · 5017 阅读 · 0 评论 -
学习Spring源码(二)自定义标签属性
Spring具有一个基于架构的扩展机制,可以使用xml文件定义和配置bean。本文将介绍如何编写自定义XML bean的解析器,以及自定义注解,并用实例来加以说明。 自定义配置文件标签从Spring version 2.0开始就有,现在的很多项目中大量使用了Spring注解方式来开发,使得自定义Spring标签看起来不是很流行,不过在灵活的架构项目中或者你想简化项目配置,自...原创 2018-11-20 17:52:59 · 426 阅读 · 0 评论 -
学习Spring源码(一)了解Spring何为IOC
打算写一个有关Spring源码和架构的专栏,一是方便自己查看,两一方面方便后来者学习吧。网上有关Spring的文章很多但也参差不齐,真正面向小白的实用行讲解不多。我在这里也算抛砖引玉吧,把自己学习的路线总结下。1,一本有关Spring的书 虽然电子书和视频教程也很多,但一本纸质的书也很重要,一部书里的体系完整比较完整,一般也都有简单示例,是你利用碎片时间学习...原创 2018-11-22 15:18:14 · 886 阅读 · 0 评论 -
Java多线程再学习,温故知新(十)线程间的通信join
当一个线程执行时,想调用另外一个线程加塞public class Demo { public void a(Thread joinThread) { System.out.println("方法a执行了..."); joinThread.start(); try { joinThread.join(); } catch (InterruptedException...原创 2019-02-03 16:44:27 · 181 阅读 · 0 评论