springboot入门04 – 使用SpEL表达式

概述

SpEL即Spring表达式语言(Spring Expression Language)。

从我通常的使用场景(API开发)来说,SpEL提供的大部分能力都可以划到奇技淫巧的范畴内。但是在一些场景下如缓存配置、ThymeLeaf取值等,SpEL还是大有可为的。

SpEL表达式的默认格式为:#{expression}。SpEL表达式以“#”开头,表达式主体包围在花…

springboot入门03 – 配置定时任务

概述

在Java环境下创建定时任务有多种方式:

  • 使用while循环配合Thread.sleep(),虽然稍嫌粗陋但也勉强可用
  • 使用TimerTimerTask
  • 使用ScheduledExecutorService
  • 定时任务框架,如Quartz

在SpringBoot下执行定时任务无非也就这几种方式(主要还是后两种)。只不过SpringBoot做了许多底层的工作,我们只…

Hadoop HAR文件的读取操作

概述

Hadoop Archive是Hadoop官方提供的解决HDFS上小文件过多的一种方案。可以通过如下命令来执行生成har文件:

执行archive命令会提交一个MapReduce任务来生成har文件。在了解har文件…

codeIgniter的多主题、静态文件及端口号的问题

问题描述

这段时间在用php写一个cms应用消磨时间。框架选型用了CodeIgniter,这个框架整体上还是挺让人中意的——只是稍嫌不够灵活,需要做些额外的工作。

这些额外的工作中让人比较费心的是路径相关的问题:

  1. 多主题的路径问题
  2. 静态文件的路径问题
  3. site_url()提供的路径中端口号的问题

前两个问题,我觉得和CodeIgniter的定位有关:这个框架似乎是将自己…

查找占用CPU时间最长的线程

记录下查找Java应用占用CPU时间最长的线程的过程。

获取进程ID

使用jps指令获取java服务进程ID:

命令结果如下:

其中19064即是目标java服务进程ID。

查询线程占用时间

使用top

springboot入门02 – 自定义数据源及多数据源配置

spring-boot的自动化配置中是包含数据源连接配置的。但有些时候我们需要自定义数据源连接的配置,比如:

  • 使用的数据库连接池Spring暂时还不支持;
  • 需要配置连接多数据源;
  • 需要自定义一些数据库连接配置项。

这三种只是我曾经遇到的情形,当然还有些其他的情形。接下来就以曾经遇到的一个问题进行展开。

自定义数据源

我们在生产环境使用的数据库连接池是alibaba的dr…

springboot入门01 – 缓存的使用

前两天解决了一个Spring缓存的问题,因此就想到记录一下spring-boot缓存的使用。

开启缓存

SpringBoot开启缓存也容易,在启动类上添加@EnableCaching注解就可以了,不需要过多的配置。不过此时开启的缓存是比较简单的缓存,即基于ConcurrentHashMap实现的缓存。虽然简单,但对于负载不高的应用也足够用了。

SpringBoot…

FileInputStream与BufferedInputStream

程序中有一块儿功能是读取硬盘文件到内存里。这块儿代码执行得异常缓慢,读4个G左右的文件竟会用上十几分钟。平时也不着急,但是今天催得紧,就得优化下了。

上传代码大致如下: