- 博客(217)
- 资源 (50)
- 问答 (1)
- 收藏
- 关注

原创 那些年,我们写过的低级BUG,警钟长鸣
看下这段代码有哪些问题:public static MultiPriceInfo getMultiPriceInfo(List<MultiPriceInfo> multiPriceInfos, String code) { if(CollectionUtils.isEmpty(multiPriceInfos)){ return null; } for(MultiPriceInfo priceInfo : multiPric
2020-10-29 14:43:10
843
1
原创 Cannot find module @rollup/rollup-win32-x64-msvc
【代码】Cannot find module ‘@rollup/rollup-win32-x64-msvc‘
2025-03-20 11:26:22
376
原创 mapstruct入门
只需要在接口上添加@Mapper注解即可,mapstruct会创建一个具有相同方法的实现类,并自动生成所有的setter和getter.@Mapper.builder().build();
2025-01-27 11:05:50
305
原创 Mockito快速入门
SpringBootTest注解来加载整个Spring应用上下文, @MockBean@SpyBean注解用于在Spring应用上下文中注入一个模拟的Bean,它将在测试开始时自动添加到Spring应用上下文中。除了 mock()/@Mock,还可使用 spy()/@Spy,两者区别是 spy 是部分mock,如果不打桩,则执行的是真实的方法。@Mock 是 Mockito 中用的最多的注解,我们用它来创建并注入mock对象,而不用手动调用 Mockito.mock 方法。也可以使用 @Mock 注解。
2025-01-23 13:50:38
917
原创 gRPC-集成Springboot
服务端首先添加相关依赖:添加相关的配置服务端service代码:客户端添加依赖添加配置客户端调用:完整的源码下载:https://github.com/xjs1919/learning-demo/tree/master/grpc-demo
2024-11-04 16:37:04
366
1
原创 gRPC-拦截器
在构建 gRPC 应用程序时,无论是客户端应用程序,还是服务器端应用程序,在远程方法执行之前或之后,都可能需要执行一些通用逻辑。gRPC 提供了简单的 API,用来在客户端和服务器端的 gRPC 应用程序中实现并安装拦截器。它是 gRPC 核心扩展机制之一,在一些使用场景中(如日志、身份验证、授权、性能度量指标、跟踪以及其他一些自定义需求),拦截器拦截每个 RPC 调用的执行,可以使用拦截器进行日志记录、身份验证/授权、指标收集以及许多其他可以跨 RPC 共享的功能。
2024-11-04 14:35:10
286
原创 gRPC-4种通信模式
比如:客户端向服务端发送了一个查询数据库的请求,服务端持续返回多次结果。客户端数据流模式:也称客户端流式 RPC,与服务端数据流模式相反,客户端持续向服务端发送数据流,在发送结束后,由服务端返回一个响应。比如:客户端有一万条数据 ,分批多次请求服务端,服务端接收后把这些数据都存到数据库,然后返回一次结果给客户端。比如:客户端有一万条数据 ,分批多次请求服务端,服务端每次接收后存到数据库后都发送一次结果给客户端。服务端数据流模式:也称服务端流式 RPC,即客户端发起一次请求,服务端可以连续返回数据流。
2024-11-04 12:05:16
717
转载 gRPC-入门案例
了解 gRPC 之前先来看看什么是 RPC。RPC 全称是 Remote Procedure Call,中文一般译作远程过程调用。RPC 是一种进程间的通信模式,程序分布在不同的地址空间里。简单来说,就是两个进程之间互相调用的一种方式。gRPC 则是一个由 Google 发起的开源的 RPC 框架,它是一个高性能远程过程调用 (RPC) 框架,可以在任何环境中运行。gRPC 通过对负载均衡、跟踪、健康检查和身份验证的可插拔支持,有效地连接数据中心内和数据中心之间的服务。
2024-11-04 09:52:49
90
原创 SpringBoot集成SSE
例如可以在服务端将每次发送的事件ID值自动加 1,当浏览器接收到该事件ID后,下次与服务端建立连接后再请求的 Header 中将同时提交该事件ID,服务端检查该事件ID是否为上次发送的事件ID,如果与上次发送的事件ID不一致则说明浏览器存在与服务器连接失败的情况,本次需要同时发送前几次浏览器未接收到的数据。事件的唯一标识符,浏览器会跟踪事件ID,如果发生断连,浏览器会把收到的最后一个事件ID放到 HTTP Header。整数值,单位 ms,如果与服务器的连接丢失,浏览器将等待指定时间,然后尝试重新连接。
2024-10-23 17:26:14
6138
1
原创 Zookeeper占的那些端口 - 从Eclipse Jetty安全漏洞说起
起因系统扫描报Jetty漏洞,很奇怪,系统中明明没有使用Jetty! 后来发现是Zookeeper中会使用Jetty,因为有使用Kafka,所以也使用了Zookeeper。Zookeeper使用Jetty主要干2个事情:1)提供给Prometheus用来输出监控指标用,占用端口70002)提供给AdminServer用来查询系统配置项,占用端口8080也就是说,只要禁用这两个功能就可以了。1)禁用7000端口看下官方文档的描述:Since 3.6.0 ZooKeeper binary pa
2024-10-11 14:37:06
1627
1
原创 如何用Prometheus监控禁用了Actuator的SpringBoot?
换一个思路,还是照常引用actuator,但是把访问路径给禁用了,然后自己写一个controller,把actuator的内容原样输出出来不就行了,同时给这个接口加上权限认证,巧了,prometheus就支持抓取接口上加basic认证。问题是,actuator有安全风险,安全漏洞扫描会通不过,虽然改了端口号,改了访问路径,领导还是不同意啊,难不成自己写那么多的监控指标?prometheus中加上job,grafana中添加上dashboard,一个漂亮的监控页面就出来了。
2024-09-25 16:33:22
482
转载 prometheus实战---告警模板编写
Receiver: 接收器的名称.Status: 如果正在告警,值为firing,恢复为resolved.Alerts: 所有告警对象的列表,是一个列表,.Alerts.Firing: 告警列表.Alerts.Resolved: 恢复列表.GroupLabels: 告警的分组标签.CommonLabels: 所有告警共有的标签.CommonAnnotations: 所有告警共有的注解.ExternalURL: 告警对应的alertmanager连接地址。
2024-09-24 18:08:30
289
原创 茴香豆的茴的写法-SpringBoot接收客户端请求的几种方式
知道这些方式有啥用呢?有些时候,我们需要在starter中内置一些controller,但是又不想被其他的组件扫描到(比如swagger),这个时候用处就来了。
2024-09-21 15:57:11
300
原创 Integer是线程安全的吗?AtomicInteger呢?
不可变类简单来说是其实例不能被修改的类。包含在每个实例中的所有信息在对象的生命周期中是固定的,因此不会观察到任何变化。Java 平台类库包含许多不可变的类,包括 String 类、基本类型包装类以及 BigInteger 类和 BigDecimal 类。有很多很好的理由:不可变类比可变类更易于设计,实现和使用。Integer虽然是线程安全的,但是如果要实现i++这种操作,Integer就无法保证线程安全了,这正是AtomicInteger的用武之地。很明显,包装类Integer是线程安全的。
2024-08-16 11:57:42
534
原创 @Transactional如何在事务方法中正确开启异步任务?
这个时候因为发邮件是异步执行的,因此会先于注册方法执行,此时事务还没提交,因此根据id查询不到数据,导致抛出异常:user信息不存在。注解用于事务控制,用户注册完成以后,为了不阻塞主线程,使用异步的方式向用户发邮件,同时在用户注册方法的最后加了一个。以上代码的含义就是当事务提交以后会回调到这个监听方法中,因为事务已经提交,此时是可以正常查询到数据的。因为在发送邮件之前,已经把事务提交掉了,因此不会出现查不到数据的情况。这种方式可行,但是,代码的侵入性太高,不推荐。,但是注册完成以后,改成发。
2024-07-19 15:51:45
828
原创 SpringCloud-Knife4j文档聚合
2种方式都可以实现文档聚合的效果,显然网关中手动做聚合会更方便,因为不需要额外启动一个专门做文档聚合的微服务
2024-01-26 14:02:24
1145
原创 SpringBoot文件上传报错:Cannot delete C:\Users\16382\AppData\Local\Temp\tomcat.8080.****
SpringBoot文件上传报错:Cannot delete C:\Users\16382\AppData\Local\Temp\tomcat.8080
2023-11-22 14:15:06
3509
1
原创 Mybatis的Mapper接口传递多个参数的时候必须要加@Param注解吗?
Mybatis的Mapper接口传递多个参数的时候必须要加@Param注解吗?
2023-11-16 21:08:00
2021
4
Nginx安装配置
2017-10-13
maven+spring+mybatis配置
2015-12-17
Android-加速传感器或者OrientationEventListener做横竖屏切换
2015-08-13
Android日期时间选择控件
2015-08-12
Android-对ListView的Adapter的一种简单封装
2015-07-24
Android-maven配置multidex打包
2014-12-18
Android-用ListView模仿ExpandableListView
2014-08-01
Android-异步图片加载器
2014-05-09
Android-Popupwindow和Dialog做弹出窗口
2014-05-04
Android-网络通信框架Volley使用详解
2014-03-12
前面部分可以编辑后面部分不可编辑的EditText
2014-02-25
Android-从页面右侧滑出通讯录
2014-02-22
Android-部分可编辑的EditText
2014-02-20
SharedPreferences帮助类
2013-12-31
ListView后台更新报错:java.lang.IllegalStateException
2013-12-13
求一简单的正则表达式,用来验证用户的密码
2013-04-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人