概述
SpEL即Spring表达式语言(Spring Expression Language)。
从我通常的使用场景(API开发)来说,SpEL提供的大部分能力都可以划到奇技淫巧的范畴内。但是在一些场景下如缓存配置、ThymeLeaf取值等,SpEL还是大有可为的。
SpEL表达式的默认格式为:#{expression}。SpEL表达式以“#”开头,表达式主体包围在花…
SpEL即Spring表达式语言(Spring Expression Language)。
从我通常的使用场景(API开发)来说,SpEL提供的大部分能力都可以划到奇技淫巧的范畴内。但是在一些场景下如缓存配置、ThymeLeaf取值等,SpEL还是大有可为的。
SpEL表达式的默认格式为:#{expression}。SpEL表达式以“#”开头,表达式主体包围在花…
在Java环境下创建定时任务有多种方式:
Thread.sleep(),虽然稍嫌粗陋但也勉强可用Timer和TimerTaskScheduledExecutorService在SpringBoot下执行定时任务无非也就这几种方式(主要还是后两种)。只不过SpringBoot做了许多底层的工作,我们只…
记录下查找Java应用占用CPU时间最长的线程的过程。
使用jps指令获取java服务进程ID:
|
1 |
jps -l | grep serviceName |
命令结果如下:
|
1 2 |
$ jps -l | grep jspy 19064 org.chobit.jspy.JSpyApplication |
其中19064即是目标java服务进程ID。
使用top …
spring-boot的自动化配置中是包含数据源连接配置的。但有些时候我们需要自定义数据源连接的配置,比如:
这三种只是我曾经遇到的情形,当然还有些其他的情形。接下来就以曾经遇到的一个问题进行展开。
我们在生产环境使用的数据库连接池是alibaba的dr…
前两天解决了一个Spring缓存的问题,因此就想到记录一下spring-boot缓存的使用。
SpringBoot开启缓存也容易,在启动类上添加@EnableCaching注解就可以了,不需要过多的配置。不过此时开启的缓存是比较简单的缓存,即基于ConcurrentHashMap实现的缓存。虽然简单,但对于负载不高的应用也足够用了。
SpringBoot…
程序中有一块儿功能是读取硬盘文件到内存里。这块儿代码执行得异常缓慢,读4个G左右的文件竟会用上十几分钟。平时也不着急,但是今天催得紧,就得优化下了。
上传代码大致如下:
|
1 2 3 4 5 6 7 8 |
public void readInByte(File file) throws IOException { & |
Histogram用来统计数据的分布。Histogram可以提供收集到的数据的最大值、最小值、平均值和中值,此外还能提供百分比分布,如75%,95%,99.9%等等。
Histogram是我学习Metrics的驱动之一。最初是想使用Histogram来优化接口处理统计能力。
看下下面的类图:

类图表示了Histogram需要用到的几类和个接口之间的关系,简单说明下…
今天遇到了一个问题:
程序中某处报了ClassNoDefineError。这个类属于jna框架。检查jna的jar,发现确实没有那个类。关键在于这个报错是在一个依赖内部发生的,jna的jar是这个依赖的内部依赖,即当前应用的一个间接依赖。因为使用的jar是一个比较小众的服务,所以第一印象就是这个服务依赖的jna版本错了。进入到服务的pom看了后,发现该服务使用…
也许这篇文章的名字应该改成《Quartz JobFactory的使用》,因为正是使用JobFactory解决的Quartz Job类有参数构造方法的问题。同样,使用JobFactory也能解决Job已有实例重用的问题。
问题如标题描述:就是希望为Job类的实例传递参数,结果发现找到的文档中创建Job实例的方法多是通过类反射来实现的,这显然不能满足我的需求。…
Counter是要学习的Metrics的第二个工具,顾名思义即是计数器,通常用来执行统计之类的工作。
Counter比Gauge也复杂不了多少,直接看代码好了:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class CounterShow { public sta |