6. 报警系统QuickAlarm使用手册

本文将主要说明QuickAlarm该如何使用,以及使用时需要注意事项

5. 报警系统QuickAlarm之频率统计及接口封装

前面将报警规则的制定加载解析,以及报警执行器的定义加载和扩展进行了讲解,基本上核心的内容已经完结,接下来剩下内容就比较简单了

  • 报警频率的统计
  • 报警线程池
  • 对外封装统一可用的解耦

4. 报警系统QuickAlarm之报警规则解析

前面两篇分别说了报警执行器和报警规则的定义及用户扩展加载,接下来就是比较核心的一块了,如何将报警规则和报警执行器关联起来,即当发生报警时,应该call哪一个报警执行器

3. 报警系统QuickAlarm之报警规则的设定与加载

前面一篇是报警执行器的定义与加载已经完成,但与之对应的报警规则有是如何定义和加载的呢?

此外,既然命名为规则,那么就需要有对应的解析器,以根据报警规则和报警类型等相关输入条件,来选择对应的报警执行器,因此本文主要包括的内容就比较清晰了

  • 报警规则的定义
  • 报警规则的加载
  • 报警规则的解析以及报警执行器选择

2. 报警系统QuickAlarm之报警执行器的设计与实现

根据前面一篇总纲的博文,将整体结构划分为了四大块,本文则主要目标集中在第一块,报警执行器(AlarmExecute)的设计与加载上了

主要的关注点无外乎 定义-》加载-》实现逻辑三块了:

  • AlarmExecute 的接口定义
  • 如何加载用户自定义的AlarmExecute
  • AlarmExecute的内部实现

1. 报警系统QuickAlarm设计总纲

背景

日常的系统中,报警是不可缺少的一环,目前报警方式很多,最常见的有直接打日志,微信报警,短信报警,邮件报警等;而涉及到报警,一般不可避免的需要提前设置一些基本信息,如报警方式,报警频率,报警用户,开关等;

另外一个常见的问题是一般采用的是单一的报警方式,比如不管什么类型的报警全部都用短信方式触达,然后就会发现手机时常处于被淹没的状态了,久而久之对报警短信就不会敏感了

Java可以如何实现文件变动的监听

Java可以如何实现文件变动的监听

应用中使用logback作为日志输出组件的话,大部分会去配置 logback.xml 这个文件,而且生产环境下,直接去修改logback.xml文件中的日志级别,不用重启应用就可以生效

那么,这个功能是怎么实现的呢?

Java中变量的初始化顺序

Java中变量的初始化顺序

在写一个通用的报警模块时,遇到一个有意思的问题,在调用静态方法时,发现静态方法内部对静态变量引用时,居然抛出了npe,仿佛是因为这个静态变量的初始化在静态方法被调用时,还没有触发,从而导致这个问题,因此今天专门来学习下静态成员的初始化顺序,以及上面这个问题导致的原因

SpringMVC统一异常处理

统一异常拦截处理方式

项目中不可避免会出现一些异常情况,而一个web项目,若不拦截异常,糟糕的情况下可能直接将堆栈抛给前端,从而导致各种鬼畜的问题

JavaWeb三大组件之Filter学习详解

JavaWeb三大组件之Filter学习详解

Filter基本上可以说存在所有的JavaWeb项目中,比如最基本的一个请求参数的编码CharacterEncodingFilter,大家一般都会配置下,那么filter是干嘛的呢?

本篇将主要集中在fitler的以下几个知识点:

  • 干嘛的
  • 怎么用
  • 多个Filter执行的先后顺序
  • 注意事项

JavaWeb三大组件之Servlet学习

JavaWeb三大组件之Servlet学习

平时直接用springmvc较多,都没怎么接触底层的Servlet,导致对一些基本的知识点了解都不够,所以今天专门的抽出时间来学习一下

带着问题出发,看下可以怎么玩

  • 如何自定义一个Servlet
  • 自定义的Serlvet如何工作
  • servlet的优先顺序怎么判定
  • servlet匹配是怎样的 (url-mapping…)
  • 如何获取参数(get请求参数,post请求参数,上传文件)
  • 如何返回数据(返回页面,返回文件,返回二进制)
  • 请求头和返回头的设置

兼容ImageIO读取jpeg图片变红

兼容ImageIO读取jpeg图片变红

使用ImageIO.read()方法,加载图片为BufferedImage对象时,对于某些图片,会出现变红的case

Batik渲染png图片异常的bug修复

Batik渲染png图片异常的bug修复

batik是apache的一个开源项目,可以实现svg的渲染,后端借助它可以比较简单的实现图片渲染,当然和java一贯处理图片不太方便一样,使用起来也有不少坑

下面记录一个bug的修复过程

SpringMVC支持跨域的几种姿势

SpringMVC支持跨域的几种姿势

跨域好像是一个前端的问题,通常是a域名下向b域名的服务发起请求,然后处于浏览器的安全原则,被拦截了,而这种场景,在实际的项目中并不少见,那么作为后端可以怎么去支持跨域的case呢?

后端需要支持跨域,一个是支持jsonp请求;还有一个就是设置responseHeader中crossOrigin等相关参数

SpringMVC返回图片的几种方式

SpringMVC返回图片的几种方式

后端提供服务,通常返回的json串,但是某些场景下可能需要直接返回二进制流,如一个图片编辑接口,希望直接将图片流返回给前端;如果要求返回base64,此时可以怎么处理?

基于OkHttp封装一个简单易用的http工具

基于OkHttp封装一个简单易用的http工具

okHtt更常见的是用在android项目上实现http交互,而java后端,可能更多的使用httpclient;一般来讲,android的包,大部分也是可以用到java后端的,本片博文则主要是介绍如何使用okhttp实现http交互,并会做一个简单的封装,以达到更好的使用体验

本篇为纯工具封装,无原理分析

SpringMVC之请求参数的获取方式

SpringMVC之请求参数的获取方式

常见的一个web服务,如何获取请求参数?

一般最常见的请求为GET和POST,get请求的参数在url上可以获取,post请求参数除了url上还有可能在表单中,文件上传时,获取方式又和一般的参数获取不一样

本篇则主要集中在不同请求方式下,获取参数的使用姿势

首先需要搭建一个后端的请求,为了快速演示

利用spring-boot创建了一个机器简单的工程,依赖版本 1.5.4.RELEASE

jvm调优的工具介绍

jvm调优实战笔记之基础知识简介

I. 背景

java后端,提供了一个svg渲染的服务,在qps较大时,会出现频繁的gc,而此时的服务器性能本身并没有达到瓶颈(cpu,load,io都不太高)因此考虑调整一下jvm的相关参数,看是否可以提升服务性能

JDK学习之反射的使用姿势一览

反射的学习使用

日常的学习工作中,可能用到反射的地方不太多,但看看一些优秀框架的源码,会发现基本上都离不开反射的使用;因此本篇博文将专注下如何使用反射

本片博文布局如下:

  1. 反射是什么,有什么用,可以做什么
  2. 如何使用反射
  3. 实例:

    • 利用反射方式,获取一个类的所有成员变量的name及值
    • 通过反射方式,修改对象的私有成员变量
    • 会通过写一个BeanUtils实现对象的成员变量值拷贝来覆盖上面两个场景

Java学习之深拷贝浅拷贝及对象拷贝的两种方式

I. Java之Clone

0. 背景

对象拷贝,是一个非常基础的内容了,为什么会单独的把这个领出来讲解,主要是先前遇到了一个非常有意思的场景

有一个任务,需要解析类xml标记语言,然后生成document对象,之后将会有一系列针对document对象的操作

通过实际的测试,发现生成Document对象是比较耗时的一个操作,再加上这个任务场景中,需要解析的xml文档是固定的几个,那么一个可以优化的思路就是能不能缓存住创建后的Document对象,在实际使用的时候clone一份出来

ForkJoin 学习使用笔记

ForkJoin 学习使用笔记

Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架

4. SPI框架实现之旅四:使用测试

使用测试

前面三篇主要是介绍如何设计的,如何实现的,这一篇,则主要集中在如何使用。实现得再好,如果不好用,也白搭

本篇介绍几个简单的使用case,包括静态使用,动态适配,自定义选择器等

3. SPI框架实现之旅三:实现说明

实现说明

前一篇 《SPI框架实现之旅二:整体设计》中,介绍了几个定义的接口,注解;叙述了实现流程;并简单的介绍了 SpiLoader中的部分实现; 本篇则主要介绍SpiLoader类的实现

类图结构如下:

https://static.oschina.net/uploads/img/201705/27183336_TOny.png

2. SPI框架实现之旅二:整体设计

整体设计

上一篇简单的说了一下spi相关的东西, 接下来我们准备开动,本篇博文主要集中在一些术语,使用规范的约定和使用方式

1. SPI框架实现之旅一:背景介绍

背景介绍

SPI的全名为Service Provider Interface,简单的总结下java spi机制的思想。我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。 java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×