项目中经常会用到定时器,最简单莫过于springboot中的scheduled了,只需要在方法上加个@Scheduled注解,即可实现定时任务的功能。但这样也有明显的缺点,无法实现在线灵活配置,job任务的管理,还有非常必要的监控。我因此基于quartz写了一个简单易用的定时器组件,可以实现在线启动、停止、修改定时参数、job运行监控,也支持多节点部署,手动指定每个节点执行的任务。
demo运行地[……]

阅读全文

在项目中经常会连接多个数据源,我结合了网上的一些示例和实际项目中的使用经验,做了些小小的改进,使配置更加简化了一下。先给出多数据源的配置:

spring:
  application:
    name: multiDatasource

  datasource:
    dbone:
      url: jdbc:mysql://172.17.10.150:3306/dbone?useUn[......]

阅读全文

显示进程占用的端口信息

netstat -tunlp

查看指定端口号的进程信息

netstat -tunlp|grep 80

删除目录及目录中所有文件

rm -rf /usr/myfiles

复制sourcedir目录及目录下的所有子文件到targetdir目录下

cp -r sourcedir targetdir

复制sourcedir目录及目录下的所有子文件到targe[……]

阅读全文

最近在开发一个应用的过程中,需要支持加载外部的jar包,最初的想法是自定义一个ClassLoader,加载外部jar包,这样就能搞定了,于是google了一下自定义ClassLoader,参考着写了一个loader,代码如下:

public final class DynamicExtensionLoader extends URLClassLoader {

    private stati[......]

阅读全文

使用root用户启动tomcat有一个严重的问题,那就是tomcat具有root权限。这意味着你的任何一个页面脚本(html/js)都具有root权限,可以运行页面上的脚本,具有非常大的安全风险,所以强烈建议不要使用root启动tomcat。

创建以”tomcat”命名的用户和组

useradd -s /sbin/nologin -M tomcat

说明一下/nologin类型的用户,它是[……]

阅读全文

服务端接口设计模式(一)
服务端接口设计模式(二)
服务端接口设计模式(三)
服务端接口设计模式(四)

1、目前抽象类AbstractBusiService中只是做了参数校验这一项,功能比较单一,可以再多加一些实用功能,比如打印业务接口的执行耗时,可以在doHandle方法添加起始时间,执行结束时间,这样就统计出了执行耗时。代码比较简单,我就不加了。

2、可以在的印象类中加几个空方法,比如be[……]

阅读全文

服务端接口设计模式(一)
服务端接口设计模式(二)
服务端接口设计模式(三)
服务端接口设计模式(四)

从上往篇看到了在抽象类中进行了统一的参数校验,本篇我将增加两个实用的场景,登录用户的身份验证及无需身份验证的接口调用处理。现在新增一个获取用户身份信息的接口 QueryProfile,接下来看实现方式。
1、新增QueryProfileImpl 类,代码比较简单,如下:

@Component[......]

阅读全文

服务端接口设计模式(一)
服务端接口设计模式(二)
服务端接口设计模式(三)
服务端接口设计模式(四)

上一篇中讲解了服务的入口实现,本版将讲解本设计中一个最重要的类AbstractBusiService,它是一个抽象类,但扮演着重要的角色。
1、AbstractBusiService代码如下:

public abstract class AbstractBusiService<T, R[......]

阅读全文

服务端接口设计模式(一)
服务端接口设计模式(二)
服务端接口设计模式(三)
服务端接口设计模式(四)

1、常见的服务端接口设计模式是采用restful形式对外提供服务,我以用户登录、获取个人信息等接口作为示例,这里只展示主要的示例代码:

@RequestMapping("/user")
@RestController
public class UserController {

    @A[......]

阅读全文

今天在看一个第三方框架源码的时候,看这StringJoiner这个类,以前在拼接字符串的时候一直使用的StringBuilder,所以特别感兴趣,这里的场景是这样用的,当然这个代码是我自己写的,模拟的用法:

String[] strArr = new String[]{"str1","str2","str3","str4","str5"};
StringJoiner joiner = new S[......]

阅读全文