Java
文章平均质量分 67
tuonioooo
这个作者很懒,什么都没留下…
展开
-
使用 StopWatch 优雅打印执行耗时
背景有时在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,然后这样如果执行大量测试的话就很麻烦,并且不直观,如果想对执行的时间做进一步控制,则需要在程序中很多地方修改,目前spring-framework提供了一个StopWatch类可以做类似任务执行时间控制,也就是封装了一个对开始时间,结束时间记录工具示例统计输出总耗时import org.springframework.util.StopWatch; &n原创 2021-12-13 20:53:20 · 525 阅读 · 0 评论 -
MyBatis插入大量数据效率对比:foreach、SqlSession、sql三种方式批量插入
用mybatis插入数据执行效率对比,对比三种方式(测试数据库为MySQL),使用 SqlSessionFactory,每一批数据执行一次提交使用mybatis-plus框架的insert方法,for循环,每次执行一次插入使用ibatis,纯sql插入新增xml执行效率测试:xml执行时间比sql稍慢一些,50000条数据插入时间约为2000毫秒左右,平均时间是sql的2倍左右。先贴出执行效果(数字代表执行的时间,单位毫秒):测试代码://测试类@RunWith(SpringRunner.class)@原创 2021-11-29 22:34:46 · 1411 阅读 · 0 评论 -
20条示例代码让你的代码更简洁
1.通过条件判断给变量赋值布尔值的正确姿势// badif (a === 'a') { b = true} else { b = false}// goodb = a === 'a'2.在if中判断数组长度不为零的正确姿势// b原创 2021-11-25 23:08:05 · 2145 阅读 · 0 评论 -
Mybatis 动态sql语句if标签、where标签以及choose标签的结合巧妙使用
需求SELECT id , gender , nickname , mobile , avatar FROM dts_user WHERE gender = 1 AND mobile LIKE '%56%'查询结果mybatis动态sql配置进阶一>>查询条件 gender 已固定,模糊查询 mobile 以修改成了动态配置<!-- 根据条件查询用户 --><select id="queryUserByWhe原创 2021-10-18 09:20:53 · 1557 阅读 · 0 评论 -
2021年基于VUE开发的一套移动端APP小说 听书AI男女多种 支持云端存储书籍记录
2021年基于VUE开发的一套移动端APP小说 前端架构主要采用:"axios": "^0.21.1","better-scroll": "^2.1.1","core-js": "^3.6.5","css-vars": "^2.3.0","date-fns": "^2.21.1","lodash": "^4.17.21","mobile-detect": "^1.4.4","storejs": "^1.1.0","uuid": "^8.3.2","vant": "^2.12..原创 2021-08-26 10:40:37 · 1385 阅读 · 15 评论 -
Echarts 的 Java 封装类库
Echarts 的 Java 封装类库:http://www.oschina.net/p/echarts-java没想到喜欢Echarts 的 Java 封装类库的人还挺多,在源码中的测试例子一般目的只是构造官网例子的结构,这里写个比较实际的简单例子来演示如何写出一个图表。首先看看Option的提示。##Option说明Option正式代码中使用,不需要任何依赖。GsonOption正式代码中可以...原创 2018-04-10 21:31:13 · 3779 阅读 · 0 评论 -
@Configuration注解、@Bean注解以及配置自动扫描、bean作用域
/*@Configuration标注在类上,相当于把该类作为spring.xml配置文件中的<beans>,作用为:配置spring容器(应用上下文)@Bean 可理解为用spring.xml里面的<bean>标签注:(1)、@Bean注解在返回实例的方法上,如果未通过@Bean指定bean的名称,则默认与标注的方法名相同;(2)、@Bean注解默认作用域为单例s...原创 2018-04-17 17:05:10 · 2043 阅读 · 0 评论 -
Java接口和抽象类的特殊实现方法--匿名类
一、java中的接口本质上是加约束的抽象类//抽象类public abstract class AExample{ public abstract int add(int x,int y); public abstract int sub(int x,int y); }//接口public interface IExample{ public int...原创 2018-03-29 14:03:40 · 804 阅读 · 2 评论 -
Spring boot 启动类源码分析以及@EnableAutoConfiguration和@SpringBootApplication讲解
对于任何一个Spring boot项目,都会用到下面的启动类:@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}从上面代码可以看出,@...原创 2018-04-18 11:55:29 · 1566 阅读 · 0 评论 -
Java中自定义注解并通过反射获取注解属性值
自定义类注解package com.uno.ray; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; i...转载 2018-04-18 16:28:14 · 10082 阅读 · 1 评论 -
Spring 并发访问的线程安全性问题
首先对于Spring的IOC来说,对象是由Spring来帮我们管理,也就是在Spring启动的时候,在Spring容器中,由Spring给我们创建的,Spring会帮我们维护,一般都是单例的,也就是一个对象。spring生成对象默认是单例的。通过scope属性可以更改为多例。第一部分:验证Spring生成对象默认是单例的。下面我们来一个网上的例子验证一下:[html] view plain cop...转载 2018-04-30 15:42:28 · 193 阅读 · 0 评论 -
java中关于线程安全AtomicInteger的使用
在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。咳哟参考我之前写的一篇博客http://www.cnblogs.com/sharkli/p/5597148.html,今天偶然发现可以不用synchronized使用AtomicInteger完成同样的功能,具体代码如下,...原创 2018-05-06 16:39:38 · 3533 阅读 · 0 评论 -
nanoTime vs currentTimeMillis 比较
System.nanoTime与System.currentTimeMillis比较首先:currentTimeMillis返回的是系统当前时间和1970-01-01之前间隔时间的毫秒数,如果系统时间固定则方法返回值也是一定的(这么说是为了强调和nanoTime的区别),精确度是毫秒级别的nanoTime的返回值本身则没有什么意义,因为它基于的时间点是随机的,甚至可能是一个未来的时间,所以返回值可...转载 2018-05-08 10:39:14 · 1735 阅读 · 0 评论 -
idea maven 无法更新jar文件 reimport失效
场景:1.Spring boot 切换版本,相应的Jar文件不自动更新2.点击reimport失效,点击刷新图标失效解决方式:Work offline :离线下载,因此每次切换版本的时候,都更新不了Jar文件...原创 2018-06-25 17:34:29 · 7885 阅读 · 0 评论 -
Guava-RateLimiter秒杀限流技术详解
使用场景系统使用下游资源时,需要考虑下游对资源受限、处理能力,在下游资源无法或者短时间内无法提升处理性能的情况下,可以使用限流器或者类似保护机制,避免下游服务崩溃造成整体服务的不可用。常用算法常见限流算法有两种:漏桶算法和令牌桶算法。漏桶算法具体问题网站的访问ip中,找出进行频繁连接的ip,并对这些ip的访问频率进行限制。解决方案Leak Bucket / Token Bucket...原创 2018-10-30 11:20:12 · 3312 阅读 · 1 评论 -
Java反射 getDeclaredField和getField 的 区别
package com.geccocrawler.gecco.demo.test;import java.lang.reflect.Field;/** * Created by daizhao. * User: tony * Date: 2018-3-28 * Time: 11:59 * info: */public class Test { private St...原创 2018-03-28 12:15:14 · 4306 阅读 · 4 评论 -
JDK 1.5 - 1.8 各版本的新特性总结
以下介绍一下JDK1.5版本到JDK1.7版本的特性及JDK1.8主要部分特性。仅供参考。JDK1.5新特性1:自动装箱与拆箱:自动装箱:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中。自动拆箱:每当需要一个值时,被装箱对象中的值就被自动地提取出来,没必要再去调用intValue()和doubleValue()方法。自动装箱,只需将该值赋给一个类型包装器引用,java会自...转载 2018-04-09 17:01:24 · 317 阅读 · 0 评论 -
Spring MVC和Spring Boot中使用Thymeleaf模板引擎
新一代Java模板引擎Thymeleaf一定让你惊叹于Thymeleaf的强大,但是真正在Web应用结合Web特性使用模板引擎,还需要进行一定的配置和学习。Thymeleaf于Spring集成Thymeleaf除了基本的模板引擎,还提供了一套Spring集成技术使得在Spring MVC中能够使用它完全替代JSP作为模板引擎,它的功能特性如下:Spring MVC中@Controller中的方法可...原创 2018-03-18 10:10:04 · 1146 阅读 · 0 评论 -
缓存穿透、缓存并发、热点缓存之最佳招式
一、前言我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题:缓存穿透缓存并发缓存失效缓存穿透注:上面三个图会有什么问题呢?我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回。这个时候如果我们查询的某一个数据在缓存中一直不存在,就会造成每一次请求都查询DB,这样缓存就失去了意义,在流量大时...原创 2018-03-18 10:23:34 · 130 阅读 · 0 评论 -
Spring Boot 集成Shiro和CAS
首先看一下下面这张图:第一个流程是单纯使用Shiro的流程。第二个流程是单纯使用Cas的流程。第三个图是Shiro集成Cas后的流程。 PS:流程图急急忙忙画的,整体上应该没有什么问题,具体细节问题还请大家留言指正。 如果你只是打算用到你的Spring Boot项目中,那么看着如下配置完成便可。如果你想进一步了解其中的细节,还是建议大家单独配置Shiro、单独配置Cas,看看官方相关文档。Shi...原创 2018-03-18 10:29:35 · 2238 阅读 · 0 评论 -
Spring Boot中使用Swagger2构建强大的RESTful API文档
由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端。这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发、Android开...原创 2018-03-18 11:08:29 · 231 阅读 · 1 评论 -
Java开发中的23种设计模式详解
在GoF的23种设计模式中,单例模式是比较简单的一种。然而,有时候越是简单的东西越容易出现问题。下面就单例设计模式详细的探讨一下。 所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在。就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等。 1. 最简单的实现 首先,能够想到的最简单的实现是,把类的构造函数写成p...原创 2018-03-18 11:18:01 · 194 阅读 · 0 评论 -
使用Swagger2Markup实现API文档的静态部署:AsciiDoc
前言在学会了如何使用Swagger之后,我们已经能够轻松地为Spring MVC的Web项目自动构建出API文档了。但是,如前文方式构建的文档必须通过在项目中整合 swagger-ui、或使用单独部署的 swagger-ui和 /v2/api-docs返回的配置信息才能展现出您所构建的API文档。本文将在使用Swagger的基础上,再介绍一种生成静态API文档的方法,以便于构建更轻量部署和使用的A...原创 2018-03-18 11:24:17 · 1478 阅读 · 2 评论 -
阿里云Redis开发规范
本文作者:carlosfu原文链接:https://yq.aliyun.com/articles/531067摘要: 本文介绍了在使用阿里云Redis的开发规范,从键值设计、命令使用、客户端使用、相关工具等方面进行说明,通过本文的介绍可以减少使用Redis过程带来的问题。一、键值设计1. key名设计(1)【建议】: 可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如...转载 2018-03-20 11:36:16 · 170 阅读 · 0 评论 -
JedisPool资源池优化
摘要: 合理的JedisPool资源池参数设置能为业务使用Redis保驾护航,本文将对JedisPool的使用、资源池的参数进行详细说明,最后给出“最合理”配置。背景合理的JedisPool资源池参数设置能为业务使用Redis保驾护航,本文将对JedisPool的使用、资源池的参数进行详细说明,最后给出“最合理”配置。一、使用方法以官方的2.9.0为例子(Jedis Release),Maven依...转载 2018-03-20 11:41:40 · 257 阅读 · 0 评论 -
Spring Cloud Feign的文件上传实现
在Spring Cloud封装的Feign中并不直接支持传文件,但可以通过引入Feign的扩展包来实现,本来就来具体说说如何实现。服务提供方(接收文件)服务提供方的实现比较简单,就按Spring MVC的正常实现方式即可,比如:@EnableFeignClients@EnableDiscoveryClient@SpringBootApplicationpublic class Applica...原创 2018-03-25 15:26:46 · 1811 阅读 · 0 评论 -
JavaBean与Enterprise JavaBean的区别
您现在可能已在使用JavaBean,但还不了解它。如果有支持Java的浏览器,那么,在桌面上使用JavaBean 就没有限制。使用的Web页面可以将bean作为小应用程序的一部分。您很快就会和作为浏览器可视部分的JavaBean交互,然后,那些 JavaBean将与服务器上的EJB 接口。这种能力也可以扩展到因特网和内部网。JavaBean 和 Server Bean(通常称为Enterprise...原创 2018-03-25 15:37:27 · 1535 阅读 · 0 评论 -
java8新特性:CompletableFuture多线程并发异步编程
首先因为现在的应用越来越复杂,越来越多模块多系统之间相互依赖,一个操作可能需要使用多个模块或者多个系统提供的多个服务来完成一个功能,如果每个服务顺序的执行,可能需要消耗很多时间,或者前端用户需要得到及时响应,不需要等待所有服务完成便可以返回部分结果,而且现在的计算机处理器性能越来越强大,多核处理器越来越普遍,核心数也越来越多,使用多线程可以更加充分利用硬件的资源,不论是什么原因异步编程应运而生。先...转载 2018-03-25 15:57:37 · 9580 阅读 · 0 评论 -
Java CompletableFuture 详解
CompletableFuture类实现了CompletionStage和Future接口。Future是Java 5添加的类,用来描述一个异步计算的结果,但是获取一个结果时方法较少,要么通过轮询isDone,确认完成后,调用get()获取值,要么调用get()设置一个超时时间。但是这个get()方法会阻塞住调用线程,这种阻塞的方式显然和我们的异步编程的初衷相违背。为了解决这个问题,JDK吸收了g...原创 2018-03-25 16:16:55 · 484 阅读 · 0 评论 -
Java8的十大新特性
一、Lambda表达式Lambda表达式可以说是Java 8最大的卖点,她将函数式编程引入了Java。Lambda允许把函数作为一个方法的参数,或者把代码看成数据。一个Lambda表达式可以由用逗号分隔的参数列表、–>符号与函数体三部分表示。例如:Arrays.asList( "p", "k", "u","f", "o", "r","k").forEach原创 2018-03-26 11:25:20 · 158 阅读 · 0 评论 -
Java8新特性之 Optional
1、构造方式Optional 的三种构造方式: Optional.of(obj), Optional.ofNullable(obj) 和 Optional.empty()1.1、Optional.of(obj)它要求传入的 obj 不能是 null 值的, 否则 NullPointerException.使用场景:1. 当我们非常非常的明确将要传给 Optional.of(obj) 的 obj ...转载 2018-03-26 11:40:28 · 1078 阅读 · 0 评论 -
Java 8 Optional类深度解析
新版本的Java,比如Java 8引入了一个新的Optional类。Optional类的Javadoc描述如下:这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。本文会逐个探讨Optional类包含的方法,并通过一两个示例展示如何使用。of为非null的值创建一个Optional。of方法通过工厂方法创建Optional类。需要...转载 2018-03-26 11:41:36 · 118 阅读 · 0 评论 -
Spring Boot中使用LDAP来统一管理用户信息
LDAP简介LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略。而目录服务的更新则一般都...原创 2018-03-18 09:55:20 · 1789 阅读 · 1 评论