- 博客(488)
- 资源 (12)
- 收藏
- 关注
原创 springboot 在加载配置后 bean实例化之前 修改环境变量
需求:环境变量中存在密文,如mysql 密码 ,在启动时 要转成明文。比较流行的是jasypt 加密方式。但是这里我们自己写一个。
2025-03-26 13:52:44
81
原创 mybatis 返回的对象不是一个新new的对象 而是复用了上一次相同查询的返回结果。
首先从对象池中获取已有对象没什么错的,因为在一个事务中,并且查询条件也一样,那结果肯定也一样。很明显是对于一个事务中相同的查询mybatis从对象池中获取已有对象了。比如在service层有如下调用mapper的代码。2,事务不变,修改对象字段的赋值逻辑,先置空即可。1,细化事务颗粒度。把查询排除到事务之外就行了。
2025-03-05 18:37:07
220
原创 工作中,当遇到要把http请求变成https时 怎么处理
如果只是需要在测试环境测试个https,那很简单 大家百度下java springboot服务端http接口怎么变https就行了,很简单。需要在程序中处理,那就要拿到证书、密钥和密钥类型等,放在程序的resource目录,剩下就跟springboot转https服务一样了。这块挺复杂的,不说了。4,最后大部分公网都是单向的https认证。但是https就是对传输过程中的数据加密。加密的过程很复杂 保持对数据传输过程的加密、在客户端和服务端的校验等。一般生产上也不会让开发去申请证书的,应该有现成的。
2025-03-05 18:24:56
491
原创 springboot项目突然启动慢,莫名其妙,各种排查没有用。就控制变量法,切到之前的代码分支,就好了。新增的代码也很正常,在此分支上又拉了一个,就可以了。奇怪
springboot项目突然启动慢,莫名其妙,各种排查没有用。就控制变量法,切到之前的代码分支,就好了。新增的代码也很正常,在此分支上又拉了一个,就可以了。
2024-11-14 18:24:53
119
原创 java高性能处理10G大文件
MappedByteBuffer 可以先获取文件内容的总长度,然后根据机器线程处理核数,把文件分割成对应的核数个数。然后在各自的线程中做单线程处理。背景:读取10G csv文件,然后 根据交易种类分分组,找出每个交易种类的交易最大值,最后给出最大的那个交易信息。线程的数量不能多,否则即使多了,只会徒增线程切换带来的消耗,而不能提高性能。重复利用了机器的处理能力。难点:最主要的是怎么快速读文件?
2024-10-25 22:27:35
359
原创 mysql 部门 递归 层级展示 并排序
这里给每个父层级加赋值一个顺序id,在这个层级再使用表中的排序字段排序。背景: 一个部门下的排序是从1开始的,所以在每一个层级又有新的排序。
2024-10-21 17:58:32
177
原创 java 怎么使用javac编译 并运行编译后的文件
然后先使用javac命令 编译.java 文件为.javac文件。然后再使用java命令运行java文件。好久没使用这个功能了,在私用javac 和java 命令的时候 各种报错。最后的javac main1.java 命令是执行成功的,告警信息不用管。然后就可以运行文件了。这里我们的main方法就是在main1类中,我们直接编译。好了 下面重要的事情说三遍。我这里是没有的带包名的。打开idea的终端,可以直接进入到当前项目所在的目录。看上面执行了好几次才执行成功,我们直接在idea上执行了。
2024-09-23 09:48:54
495
1
原创 @Transactional7种事务传播机制,子类对象指向父类引用,Eureka同步机制,redis操作客户端,rpc与http,cap,base64 md5 大小根堆,spring事务
总之 就是范围大的向范围小的转换时,不需要强转。如 父类 = 子类。这里是子类对象指向父类引用,而且子类的范围(可以理解成功能)肯定要大于父类,所以不需要强转。2,@Transactional7种事务传播机制。1,子类对象指向父类引用。
2024-08-20 13:36:24
257
原创 mysql主从分离,k8s简介,bfs dfs,工厂模式,AI协助,构造器,内存泄漏,mysql表类型,@SpringBootApplication,SpringBoot启动流程,声明和注入bean
2 kubernates k8s 是一个容器,相当于为操作人员提供了一个操作众多微服务的窗口。k8s内部分两大块一个控制平面,一个node节点,node节点是工作节点,控制平面自然是控制台了。可以采用强一致性方式,让主从写入在一个事务中,同步完成才返回接口。看业务吧,写少读多的场景,这样是可行的。主从分离也是增加处理量和容灾的好方式。主节点负责写,每次写的时候会产生binlog日志,并将日志发送到从节点,从节点接收完成同步。总之,最终还是要通过增加硬件性能、网络速度来提升数据传送和写入处理能力。
2024-07-19 12:11:25
83
原创 幂等,kafka,mysql,kafka,redis,linux,bean声明周期,spring启动,AQS,位运算模运算,sql取每个班级的前3名,各种文件流,nginx, aop,分库分表
redis主从复制的原理:从服务器连接到主服务器,发送SYNC命令。主服务器接收到SYNC命令后,开始执行BGSAVE命令生成RDB文件。主服务器BGSAVE执行完毕后,将RDB文件发送给从服务器。从服务器收到RDB文件后,载入数据。主服务器在生成RDB期间的命令会保存在缓冲区中,同时也会将新的写操作也发送给从服务器。后者跟windos 差不多,都属于操作系统,可以直接部署在物理机上。但是这些操作系统的内核,或者说使用的语音都是linux。幂等在接口、消息队列 和防抖中都有见到,所以也是经常被问到的。
2024-07-16 00:31:11
88
原创 再次理解 动态代理,反射,数组排序优化案例,数组实现队列,Redis过期 Key 的删除策略,引用类型 ,Bean常见作用域,两种代理方式的区别,锁升级,微服务边界划分,B树和B+树,mysql锁
首先肯定不能抛给用户,再者如果是写公共组件 则直接抛出就行,如果是写业务层 就需要捕获了,如文件中找不到,那就啥文件找不到给前端即可。特点:反射是可入侵的,通过设置setAccessiable(true) 可以调用私有方法。此外调用会有性能影响。还有就是调用三方接口的异常,就把他们的异常说明直接返回,但是返回码要重新编译。使用过程:要调用的目标类对象.class.getDeclaredMethod。定义:就是把方法名当做参数,动态的调用。还有就是未知的异常就直接系统异常。
2024-07-05 11:09:05
80
原创 7 springCloud 引入hystrix
熔断是后续请求不再进来了,一直到感知服务正常后再恢复。降级:就是改用备用方案,一般两种方式,一是重试,而是返回固定报错。也可以主动降级,如大促时关闭核心服务,后续慢慢处理。被动降级就是 限流、熔断、超时了。hystrix 是熔断器,是一种保护机制,当服务端宕机了,熔断器会做降级、熔断处理,快速返回备用接口,不至于让请求堆积。熔断器的触发场景有很多种,如限流触发降级、请求超时触发降级、请求失败次数达到阈值降级。下面对失败率触发降级、请求超时触发降级、限流触发降级分别做测试。
2024-06-30 00:07:42
284
原创 6 springCloud 引入ribbon
ribbon是做负载均衡的,感觉跟nginx的区别是nginx是服务端要做的,ribbon是客户端做的,可以通过端口指定使用哪个分布式微服务。ribbon默认的策略是轮询。即多个服务端异常请求。测试,多次刷新请求,会发现端口重复出现8281 8285。在feign的测试中已经引入ribbon需要的依赖了。这里复制一个demo2服务,端口不一样,服务名一样。demo2 接口做如下修改,标识调用的是哪个服务。启动副本demo2,重启demo1,demo2。这里测试 还是使用demo1调用demo2。
2024-06-29 23:51:42
81
原创 5 springCloud 引入 feign
feign 作用是 在微服务内部间服务间的调用,不显示使用http,服务间的调用跟调用普通代码一样简单。这里就不用再建服务了。而是使用 demo1做客户端,demo2做服务端,用demo1调用demo2。然后重启demo1,demo2 看看调用demo1的接口能不能返回demo2的接口信息。建个service包,再建个接口,feignclient的值是服务端的服务名。controller再建个接口,注入feign。demo2中建个controller。demo1引入openfeign依赖。
2024-06-29 23:35:38
100
原创 4 springCloud 引入 gateway
说明:这里主要使用了网关的路由功能。这样的作用是可以将所有的微服务对外的域名(ip+端口)保持一个,然后不同微服务的请求 通过域名后面的服务名再做转发。这样对外是很友好的。网关可以用来做路由、负载均衡、请求拦截等功能。是微服务集群对外的门户。pom 中也需要把 gateway注册到eureka中。也就是 下面两种方式都能够访问demo1服务中的接口。同理,直接建个网关微服务模块。通过网关需要服务服务名。可以注册到eureka。
2024-06-29 23:14:04
164
原创 3 springCloud 引入 Eureka security
Eureka是注册中心,所有微服务都会注册到这里管理,可观察服务状态,服务个数等信息。还能够在服务间的调用提供联络功能。接着把demo1 和demo2 注册到eureka。有时候会自动生成,下面的版本控制信息,直接删掉就行。刷新eureka 可以看到两个demo都能注册进来。启动类 添加启动erueka服务配置。然后分别重启demo1 demo2。前端可以打开eureka页面。启动类 开启eureka。
2024-06-29 22:54:01
137
原创 2 springCloud 创建两个微服务
先总结:需要引入父依赖,然后加上spring-boot-starter-web 就可以直接启动了。创建两个子模块微服务(demo1,demo2) 作为生产者和消费者,留着后面使用。并把下面这块删掉,没有了,都沿用父依赖的配置。添加application.yml文件。再加个controller 测试接口。修改pom 把父依赖的坐标粘过来。同理 再建个demo2。
2024-06-29 22:27:48
112
原创 1 springCloud 创建父依赖
直接下一步,直接结束,部分配置 还需要再建成后改。使用spring initializr的方式。建成后长这样,把下面这些删掉 或 修改。
2024-06-29 22:04:45
226
原创 spring 指定bean id 来加载相同类名 不同包路径的bean 并使用set方法注入
业务场景,数据源可能是mysql也可能是impala。在mapper层级方法都是一样的。所以抽象出来一个父接口,再分别用mysql包下面的一个mapper和一个impala包mapper接口分别继承它。注意这俩mapper的beanid要区分开。然后使用set注入,使用全局变量参数区分使用那种mapper实现。使用:首先有两个bean在不同的包下面,但是这俩类名是一样的。
2024-05-27 11:51:16
508
原创 排查高CPU出现的代码位置,java restful上传下载文件,长连接和短连接,回调函数,泛型使用,k8s,mybatis二级缓存,mybatis断点,sql调优,gateway网关,业务设计模式
4.multipartentitybuilder上传文件乱码可setmode(HttpMultipartMode.RF6532)3.multipartentitybuilder传参值只能是file或者字符串,如果是数组类型可在接口处以字符串接收即可。2.后端用 multipartfile接收 如果是多文件,那就是multipartfile[]1.上传文件 content-type:multipart/form-data。5.multipartentitybuilder可另外指定上传的文件名。
2024-02-08 16:10:45
62
原创 分布式锁,处理的问题,impala,视图,接口转https,spring,mybatis,IOC,DI,AOP,自动装配,@Requestbody
乐观锁,就是加个version字段设置为0,在对要操作的数据将这条数据update set version=1 where version=0如果返回ture,表示这条数据没有被其他线程操作。如果返回false,表示这条数据正在被其他线程上锁,那当前线程就return,停止后续操作。因为相对于悲观锁,它的操作更方便,即使锁不释放,那只要改下数据值即可。悲观锁,就是使用for update ,再结合事务。处理,发现定时任务没有加锁,多个机器节点都执行了。原因,现网有同一个任务,定时任务多次发送。
2023-11-02 17:55:11
41
原创 springboot bean管理,鉴权,异常统一处理、整合mybatis、单点登录,断言,统一http返回码,全局线程池接口字段校验,导出excel,google缓存结合stream判空,redis
2.1 mybaits执行过程:读取配置文件中数据库连接信息 -》创建一个sqlsessionFactory工厂 -》调用工厂中指的方法创建一个sqlsession会话实例-》sqlssesion.getMapper(.class)获取对应的mapper映射实例-》调用mapper中的方法执行sql -> 提交、关闭。简单理解:引入mybatis-spring-boot-starter,创建DataSource、sqlsessionFactory bean,完成对数据库的连接。2,整合mybatis。
2023-07-31 17:02:01
79
原创 项目管理,公钥加密, 私钥解密,快排,三级缓存
BIO NIO区别什么对象需要放到spring容器中单线程下stringbuffer 原stringbuilder的区别(偏向锁,轻量级锁,重量级锁)。使用了锁,默认是偏量锁,当有其他线程参与竞争时升级为轻量锁,再当自旋次数达到一定次数时升级为重量级锁。只能升不能降。观察者模式:构成有 被观察者 抽象被观察者,观察者,抽象观察者接口。在被观察者中注入观察者,被观察者有需要通知则依次循环通知观察者。乐观锁悲观锁 for updatemysql视图的存数据吗?怎么同步到原表中
2022-11-26 17:46:24
66
原创 规避http请求中的过滤器
规避http请求中的过滤器,在microservice.yaml中将enabled改为false如sercicecomb.http.filter.server.serverRestwArgs.enabled:false
2022-07-22 20:02:29
472
原创 新增面试题
1,吞吐量就是系统每秒处理的请求数。即tps对不同的接口要求不一样。差点的要十几个每秒,业务逻辑少的接口吞吐量在一百左右。平均三四十.
2022-03-27 17:08:05
192
原创 动态代理和@transactional事务传递简单理解
动态代理简述:有两种实现方式,一是jdk反射机制代理,二是CGLIB增强代理。这里只简述jdk反射机制的使用步骤:新建接口,新建接口的实现类,并编写具体实现内容,新建处理器类实现InvocationHandler,实现invoke方法,可以在其中写切面内容。然后使用时,调用Proxy.newProxyInstance方法,三个参数分别是,要代理的目标类的加载器,目标类实现的所有接口,处理器类。最后调用切点方法。spring使用@Transactional事务传递时,假如说controller调用serv
2021-09-28 11:54:10
1428
2
原创 面试解决的问题
1,jvm调优,调整jvm内存比例,建设fullGc次数2,某个页面跳转失败,Nginx路径配错3,新加的配置文件无法打包,pom文件增加.json文件后缀
2021-08-24 11:53:28
93
原创 stream 根据value排序map
package com.kjgs.language.test;import java.util.*;import java.util.stream.Collectors;public class Test1 { public static void main(String[] args) { Map<Integer,Integer> map=new HashMap<>(); map.put(1,3); map.pu.
2021-08-24 10:56:16
1065
原创 回调函数的理解
把A理解成客户端,把B理解成服务器。A要访问B,让B做事。但是B做的慢,于是B就先返回给A一个正在处理的状态,等处理完了再通知A处理结果,那么这个A通知B的手段就是回调了。通常为了加强适配性(因为服务器只有一个,而客户端有多个),客户端都会实现接口C,再把C注入到服务器,那么服务器对外提供带有参数C的方法即可。还有一种形式的回调,就是让服务方提供方法,在里面可以写自己的实现内容,再回调执行。如线程,我们先new Thread,并在里面写run方法,最后再调用start方法启动。这里的start方法里面
2021-04-20 17:19:50
266
原创 两个服务通过http传输excel文件
一个服务读取文件,放到字节流数组中,这个服务再返回这个数组。另一个服务再访问上面一个服务,拿到字节数组。写到文件中,如果事先知道文件格式是excel可以,给新生成的文件的后缀加上.xlsx...
2021-03-15 20:59:33
824
原创 linux kill/杀掉进程后 自动重启脚本
echo "************ autostart, Begin... **************"#得到对应服务的进程号str=`ps -ef | grep language-1.0-SNAPSHOT.jar | grep -v "grep"|awk '{print $2}'`#获取进程所在的目录pwd=`ls -l /proc/${str} | grep "cwd ->" | grep -v "grep" | awk '{print $NF}'`echo "进程目录是:"$pwd
2021-02-10 09:59:56
2942
原创 stream.filter不会空指针,stream.map会出现空指针
前者返回一个流对象,后者如果出来的值是空的,再.findfirst()等其他的方法就会出现空指针,所以最好给map的取值结果加个默认值,去stream.map(aa-> Maputils.getstring(aa,key,默认值))
2021-01-29 17:51:17
6788
原创 stream流带下标foreach循环
stream.iterate(0,i->i+1).limit(pars.size()).foeach(i ->{system.out.printlen(i)});
2021-01-29 15:00:49
6147
原创 stream.of 与list.stream的区别,在使用filter过滤时的区别
前者是把集合当做一个整体处理,后者是把一个个元素分开来遍历。所以要对集合中每个元素做判断过滤,要用后者list.stream
2021-01-28 17:15:05
1107
原创 idea上git提交忽略部分目录
问题网上比较流行的方法是 在editor中修改file types,把要修改的目录加到 ignore file and folders中,打算我要把resource整个目录都忽略掉,如果把resources;加到里面。在project中也不显示这个目录了。这就是问题所在。解决在git的工具栏中,选Changelists --》new Changelist,随便写个名字,然后提交,在提交的也右键不需要提交的目录或文件,选 move files to another changelist ,在弹窗中选择刚
2020-11-05 14:43:09
1878
带有分页技术的web案例
2018-03-17
wordCount实例
2018-03-08
eclipse和firefox浏览器的gwt插件
2018-02-23
TCP和UDP socket调试工具V2.2
2018-01-06
json转对象需要的jar包
2018-01-04
dom4j.jar slf4j.jar log4j.jar 包下载
2017-12-29
springMVC简单工程搭建
2017-09-29
servlet-api.jar 适用于import javax.servlet.http.HttpSession;异常
2017-09-21
struts+hibernate整合框架简单实例,包含数据库sql语句,框架所需jar包
2017-09-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人