springboot
文章平均质量分 80
timi先生
我懒,还写了签名️
展开
-
多线程下如何保证OkHttpClient的线程安全
这是为了避免在没有其他线程需要使用 OkHttpClient 的情况下,保持对 threadMap 的引用。but,我们说的前提是多线程下,那么并发访问可能带来的竞争条件和同步问题是单例模式下无法避免的。使用 OkHttpClient 的新实例这个方案的核心在于我们为每一个新的线程都创建了OkHttpClient客户端示例,以此来避免线程共享资源和相互竞争。多线程下的线程安全是很多同学都会遇到问题之一,虽然都说在客户端使用多线程是不可取的,但客户端本身是在一个多线程的环境下时,这个问题就不得不考虑了。原创 2023-12-25 15:12:12 · 953 阅读 · 0 评论 -
Apche Kafka + Spring的消息监听容器
例如,如果有 3 个主题,每个主题有 5 个分区,并且我们想要使用 concurrency=15,但是我们只会看到 5 个活动使用者,每个使用者从每个主题分配一个分区,而其他 10 个使用者处于空闲状态。TopicPartitionOffset提供了一个带有附加参数的构造函,boolean如果是true,则在容器启动时相对于该消费者的当前位置初始偏移(正或负)。使用事务(transactions)时,偏移量将发送到事务,语义相当于 RECORD 或 BATCH,具体取决于侦听器类型(记录或批处理)。原创 2023-08-16 14:39:23 · 2483 阅读 · 0 评论 -
在SockJS+Spring Websocket中convertAndSendToUser中的“用户”来自哪里?
我们知道可以使用客户端订阅的主题前缀从 stomp 服务器向客户端发送消息,例如 /topic/hello。我们还知道我们可以向特定用户发送消息,因为 spring 提供了convertAndSendToUser(username, destination, message)API。它接受一个字符串用户名,这意味着如果我们以某种方式为每个连接都有一个唯一的用户名,我们能够向订阅某个主题的特定用户发送消息。那么,这个用户名来自哪里?或者说它是如何用这个用户名确定对应连接的?原创 2023-08-10 09:36:13 · 1259 阅读 · 0 评论 -
Spring中的Websocket身份验证和授权
如果UsernamePasswordAuthenticationToken构建没有通过GrantedAuthority,则身份验证将失败,因为没有授予权限的构造函数自动设置authenticated = false 这是一个重要的细节,在 spring-security 中没有记录。接着需要创建一个拦截器,它将设置“simpUser”标头或在 CONNECT 消息上抛出“AuthenticationException”。请注意:这@Order是至关重要的,它允许我们的拦截器首先在安全链中注册。原创 2023-08-09 11:34:55 · 2243 阅读 · 0 评论 -
Mybatis plus 存储 List、Map
接着:在该实体类上修改 @TableName@TableName(value = "数据库表名" , autoResultMap = true)try {} try {} } }});});});} }@TableName(value = "数据库表名" , autoResultMap = true) @TableField(typeHandler = ObjectToJacksonHandler . class)原创 2023-07-27 14:01:37 · 2927 阅读 · 0 评论 -
基于Java对STOMP服务端进行测试
可以看到在10000用户的并发下,客户端连接用时 5.5秒,500万条数据发送用时 55秒左右。但我们测试时要求确认订阅状态,来确定订阅是否成功。所以必须对之前的配置类进行改动,来满足要求。,这种设置属于入门级使用,它非常简单但仅支持 STOMP 命令的子集(无确认、收据等)。之前的服务端我们是这样设置的。我们这一节对它进行测试。原创 2023-07-25 10:30:00 · 617 阅读 · 0 评论 -
spring boot构建Stomp客户端
我们的ClientStompSessionHandler类中,主要实现:afterConnected,handleFrame,handleException,handleTransportError。配置包括三部分,一个是基本的websocket客户端配置,另一个是Stomp客户端配置和会话处理。依赖只有一个,版本跟随spring boot版本就行。原创 2023-07-24 13:53:47 · 923 阅读 · 0 评论 -
SpringBoot + WebSocket+STOMP指定推送消息
目录一、前提条件1.2 环境要求1.3 依赖二、相关工具类准备2.1 发送消息载体2.2 接收消息载体2.3 消息处理接口2.4 为 STOMP 消息传递配置 Spring三、前端部分四、效果一、前提条件本文将简单的描述SpringBoot + WebSocket+STOMP指定推送消息场景,不包含信息安全加密等,请勿用在生产环境。1.2 环境要求JDK:11+Maven: 3.5+SpringBoot: 2.6+stompjs@7.0.0STOMP 是面向简单(或流式)文本的消息原创 2023-07-12 16:25:40 · 2138 阅读 · 2 评论 -
Java代码中的if语句优化(工厂模式+策略模式)
我们定义几个实现类,来对核心接口进行实现,前面的代码中有几个 if 这里就定义几个实现,为了方便起见,我们这里定义了三个。总所周知,认知复杂度是衡量方法控制流理解难度的指标, 认知复杂度高的方法将难以维护。so,这样的代码是十分难以维护的。可以看到输出结果和我们使用 if 语句并无区别,但是这种的可维护性却明显提高。首先我们定义一个核心接口,这个接口定义了我们要实现的方法。最后我们定义一个工厂类进行各种异常的管理和实现方法的调用。一切都完成后,我们愉快的使用一下看看效果。,下面我们就以它为核心进行优化。原创 2023-07-04 08:44:25 · 570 阅读 · 0 评论 -
SpringBoot通用异常处理
通用异常返回一般用在该异常服务器无法处理的时候,进行消息的返回。所以返回代码只有 500。全局异常页面处理器,覆盖默认的 Whitelabel Error Page。将未知错误异常,输出格式重写为我们熟悉的响应格式。原创 2023-07-03 11:20:18 · 834 阅读 · 0 评论 -
SpringBoot + Ant Design Vue实现数据导出功能
有了实体类后,我们将开始进行具体的逻辑编写,但在这之前我们需要定义接收前端传参的类,和定义我们的打印模板。这里只展示具体逻辑,common开头的公共类和工具类感兴趣的伙伴可以私信我获取~打印模板定义了我们们即将打印的表格的表头结构和列名、表头颜色。备注:通过修改打印模板类的注解,可以实现自定义的表头和表头颜色。至于它放哪里,是什么样式可以根据自己的需求决定。这部分很简单,我们只需要即将打印的内容ID即可。按钮有了,下来我们开始实现这个按钮的功能。:获取选中的目标ID数组。原创 2023-06-21 13:54:44 · 2100 阅读 · 0 评论 -
kakfa 常见错误(长期更新 2023.09.05)
我们只需要在消费者配置中设置一个即可,这个错误的原因是未设置group id,但又使用了subscribe(topic) 或基于 Kafka 的偏移量管理策略使用组管理功能引起。若不清楚group id请显示的指定分区,避免将错误的group id写入。springboot启动后连接kafka集群报错:协调器不正确,标记协调器未知。springboot指定消费者群组:消费者配置类添加下面代码(消费者配置类可查看。指定消费者群组进行消费,成功消费后将自动创建所指定的消费者群组。原创 2023-06-19 17:02:46 · 1935 阅读 · 0 评论 -
springboot 连接 kafka集群(kafka版本 2.13-3.4.0)
消息的接受有多种方式,我们这里选择的是使用 @KafkaListener 注解来进行消息接收。实现该接口的方法,我们可以获取包含发送结果(成功或失败)的异步回调,也就是可以在这个接口的实现中获取发送结果。写一个controller类来测试我们构建的发布者类,这个类中打印接收到的消息,来确保信息接收不出问题。继续使用postman调用我们写好的发布者发布消息,观察控制台的消费者类是否有相关日志出现。我们简单的实现构建一个发布者类,接收主题和发布消息参数,并打印发布结果。配置好后,我们就可以使用这个注解了。原创 2023-06-09 19:39:25 · 9494 阅读 · 5 评论