Java框架
文章平均质量分 60
bruce128
https://github.com/bruce256?tab=repositories
展开
-
高性能Server的基石:reactor反应堆模式
业务开发同学只关心业务处理流程。但是我们开发的程序都是运行服务端server上,服务端server接收到IO请求后,是如何处理请求并最终进入业务流程的呢?这里不得不提到reactor反应堆模型。nginx tomcat redis nodejs dubbo等软件的网络处理模型都是用的reactor反应堆模型。前置知识。原创 2024-02-23 15:24:32 · 1322 阅读 · 0 评论 -
MyPerf4J3.4+Influxdb2.7+grafana10.0接入方法监控
MyPerf4J的官方接入文档:https://github.com/LinShunKang/MyPerf4J。metrics.exporter配置成,注意后面别带冒号,我把后面的冒号复制过来后,排查了很久influxdb.database务必配置成,否则grafana要改动的地方很多debug = true,方便排查问题二 应用程序配置应用启动参数添加两项配置启动应用程序, 通过respStatus判断跟influxDB交互是否成功InfluxDB下载最新版本后启动influxdb,登原创 2023-10-20 10:42:19 · 569 阅读 · 1 评论 -
springboot 2.6.6接入prometheus
springboot是2.6.6版本,刚开始用的是simpleclient客户端原创 2023-07-03 22:55:32 · 800 阅读 · 0 评论 -
aop切面调用失效问题排查
应用里有较多的地方访问外部供应商接口,由于公网网络不稳定或者外部接口不稳定(重启,发版,ip切换)的原因,经常报502或者504错误。网上搜索有很多帖子反馈@Retryable注解不生效,不生效的点在于:切面切的方法,是在所在的类里被另外的方法调用的,而不是被外部类直接调用。不仅仅是@Retryable有这个问题,所有的切面实现的功能,如果这样调用都有问题。通过生成的类可以发现,如果直接调用没被代理的方法,那么调用的是父类SayHello的方法,也就是没被加强的方法。查看动态生成的类(第三个)原创 2023-05-04 23:08:42 · 1608 阅读 · 0 评论 -
No value specified for parameter 15排查过程
mybatis打印出的SQL的问号有30个,而下面的参数只有29个。一次写两条记录,一条有值一条没值,再排查对应字段的typehandler。, 那一定是15(从0号开始)号位的参数缺失。如果参数为空,直接return了。原创 2022-09-09 11:14:50 · 1237 阅读 · 0 评论 -
Mybatis中用typehandler优雅的解决枚举类型的读写
表字段是码值的时候,一般会有一个枚举(enum)类对应。我们可以把DO类的对应字段定义为枚举类型,用mybatis的typehandler来处理读写。通过枚举类强管控码值的变化,就不会随着时间的推移,代码的可读性和可维护性大大降低了。5 insert或者update的时候需要在字段后面带上typehandler。1 枚举字段类型定义, 我们的目标是直接把这个类型入库,并正确的读取出来。这样做之后,就只需要维护枚举类型,数据库字段和DO类的注释都不需要了。2 typehandler定义, 需要继承。原创 2022-08-19 17:35:52 · 674 阅读 · 0 评论 -
spring bean初始化耗时统计
spring bean 的生命周期实例化(instantiate), 用构造器创建一个对象字段赋值(populate)初始化(initialize), 执行bean配置里的init方法或者InitializingBean#afterPropertiesSet方法销毁(destruct)实例化和字段赋值一般都很快,但是一些重型的bean被IOC容器创建时,需要调用远程服务或者执行耗时的...原创 2020-02-20 23:30:06 · 3792 阅读 · 5 评论 -
antlr简单表达式语言入门
一、基本介绍antlr是一款适合拿来开发领域特定语言(DSL)的工具。它可以根据开发人员定义的词法和文法生成词法分析器(lexer)程序,语法分析器(parser)程序。如果没有antlr这样的工具,就要自己写底层的词法分析,语法分析,语义分析,中间代码生成等复杂的工作。antlr降低了dsl开发的复杂度。ANTLR (ANother Tool for Language Recognitio...原创 2020-02-18 13:18:51 · 2016 阅读 · 0 评论 -
dubbo服务导出的本质
当注册中心是zookeeper的时候,服务导出其实是在/root/interface/providers下创建一个临时节点,这个节点的路径就是服务的url。而取消注册就是将该节点删除。 // 服务注册 @Override public void doRegister(URL url) { try { // 创建临时节点 zkCl...原创 2020-01-08 11:24:04 · 469 阅读 · 0 评论 -
dubbo扩展点的延迟加载机制
dubbo的架构是微内核+插件(dubbo里是扩展,extension)的形式,现代操作系统、maven、Spring等都是这个架构,其优点是易于扩展。通常微内核不带有业务功能,而是负责完整的生命周期里的流程的执行和业务组件的容器。任何原有的功能都可以重新按自己的业务需求定制化。dubbo启动时,并不会加载所有的扩展到内存方法区,而是要用的时候再加载。dubbo的延迟加载时动过一种动态代理的方式...原创 2020-01-07 18:23:43 · 901 阅读 · 0 评论 -
Hadoop MapReduce 入门实例
一、准备工作从hadoop官网下载了最新的3.1.2版本的hadoop配置hadoop相关的环境变量export HADOOP_HOME=/work/dev_tools/hadoop-3.1.2export PATH=$HADOOP_HOME/bin:$PATHexport HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar二、MapReduc...原创 2019-09-04 03:15:27 · 309 阅读 · 0 评论 -
Mybatis只有接口没有实现类的原理
问题背景mybaits相对于Ibatis的一大区别就是,不用自己写接口实现类。Ibatis的实现类十几年来做着重复的工作,拼接statementId,然后执行sql。十分没有营养的代码。mybaits干脆不用手工写实现类了,框架帮我们完成了这件事情。实现原理mybatis使用了动态代理技术生成实现类。动态代理的具体手段有两种:jdk自带和cglib。对比jdk自带cglib...原创 2019-08-19 23:49:17 · 4617 阅读 · 0 评论 -
Reflections框架,类扫描神器
一、 项目背景我们的工程是一个很大的插件化架构的工程。实现某个接口或者带有特定注解的类,都视为一个插件。系统启动前,要在工程依赖的所有的jar包中,扫描指定接口或注解的全部子类,并做进一步的处理。二、 Reflections框架简介 Reflections one-stop-shop object Reflections scans your classpath, inde...原创 2018-05-20 23:32:35 · 6934 阅读 · 0 评论 -
借助Jackson的JsonTypeInfo注解实现多态类的解析
一、问题背景Jackson的对json字段的序列化和反序列化默认策略是根据getter和setter方法,去掉get和set,再把首字母小写,便找到了对应的字段。通常情况,我们都是对普通的POJO进行serialization/deserialization。那么如果遇到了解析抽象类呢?如何定位到对应的实现类?实现类都找不到,谈何匹配到对应的字段反序列化。二、JsonTypeInfo 注解...原创 2018-05-13 13:51:54 · 28640 阅读 · 11 评论 -
Office Open XML 单元格<c>格式详解
在前一篇文章提到过用SAX解析excel文件,仅提取数据部分。SAX技术过于底层,直接读XML文件,并要求开发者对于XML的格式了如指掌。poi框架官方给的用SAX解析的demo里仅解析了字符串和数字类型的单元格,其他类型的单元格并未解析。此外,excel文件里的xml信息很多,如果开发者想解析其他的内容呢?一、ECMA-376标准 Office 2007以后,微软公司使用Off...原创 2018-04-13 22:49:00 · 4925 阅读 · 4 评论 -
excel文件写性能优化
一 问题背景 通过POI框架生成excel文件的时候,一般选用的是XSSFWorkbook类。用这个类生成excel文件时,文件的所有数据均会存放在内存当中,包括cell对象,cellType对象等等。如果数据少的话,内存还能撑得住,但是超过了万行级别,内存就会被打爆。POI框架开发者直到3.8版本才提供了SXSSFWorkbook类用以解决这个问题。 Since 3.8-beta3...原创 2018-02-23 10:25:46 · 5299 阅读 · 5 评论 -
《effective java》读书笔记:尽量返回容量为0的数组或集合
今天测试3.0的后台代码时,遇到了一个空指针的bug,是由于调用的方法返回的是集合,由于实际返回的是null,后头有调用了这个对象的方法,导致空指针。这段代码的质量需要改善,如果返回容量为0的集合,则完全可以避免空指针。先贴错误代码。public Result queryStoreServiceAttendList(AttendParamVo vo) { Result result ...原创 2013-03-13 18:47:15 · 2928 阅读 · 1 评论 -
Spring框架下的单元测试方法
介绍在Spring的框架下,做单元测试的两种办法。 一、使用spring中对Junit框架的整合功能 除了junit4和spring的jar包,还需要spring-test.jar。引入如下依赖:<dependency> <groupId>org.springframework</groupId> <artifactId>...原创 2013-08-06 15:36:24 · 55387 阅读 · 0 评论 -
ibatis传入数组或List类型参数小结
小结一下ibatis框架下,传入参数为数组类型或者是List类型的sql写法。特别说明,iterate标签仅支持数组和List类型,如果传入Set,Map或其它集合类型,Ibatis会抛异常。 1. 传入数组类型,不需要标明parameterClasss,数组和List类型对象一样都可以用<iterate>标签进行遍历。<select id="selectOrgI...原创 2014-03-25 22:51:10 · 73228 阅读 · 7 评论 -
spring+ibatis框架下事务代码的编写示例
最近在做项目的账号管理这一块儿的功能。每一项账号操作相关的功能,都要涉及到多张表的读写。这个时候自然联想到用数据库的事务进行操作。否则,一处发生异常,将导致脏数据的产生。 ibatis+spring框架下事务的代码写法有两种方式:注解方式和声明事务起始点。 需要的spring的配置文件如下:<bean id="transactionManager" class="org...原创 2014-04-04 18:53:16 · 5926 阅读 · 0 评论 -
No WebApplicationContext found: no ContextLoaderListener registered?报错解决
今天跑了下新搭的一个SSI框架。报如下错误:严重: Exception sending context initialized event to listener instance of class com.j.chat.upgrade.web.core.SystemLaunchListenerjava.lang.IllegalStateException: No WebApplicat...原创 2014-07-14 20:05:07 · 31807 阅读 · 0 评论 -
Spring @value注解的错误用法
昨天用@Value注解把系统的一些常量改为可配置,但是这些变量的运行值始终都不是从配置文件中拉取到的。 重新看下代码,发现变量前面居然有 static 和final 修饰,把这两个修饰符去掉,@Value注解的字段的值就是从properties文件里的了。 已经在这个问题上栽了几次跟头了,记一下长记性。空了研究下@Value注解的实现。———————————————...原创 2015-03-25 11:21:15 · 9587 阅读 · 0 评论 -
org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
org.hibernate.MappingException: No Dialect mapping for JDBC type: -1 at org.hibernate.dialect.TypeNames.get(TypeNames.java:56) at org.hibernate.dialect.TypeNames.get(TypeNames.java:81) at org.hiber原创 2011-11-07 11:06:34 · 1386 阅读 · 0 评论 -
springmvc restful风格支持
公司的一个内部系统url是restful风格的,远比我们系统的众多***.action请求格式看起来舒服。于是花了一两天研究下spring mvc 3.0对restful风格的支持。 同一个URL,通过配置不同的请求方法,可以对应后台的对资源的CRUD操作。 path/ POST --> 新增 path/id GET --> 查询 path/id PUT -原创 2015-11-09 16:30:56 · 2720 阅读 · 0 评论 -
Spring定时器
在之前的一篇文章(点击打开链接)介绍过借助quartz.jar实现定时器。但是这种方式太重了,还需要引入新的包。其实Spring自己有对定时器的支持,借助注解的威力,开发十分简单!效率很高。 首先看java代码如何使用自带timer。package com.**.chat.core.common;import javax.annotation.Resource;import原创 2015-11-24 11:29:53 · 1859 阅读 · 0 评论 -
springmvc put请求无法解析请求体参数解决办法
这两天研究spring mvc 的restful功能,写了一个demo小程序。get,post,delete都正常通过了测试,唯独put请求犯难了。这个请求服务端仅能解析@PathVariable注解的变量,而请求体里的参数根本无法正常解析。 还有一种情况,如果变量有@RequestParam或者@RequestBody注解,那么浏览器居然发不出Put请求,查看network,请求被转换原创 2015-11-09 14:52:43 · 9344 阅读 · 4 评论 -
Spring定时器Quartz的简单示例
项目开发中用到了quartz定时器,感觉很像javaJDK中的Timer类,但是不同的是,spring提供的定时器可以按每天的固定时刻触发,或者其他的时间。触发时间比较人性化。 我自己写了个小的项目,练练手。开发Spring的quartz定时器需要spring-context.jar和quartz.jar包,我最初没有导入quartz.jar包,导致报错。 quartz的mav原创 2012-11-06 12:48:09 · 8944 阅读 · 1 评论 -
The request sent by the client was syntactically incorrect ().问题排查
HTTP Status 400 -type Status reportmessagedescription The request sent by the client was syntactically incorrect ().Apache Tomcat/7.0.27 自从使用spring mvc框架后,就频繁遭遇这个问题。刚开始一般都是表单的n原创 2016-01-28 10:57:09 · 4488 阅读 · 2 评论 -
Spring mvc 单元测试Demo
以前用struts框架的时候,给HTTP接口做测试,只能在浏览器上拼url和参数测,十分麻烦,而且不能自动化。但是用了Spring mvc之后,这种状况改变了。spring-test模块对spring mvc的接口提供了良好的单元测试框架支持。有了这个框架,便可以对HTTP接口进行自动化单元测试了。对产品迭代开发的重要意义不言而喻。 首先我们需要添加spring-test的依赖。 org.原创 2016-04-23 17:06:57 · 4760 阅读 · 0 评论 -
Spring Aop Demo
最近做项目时,接入了四个极其重要的外部接口。为了核对接口的准确性,把这四个接口的所有入参和返回值都打了日志。完全是重复性的机械劳动。端午节的时候回想这件事,发现AOP不正是职业解决这种事情的吗!而且用AOP打日志,原有的业务代码省去了日志代码,更加精简。 先写了个AOP的demo体验下功能。导入aop相关的依赖 3.2.0.RELEASE 1.1.36原创 2016-06-12 17:23:22 · 1640 阅读 · 0 评论 -
Spring + Spring mvc + Ibatis + Velocity 框架搭建
总结下如何用这四个常用框架搭建一个Java Web工程,方便以后更快速的开发工程。首先得用maven搭建一个多模块的web工程,这里不再赘述,请参考以前的总结:用maven命令行创建多模块WEB项目 首先导入这些框架所需的maven依赖:3.2.2.RELEASE1.6.31.25.1.15 org.apache.ibatis ibatis-sqlmap原创 2016-06-21 18:02:04 · 2266 阅读 · 0 评论 -
mybatis相对于ibatis的优势
2010年,apache的Ibatis框架停止更新,并移交给了google团队,同时更名为MyBatis。从2010年后Ibatis在没更新过,彻底变成了一个孤儿框架。一个没人维护的框架注定被mybatis拍在沙滩上。1. 入参无需用对象封装(或者map封装),使用@Param注解当Ibatis需要接收超过一个参数时,则需要将多个参数封装成对象,这个时候会产生很多Domain查询类。还有很多同学偷懒原创 2017-05-14 00:12:00 · 12616 阅读 · 2 评论 -
RPC框架中服务的注册与发现
RPC框架中有3个重要的角色:注册中心 :保存所有服务的名字,服务提供者的ip列表,服务消费者的IP列表服务提供者: 提供跨进程服务服务消费者: 寻找到指定命名的服务并消费注册中心维持着一个服务配置中心节点树:服务提供者启动时,会将其服务名称,ip地址注册到配置中心。服务消费者在第一次调用服务时,会通过注册中心找到相应的服务的IP地址列表。当消费者调用服务时,不会再去请求注册中心,而是直原创 2017-12-19 00:00:07 · 2647 阅读 · 0 评论 -
修改默认的excel单元格样式
两种方式可以实现这种功能:方案一、 在xl/worksheet/sheet*.xml下增加一个cols子节点这个节点从第一列到最后一列,style指向同一个单元格样式<cols> <col min="1" max="16384" style="23" width="8.0" customWidth="false"/>&l原创 2018-01-01 22:56:40 · 3436 阅读 · 0 评论 -
POI框架开发经验小结
POI框架使用了一段时间,总结下自己的使用经验。POI框架介绍 Apache POI是Apache软件基金会的开放源码程序库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。1. 07版excel行的上限2的20次方,超过这个值会报错2. 下拉列表能包含的最多字符个数下拉列表能包含的最多字符个数256个,超了就不显示。如果下...原创 2017-12-24 21:30:18 · 7496 阅读 · 0 评论 -
Dubbo服务端/客户端demo
项目组采用分布式服务,线上有几十个应用,RPC调用完全依靠Dubbo。平时开发一直都是用其他人搭好的dubbo环境,最近自己抽空独立的搭建dubbo小demo,一个服务端,一个客户端。 一 服务端 服务端maven父工程 首先搭建一个maven父工程,引入dubbo和spring的依赖,dubbo可以和spring无缝集成。<properties> <...原创 2015-07-23 17:08:04 · 27090 阅读 · 16 评论 -
用SAX优化读excel文件的内存消耗
一 问题背景 一直在跟进excel的商品批量发布功能。去年大促前的半个月时间里用户频繁上传excel文件,导致线上机器频繁fullGC。虽然没有OOM,但是一直对吃内存问题耿耿于怀。通过堆dump分析,发现主要是poi框架的类实例耗用内存太大。poi框架的开发者也意识到了这个问题,通过提供比较底层的事件模式,解决吃内存的问题。 The SS eventmodel package is...原创 2018-02-06 21:39:20 · 2566 阅读 · 2 评论 -
快速创建和mysql表对应的java domain实体类
今天创建了一个表有十几个字段,创建完之后必然要写一个与之对应的java domain实体类。这不是重复的工作吗?为什么不先把这个表的所有的字段查出来,然后放到linux环境下,用sed工具在每一行的前面加上“private String ”,每一行的后面添加“;”。这样可以节省很多重复工作。下面上sql代码和sed命令。 查询一个mysql表所有列的列名的sql代码如下:SELECT...原创 2014-11-17 16:23:31 · 8602 阅读 · 0 评论 -
没有spring框架下,读取properties文件的办法
给项目组搭了一个solr4.6的应用。新加入了一个配置文件,其中保存了项目的一些重要信息。这个时候还没有用到spring的框架。如果仅仅为了获取properties文件的内容而去引入spring的框架,感觉不划算。于是暴力一点,直接读项目代码里的properties文件。 public void contextInitialized(ServletContextEvent sce) {原创 2014-04-18 18:55:37 · 1961 阅读 · 0 评论