自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 为什么JWT要结合Redis使用

如前所述,有一种对 JWT 令牌进行加密的方法叫做 JWE,但使用这种方法时,客户端 (尤其是浏览器和移动设备)无法解密来查看实际有效负载。这种方法的另一个好处是,你可以在前台使用前端和后端现有的 JWT 库而不必开发自己的自定义方式将数据存储在 Redis 中(尽管这并不是什么大问题)。如果您要将它用于机器对机器通信,比如在微服务中要在两个不同的服务之间共享登录信息时,就可以共享公钥来解密和查看 JWT 数据–但这是不同的用例。以上都是容易避免的问题,JWT 最大的问题是。就需要结合Redis使用,既。

2023-09-15 17:41:09 1210

原创 什么是RPC并实现一个简单的RPC

注册中心:当项目中有很多服务时,可以把所有的服务在启动的时候注册到一个注册中心里面,用于维护服务和服务器之间的列表,当注册中心接收到客户端请求时,去找到该服务是否远程可以调用,如果可以调用需要提供服务地址返回给客户端,客户端根据返回的地址和端口,去调用远程服务端的方法,执行完成之后将结果返回给客户端。gRPC的优势是,设计复杂更新操作的API非常简单,具有高效紧凑的进程通信机制,在交换大量消息时效率高,远程过程调用和消息传递时可以采用双向的流式消息方式,同时客户端和服务端支持多种语言编写,互操作性强;

2023-07-09 10:58:41 904

原创 Spring Boot 的Bean的Full模式和Lite模式

从上面的介绍可以看出来,Lite模式很大程度上是为了减少启动开销,提升程序的启动速度。所以如果你对程序的启动速度很敏感,就使用Lite模式,但是一定要记住此时的配置类已经不是经过Cglib增强过的类了。自Spring 5.2(对应Spring Boot 2.2.0)开始,内置的几乎所有的。透过源码再看这个定义是不完全正确的,而应该是如下case均认为是Lite模式的配置类。Spring的配置类分成Full和Lite两种模式。方法就称为Lite模式的配置类。的类,注意:此值默认是true。

2023-07-01 23:26:18 491

原创 为什么Java8不使用CMS作为默认垃圾收集器

以上的种种,造成的结果就是ParNew+CMS+Serial Old的组合工作起来其实并不稳定。历代版本的默认收集器始终没有使用CMS作为默认收集器,在jdk9 G1成为default gc策略之后,CMS就被deprecated,然后在14被正式从jdk中删除。Java官方做出这样的决定肯定是有原因的,虽然CMS相比Parallel是后推出的收集器,但并不意味CMS比Parallel强。CMS是关注低延迟的收集器,Parallel是关注高吞吐量的收集器,在一般的服务端中大型系统中,

2023-04-13 23:09:52 1404

原创 CentOS部署的Java服务的监听器收不到被监听设备发送的报文

程序监听使用SNMP4J工具,使用idea debug本地环境的SNMP4J源码,发现负责监听的源码调用了java.net包的DatagramSocket类的receive方法。交换机发送SNMP报文到CentOS服务器(线上环境)的162端口(SNMP默认TRAP端口),Java程序以UDP的方式监听162端口。继续追溯问题,在线上服务器使用tcpdump抓包,可以抓到TRAP报文,所以是服务器到程序这一步有问题。方法没有监听到报文,说明TRAP报文根本没有给到程序,那总不能jdk有bug吧。

2023-04-07 17:43:02 389 1

原创 SNMP4J源码主要类解析

CommunityTarget类实现了Target接口,用于SNMPv1和SNMPv2c这两个版本。UserTarget类实现了Target接口,适用于SNMPv31。PDU类是SNMP报文单元的抽象,其中PDU类适用于SNMPv1和SNMPv2c。这是最主要的一个类,无论实现设备监听器还是发送接收设备报文,都需要先创建这个对象。发送SNMP请求和构造监听器代码前四行是一致的,都是构造SNMP对象,然后开启监听。监听器接口,接口只有一个processPdu方法,用来处理收到的报文。

2023-03-30 15:57:39 589

原创 ConcurrentHashMap的putIfAbsent作为多对象锁

ConcurrentHashMap的putIfAbsent方法是原子性的。我们可以把ip作为ConcurrentHashMap的key来实现这样的并发需求。一段代码被多个线程访问,要求这段代码在ip相同的时候不允许并发访问。

2023-03-15 10:46:11 351

原创 systemctl方式启动jar报错java: command not found

service文件ExecStart=jar-start.sh。脚本中包含java -jar xxx命令。执行systemctl xxx start后报错java: command not found。但在终端前台启动脚本(sh jar-start.sh)就不会报错。最佳解决方案是在service.sh脚本中使用java可执行文件的完整路径。所以以上路径没有java文件的话启动就会报错。:Systemd使用固定的搜索路径。

2023-01-04 14:05:59 1131 1

原创 Springboot @value取集合类型取不到值时返回空而不报错

https://www.cnblogs.com/javastack/p/13862164.html

2022-11-30 10:47:54 876

原创 SNMP4J请求交换机mac表,在Object.wait(long ms)方法卡死

背景:定时任务使用SNMP协议定时获取交换机的mac表并入库。现象:SNMP4j源码等待交换机响应时调用了Object的wait(long timeout)方法,时间设置为12秒,但是在wait方法这里阻塞了最多十几个小时以上。

2022-09-16 16:45:51 257

原创 使用arthas监控java进程常用命令

arthas官方教程监控方法耗时trace -E com.test.ClassA|org.test.ClassB method1|method2|method3输出profiler火焰图profiler startprofiler stop

2022-04-12 17:37:43 332

原创 SpringBoot2 方法参数@RequestParam参数校验

校验@RequestParam的参数需要在类上加上@Validated注解,方法上加上无效https://www.cnblogs.com/chentianming/p/13424303.html

2022-03-23 17:59:57 2298 1

原创 Mybatis嵌套查询映射Java bean的集合属性

<resultMap id="ProjectPageableRespVoResultMap" type="com.visionvera.ioam.devaddrmanage.controller.response.ProjectPageableRespVo"> <id property="id" column="id" jdbcType="INTEGER"/> <result property="deviceNum" column="device

2022-03-15 09:53:45 879

原创 Mysql 根据if条件判断是否执行sql语句

需求例如:if device 表中没有subType字段 ALTER TABLE device ADD subType varchar(20)DEFAULT NULL; endif server_kid_num表不存在CREATE TABLE IF NOT EXISTS server_kid_num (id varchar(33) NOT NULL,num varchar(33) DEFAULT NULL,used varchar(33) DEFAULT NULL,PRIMARY KE

2022-03-14 14:53:26 4788 2

原创 mysql 根据a表批量更新b表

对p表行政区域码为空的数据进行更新:截取地区名称到s表查询相应的行政区域码并更新到p表的行政区域码update dam_project_info p inner join t_sys_region s on p.project_name like concat('%', left(s.region_name, CHAR_LENGTH(s.region_name) - 1), '%')set p.region_code = s.region_codewhere p.region_code = '';

2022-03-10 10:24:34 1311

原创 mysql命令行导出数据csv 第一行为标题

导出后数据为csv格式,windows打开后另存为xlsx直接转存为excel。mysql -A schema_name -h 127.0.0.1 -uroot -p123456 -ss -e "SELECT * FROM table_name union select 'column_name1','column_name2', 'column_name3', 'column_name4', 'column_name5' from t_switch order by id desc;" | sed 's

2022-02-10 10:30:49 878

原创 使用async-profiler查看java代码耗时比例

首先,我们将基于我们的平台下载最新版本的async-profiler https://github.com/jvm-profiling-tools/async-profiler。当前,它仅支持Linux和macOS平台。下载后,我们可以检查它是否在我们的平台上正常工作:$ ./profiler.sh --version其次,在Linux平台上使用async-profiler时,我们应确保配置内核以使用所有用户的perf_events捕获调用堆栈:我们将perf_event_paranoid设置为1

2021-12-29 18:18:34 957

原创 Docker 容器内操作宿主机

容器内部运行宿主机的docker命令实现这种需求,其实非常简单,你只需要将docker宿主机的docker文件和docker.sock文件挂载到容器中即可,具体为:-v /var/run/docker.sock:/var/run/docker.sock-v /usr/bin/docker:/usr/bin/docker你要先找到你宿主机的docker和docker.sock位置,别挂载错了,标准的Linux正常来说就是上面的位置。你在启动docker容器的时候,将上述两个文件正常挂载后,就可以在

2021-11-01 11:33:46 8532 2

原创 RabbitMq配置ssl

RabbitMq配置ssl生成证书生成证书签发机构生成服务端公钥,和私钥生成客户端公钥,和私钥生成客户端需要的证书证书生成结束步骤检查修改RabbitMQ的SSL配置重启rabbitmq服务接下来会简述证书生成,ssl端口开放##下载SSL证书生成器git clone https://github.com/Berico-Technologies/CMF-AMQP-Configuration.git生成证书cd CMF-AMQP-Configuration/ssl配置当前目录下的openssl

2021-11-01 11:20:27 2672 1

原创 Spring Boot自动装配主要源码解析

参考https://zhuanlan.zhihu.com/p/136469945

2020-12-24 19:23:45 114 1

原创 Maven打jar包配置pom,不使用SpringBoot依赖

<build> <finalName>JarName</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> </plugin> <plugin&g

2020-10-26 20:10:28 381

原创 Java 升级log4j 到 log4j2 (web工程,springboot工程,非maven工程)

Java web(SSH)(1) web.xml: <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:config/log4j.properties</param-value> </context-param> // 修改为 <context-param> &lt.

2020-06-10 17:13:34 2052

原创 Nginx按天生成log并定期定理

每天0点生成一个带时间的文件,并删除30之前的log文件。#!/bin/bash#function:cut nginx log files #set the path to nginx log fileslog_files_path="/xxx/nginx/logs/"log_files_dir=${log_files_path} #set nginx log files you ...

2020-02-28 11:33:13 426

原创 druid连接池各属性详细含义

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- 基本属性 url、user、password --> <property name="u...

2020-02-10 19:12:24 1200

原创 RestTemplate 发送https请求

参考:https://www.thinbug.com/q/4072585import java.security.KeyManagementException;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.cert.X509C...

2020-02-04 17:48:37 1177

原创 Spring4(非springboot) NoSuchBeanDefinitionException: No qualifying bean of type

配置ComponentScan时如果分开写,要注意包之间的依赖关系。如果service包里@Autowired了config包下的东西,那么config包就要写在service前面。正确示例:<context:component-scan base-package="com.xxx.config,com.xxx.service,com.xxx.dao,com.xxx.daoImpl...

2020-02-04 17:46:53 269

转载 Springboot2+mybatis-plus配置datasource报错 Invalid bound statement (not found)

检查是不是引入 jar 冲突检查 Mapper.java 的扫描路径检查命名空间是否正常? 检查包扫描路径typeAliasesPackage是否正常?如果扫描不到,MP 无法进行预注入检查是否指定了主键?如未指定,则会导致 selectById 相关 ID 无法操作,请用注解 @TableId 注解表 ID 主键。当然 @TableId 注解可以没有!5. 但是你的主键必须叫 id(忽略...

2020-01-11 21:59:40 950

原创 cookie监听导出excel结束时间点

JavaScript$("#export").click(function(){ $(".mask").css("display","none"); $(".exportdiv").css("display","none"); var exportdata = document.getElementById("Searchinput").value; ...

2020-01-09 15:05:47 219

原创 Tortoise git 更换用户后提示remote: Repository not found.

去Windows Credential把旧的用户信息删除配置global .gitconfig

2020-01-08 11:43:11 728

转载 Windows下搭建Redis集群

添加链接描述添加链接描述各节点配置文件:#!!没有requirepassport 7001 #端口7001 ~ 7006#cluster-enabled yes #是否开启集群#cluster-config-file nodes.conf #集群节点文件,会根据配置的名字生成在目录下#cluster-node-timeout 15000 #超时时间#appendonly yes...

2019-12-15 13:11:19 47

转载 Java并发编程:Callable、Future和FutureTask

一、Callable 与 Runnable先说一下java.lang.Runnable吧,它是一个接口,在它里面只声明了一个run()方法:public interface Runnable { public abstract void run();}由于run()方法返回值为void类型,所以在执行完任务之后无法返回任何结果。Callable位于java.util.concu...

2019-12-11 18:23:57 58

原创 OAuth2.0 授权码方式

参考:http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html以某CSDN使用某WeChat登录为例,模拟场景:授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在...

2019-11-30 09:50:41 219

原创 Windows下Nginx的安装和配置

参考链接https://www.cnblogs.com/jiangwangxiang/p/8481661.html补充:upstream的名字不要使用下划线,这里使用下划线负载到web应用时tomcat报错了。配置:报错:配置文件upstream backend { ip_hash; server backend1.example.com weight=5...

2019-11-27 16:27:03 138

原创 SpringBoot SpringSecurity知识点

明确三个接口GrantedAuthority(角色权限) UserDetails (用户信息) UserDetailsService(获取用户信息和用户权限)角色表DO实现GrantedAuthority接口:@Data@AllArgsConstructor@NoArgsConstructorpublic class RoleInfo implements GrantedAuthorit...

2019-11-16 10:13:15 278

原创 Swagger添加全局Header和Basic Auth参数

package com.daimler.esbapi.config;import java.util.ArrayList;import java.util.List;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;...

2019-11-15 16:36:08 2351

转载 程序员实用工具网站

2019-10-11 15:53:03 90

原创 Java RSA公钥私钥加密工具类

public class RSAEncrypt { private static Map<Integer, String> keyMap = new HashMap<>(); //用于封装随机产生的公钥与私钥 /** * RSA公钥加密 * * @param str * 加密字符串 * @param publicK...

2019-10-11 15:40:53 733

原创 Mybatis汇总

plus初始配置,基本使用https://www.cnblogs.com/cicada-smile/p/11651788.html

2019-10-11 15:23:01 82

原创 对线程安全的理解

方法中的变量不存在非线程安全问题,永远都是线程安全的,这是因为方法内部的变量是私有的特性造成的。synchronized锁加在方法上,锁的是对象。效果同synchronized(this)synchronized加在静态方法上,锁的是类。效果同synchronized(class.Class)。多个对象多个锁。两个线程分别访问同一个类的两个不同实例的相同名称的同步方法,效果却是以异步的方式...

2019-10-10 22:06:31 116

原创 [log4j-spring.properties]springboot log4j配置文件案例

log4j.rootLogger=DEBUG,console,event,Dlog4j.appender.console= org.apache.log4j.ConsoleAppenderlog4j.appender.console.encoding= UTF-8log4j.appender.console.Threshold = INFOlog4j.appender.console.T...

2019-10-09 17:13:52 216

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除