java
文章平均质量分 61
java
morganEngineer
这个作者很懒,什么都没留下…
展开
-
java方法耗时统计,JavaAgent javassist bytebuddy统计方法耗时,jvm监控prometheus
JavaAgent,bytebuddy,prometheus,jvm原创 2022-12-18 12:09:30 · 1804 阅读 · 1 评论 -
springcloud日志链路追踪,Zipkin,Spring Cloud Sleuth
springcloud日志链路追踪,Spring Cloud Sleuth,Zipkin原创 2022-11-09 22:44:57 · 815 阅读 · 0 评论 -
idea使用fiddler抓包分析,fiddler抓取https
idea使用fiddler抓包分析,fiddler抓取https原创 2022-09-24 15:26:24 · 2792 阅读 · 0 评论 -
nginx kafka flink mysql用户操作日志统计
https://zhuanlan.zhihu.com/p/348877559原创 2022-04-29 23:15:47 · 4635 阅读 · 2 评论 -
flume+kafka+flink+mysql实现nginx数据统计与分析
https://juejin.cn/post/6937988947498762270原创 2022-04-20 20:08:49 · 6665 阅读 · 0 评论 -
webflux webclient DataBufferLimitException: Exceeded limit on max bytes to buffer
org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer原创 2022-02-24 15:41:14 · 1223 阅读 · 0 评论 -
webflux切面拦截权限,webflux整合aop,webflux获取request
背景在springboot+tomcat应用中获取request可以使用RequestContextHolder.getRequestAttributes()的方式来获取,此种方式的核心在于request所在容器被放在threadlocal中,但是webflux结合netty项目却不能这么使用,因为webflux是异步响应式的。...原创 2021-12-24 18:04:32 · 7143 阅读 · 1 评论 -
java实现表锁行锁
分段独占锁public class SegReentrantLock{ private List<Lock> lockList; public SegReentrantLock() { this(10); } public SegReentrantLock(int size) { if (size < 1){ throw new IllegalArgumentException("size mus原创 2021-12-20 21:07:12 · 2303 阅读 · 0 评论 -
java修改配置不重启,java运行时修改应用数据,通过jmx修改应用运行数据
背景运行中的应用修改了配置后应用能生效有多种解决方案,比如:配置存入redis中修改了配置文件后按时检测配置文件是否被修改,被修改则读取修改后的内容下面介绍springboot工程通过jmx动态修改配置不停机的方式来管理配置文件,此种方式使用简单,而且实时生效,没有延迟。知识普及jmx MBean:所有被MBeanServer管理的资源,提供了访问接口,可通过RMI或HTTP访问实现功能动态修改应用的浏览器黑名单实现过程编写MBean类编写浏览器黑名单类,将其注册到MBean原创 2021-11-10 09:02:41 · 1120 阅读 · 0 评论 -
jconsole远程监控认证,java远程监控,jmx监控应用,jmx ssl配置,jconsole ssl连接远程应用
知识普及jmxJMX(java Management Extensions)是一个Java平台的管理和监控接口。任何程序,只要按JMX规范访问这个接口,就可以获取所有管理与监控信息,jconsole与Java VisualVM等常见监测工具都是基于jmx,JMX不但可以用于管理JVM,还可以管理应用程序自身。JMX把所有被管理的资源都称为MBean(Managed Bean),MBean全部由MBeanServer管理,如果要访问MBean,可以通过MBeanServer对外提供的访问接口,例如RMI原创 2021-10-15 11:49:20 · 1837 阅读 · 1 评论 -
java制作带有logo的二维码,解决zxing中文乱码
目标使用谷歌zxing生成带有logo二维码使用便捷方式解决二维码中文乱码问题过程下载依赖:maven坐标:<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.3</version></dependency>编写java代码生成二维原创 2021-08-05 14:25:16 · 698 阅读 · 0 评论 -
java实现数据持久层框架,自定义实现数据持久层框架,兼容spring,兼容spring事务管理
完整代码:https://gitee.com/tandatda/smpedr使用完整demo:https://gitee.com/tandatda/demo-edr-smpdb原创 2021-06-11 11:57:10 · 1572 阅读 · 2 评论 -
手写java数据库连接池,自定义实现数据库连接池,兼容springboot
一、目标 用精简的代码实现一个类似于Hikari,Druid一样的数据库连接池。原创 2021-06-10 22:45:40 · 1156 阅读 · 1 评论 -
logback1.1.11日志无法自动删除
logback的类ch.qos.logback.core.rolling.helper.RollingCalendar的periodBarriersCrossed方法long转换成int发生溢出,导致最高位变为1,成为了负数。最新版本已修复此bug, maven依赖如下:<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artif原创 2021-05-22 14:44:15 · 1183 阅读 · 2 评论 -
spring事务提交回滚原理mybatis版
sping事务非常简单好用,不用手动提交回滚事务,比如下面代码将2个更新操作一同提交,一同回滚。上述代码基本没有任何有关jdbc事务的操作,但却能将2个数据库更新操作同时提交与回滚,这是个值得思考的问题。通过思考并查阅spring源码与资料,得出以下结论:1: 图中2个更新操作中,mybatis两次更新以及spring回滚与提交过程中获取的是同一个jdbc connection,connection是保存在ThreadLocal中。2: 提交与回滚操作是spring通过事务拦截器+代理方式.原创 2021-04-18 21:31:41 · 849 阅读 · 0 评论 -
mysql Communications link failure druid
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failurespring: datasource: druid: test-on-borrow: true test-on-return: trueHikariCP原创 2021-04-13 16:58:12 · 1474 阅读 · 0 评论 -
mysql同时查出符合条件数据与总数
SQL_CALC_FOUND_ROWS是mysql特有的保留字,与此对应使用的 函数是 FOUND_ROWS(),可以在查出数据的同时查出所有满足条件的数据量。例如:SELECT SQL_CALC_FOUND_ROWS * FROM url WHERE id > 7 LIMIT 2;SELECT FOUND_ROWS();java代码实现:Class.forName("com.mysql.cj.jdbc.Driver");try (Connection connection原创 2021-04-13 09:19:06 · 3001 阅读 · 0 评论 -
java 对象转json,java首字母小写,判断方法是否为javabean方法
将java对象转成json可用的类库很多,知名的有fastjson,jackson等,今天在做项目的时候发现项目没有上述依赖,用的是google的gson,因此封装方法将java对象转成gson代表的json对象。大致流程如下:1:通过反射获取java对象的所有public方法,再筛选出javabean的getter方法(方法返回类型为boolean 则为is开头)。2:遍历筛选出的方法,通过方法名计算出对应的属性名。3:通过目标对象调用筛选出的方法,将属性名与方法返回值添加到json中。原创 2021-04-08 16:49:57 · 400 阅读 · 0 评论 -
mycat单库分表
mycat是国内著名的java后端开源中间件,工作原理有点类似于nginx,大致就是拦截原始sql,通过配置的分库分表规则处理sql语句,使得业务层无需考虑数据库和表的拆分逻辑。以下是sprinboot, mybatis,mysql,mycat实现的单库分表,mycat版本:1.6.5-release,os:windows10,mysql大小写不敏感!数据脚本(page_0~9 分表为page_0 ... page_9总共10张表):CREATE TABLE `page_0~9` (..原创 2021-01-26 08:32:51 · 408 阅读 · 0 评论 -
java对称加密,java异或加密,Java高性能对称加密
/** * @description:异或操作对称加解密 * @param text 原文或者密文 * @param xorKey 异或运算密钥 * @exception RuntimeException * @return java.lang.String */ public static String getXorString(String text, String xorKey){ char[] textChars .原创 2020-12-19 17:10:59 · 1028 阅读 · 1 评论 -
druid监控无法关闭
spring: datasource: druid: WebStatFilter: enabled: false StatViewServlet: enabled: falsecom.alibaba.druid.spring.boot.autoconfigure.DruidWebStatFilterConfigurationcom.alibaba.druid.spring.boot.autoconfigure.Dru..原创 2020-12-19 16:55:48 · 2942 阅读 · 1 评论 -
管理员访客身份登录用户账户,java web/springboot/mybatis实现只能看用户信息但不允许修改
上线的项目,不可避免的会遇见用户提出的bug,这时候我们可能需要去用户的页面重现用户所说的Bug,为了安全,最好进入用户页面的时候不能修改用户的数据,只能查看。对于上述需求实现的方法有多种:1:根据ajax请求方式来进行拦截,如果ajax请求方式不是get请求,则在filter或者aop中拦截掉,这种方法实现起来最简单,能较好的在分布式系统发挥工作,但是要求接口必须是restful风格。2:在操作dao之前进行拦截,在进行数据库操作之前如果检测到当前的用户只允许查看,则抛异常进行拦截,下面.原创 2020-09-30 16:28:33 · 1816 阅读 · 0 评论 -
mybatis方法传入多参数
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</...原创 2020-08-24 17:26:43 · 235 阅读 · 0 评论 -
java Jsoup不能获取完整响应内容
今天在使用jsoup请求文件服务的经过base64编码后的文件内容的时候,发现文件没有获取完整,文件编码后是1864kb,但是http client获取到的是1024kb,见下:源文件base64编码测试代码:http获取文件服务响应的文件内容代码:结果如下(http获取到的只有1024kb,导致报错):http客户端代码如下,使用的是jsoup:经过追溯jsoup源码发现,其http请求体默认大小限制为1MB知道原因后,传入自定义的最大请求体限制即解决,这里我设原创 2020-07-29 09:57:00 · 590 阅读 · 1 评论 -
springboot普通类获取当前环境,判断当前是否为开发环境,手动获取bean,手动获取配置值,获取当前请求
java后端判断当前环境是生产环境还是开发环境的方式不少,比如通过main方法的调试参数来区分。这里我通过判断springboot激活的配置文件后缀来区分,首先介绍如何根据应用环境不同激活不同后缀的配置文件。1:新建2个配置文件分别是开发环境(dev)配置与生成环境(prod)配置:2:在主配置文件application.yml中声明默认启用的配置文件:启动应用时如果需要指定生产环境在启动命令后加上--spring.profiles.active=prod即可(如:java -Xms1.原创 2020-07-15 18:04:00 · 22080 阅读 · 5 评论 -
springboot优雅停机
项目版本迭代难免需要重启应用,比较粗暴的方法是kill -9 pid,这种方式是直接通过操作系统命令杀死进程,用户未完成的请求也会被丢失掉,尤其是我们的应用中有队列任务的,要是队列中的任务没有持久化,那就全丢了。这里通过关闭spring上下文的方式来优雅停机;1:首先新增一个get方式的接口:@GetMapping(path = "/shutDown") public JsonResult shutDownApi(@RequestParam(name = "token") String原创 2020-06-15 17:49:49 · 326 阅读 · 0 评论 -
java 模拟http文件上传,HttpURLConnection上传多文件
private static void sendFile() throws Exception{ String url = "http://localhost:8097/template/up"; String charset = "UTF-8"; File textFile = new File("B:\\documents\\mycat.pdf"); String boundary = "===" + Long.toHexString(..原创 2020-06-01 14:23:28 · 999 阅读 · 3 评论 -
springboot优雅地统一返回格式
web后端开发,统一后端数据的返回格式是每个项目都应该做的,得益于springboot的方法拦截,因此基于springboot可以非常优雅地统一返回的数据格式,以下是实现代码(演示的返回格式:{code: 0, success: true, data:{})。1:写个枚举定义状态码以及是否成功的标识:2:数据格式封装类ResultBuilder对控制器返回的数据进行封装:到这里...原创 2020-04-06 22:00:02 · 2580 阅读 · 0 评论 -
Base64编码运用与基本原理
编码说白了就是按照一定规则对数据进行转换,工作原理有点类似于查字典,base64编码(叫base64的原因是因为其使用64个字符来对任意数据进行编码)可以用来将图片或者其他文件的二进制数据转换成字符串形式,以下代码是将一个图片通过base64编码成字符串,将字符串写入txt文件后再读取出来生成一个新的图片:结果如下:从生成的txt文件可以看出,二进制字节流数据经过base64编...原创 2020-04-05 21:05:13 · 216 阅读 · 0 评论 -
idea webapp目录404问题,war包方式运行
1、修改Spring Boot启动类启动类继承 SpringBootServletInitializer类,并覆盖 configure方法。 @SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protec...原创 2020-04-05 13:04:25 · 628 阅读 · 0 评论 -
spring security实现登录验证以及根据用户身份跳转不同页面
想关依赖,采用session加redis存储用户信息<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</...原创 2018-08-29 14:38:08 · 9348 阅读 · 1 评论 -
nested exception is org.hibernate.AnnotationException: No identifier specified for
spring boot+ jpa ,原因是hibernate必须指定主键原创 2018-12-26 20:42:45 · 465 阅读 · 1 评论 -
springboot参数检验,Assert使用
assert:断言是java的一个保留字,用来对程序进行调试,后接逻辑运算表达式,如下:int a = 0, b = 1;assert a == 0 && b == 0;使用方法:javac编译源文件,再java -ea class文件名即可。在springboot中可以使用spring提供的Assert类的方法对前端来的参数进行校验,如:@GetMappin...原创 2020-03-28 18:32:17 · 5264 阅读 · 0 评论 -
springboot参数校验,对象的某属性校验
对于前端来的数据,后端难免要进行合法性校验,这里可以采用springboot自带的Validated注解来实现,详细方法如下:实体类:public class User implements Serializable {// @NotNull(message = "id can not be null") private Integer id; private String ...原创 2020-03-28 12:56:52 · 2617 阅读 · 0 评论 -
springboot配置templates直接访问
springboot下的templates目录的资源默认是收保护的,类似于javaweb项目的WEB-INF目录,但是给每个springboot的html页面都配置控制器跳转过于麻烦,配置共有访问方式如下:在配置文件加如下:spring.resources.static-locations=classpath:/META-INF/resources/, classpath:/resour...原创 2020-03-21 10:50:17 · 1845 阅读 · 0 评论 -
gzip+chunked页面分段输出,resin gzip trunked无效,页面数据写入自定义buffer
首先普及知识:gzip:一种web常见的压缩格式,压缩率大致50%,能极大降低带宽占用量。chrunked:http1.1功能,支持内容分段传送给browser,对于后端逻辑比较耗时的页面,可以先给用户展示一部分内容,减少白屏时间。一下是tomcat与resin的实现方式:tomcat:tomcat比较简单,默认是支持trunked模式的,gzip开启方式如下:找到...原创 2020-03-06 22:22:42 · 379 阅读 · 0 评论 -
jarjar.jar解决jar包版本兼容问题
最近在做一个给excel添加水印的需求,需要用到新版poi,但是老版本的poi不能丢弃,因为word转html的功能是基于老版的poi的,因此只能对更改新版本poi的的package,笔者使用的是通过jarjar.jar实现的方式,不嫌麻烦的童学可以下载poi的源码jar包,解压后通过idea修改package再通过java -jar命令重新打包。以下是笔者fastjson-1.2.38.ja...原创 2020-02-23 15:14:47 · 2159 阅读 · 5 评论 -
java poi excel无法添加水印替代方法
poi无法直接通过代码生成水印效果,只能生成图片以及背景图。提供一种可行办法就是预留一份现成的带有水印的excel模板,以模板创建workbook,再向其添加内容,这样即可实现导出带有水印的excel,需要注意的是poi版本不能太老,太老的不支持此操作。代码试例如下:@WebServlet(name = "poiServlet", urlPatterns = "/public/poi...原创 2020-01-30 14:41:13 · 1625 阅读 · 0 评论