
java
听风当歌
Think more and code less
展开
-
记录一次redisson看门狗代码
但是redission却又提供了lock这种未设置时间的锁,那么它是怎么做的呢,下面分析代码。接下来再看看门狗干啥了,如下图,会把上面的线程id缓存到map里面,并加入到队列里面。也就是说,如果加锁时不进行过期时间设置,默认是30s,设置了则时设置过期时间,过期时间是一定得有的,要不然程序挂了这个锁就释放不了了。如上图,传递过期是间是-1,那么再往下走继续看代码。大家都知道redisson实现了分布式锁。那么实现分布式锁需要哪些条件呢。当然也有取消看门狗的方法。下面时看门狗的续期代码。原创 2024-11-18 23:46:15 · 235 阅读 · 0 评论 -
idea运行java程序报:java: 错误: 不支持发行版本 5解决
进入设置修改编译字节码版本进入项目结构修改语言类别改为你自己对应的jdk版本原创 2022-05-18 12:43:51 · 383 阅读 · 0 评论 -
deepin更换默认jdk版本
先安装jdk直接从官网下载解压下载链接自己选择所需版本下载解压配置 sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1100直接使用命令安装sudo apt install -y openjdk-11-jdk查询当前机器上已经安装的jdksudo update-alternatives --config java选择默认jdk版本原创 2022-05-09 19:57:53 · 564 阅读 · 0 评论 -
postMan传递枚举值
枚举类@Getter@RequiredArgsConstructorpublic enum Env implements Valued<Integer> { NOOP(1, EnvConfig.class, ""), private final Integer value; private final Class<? extends EnvConfig> configClass; private final String remark;原创 2021-12-21 17:40:29 · 15351 阅读 · 2 评论 -
springboot中替换class文件
背景线上项目需要替换jar包中的class文件以支持正常部分代码改动原始jar包解压jar -xvf ***.jar解压后的文件目录如上图替换需要替换的class文件,在BOOT-INF下面发现需要替换的是lib中一个jar包中的class然后找到这个jar包,再执行解压步骤将替换后的文件打成jar包jar -cfM0 XX.jar ./将打好的jar包替换/BOOT-INF/lib下的jar包再将其打成jar包执行图如下如下图就完成了替换将上面上成原创 2021-10-03 18:23:25 · 2185 阅读 · 0 评论 -
spring security 集成cas实现单点登录
cas流程如下用户发送请求,后台服务器验证ticket(票据信息),未登录时,用户没有携带,所以验证失败,将用户重定向到cas服务器去登录换取票据凭证用户获取凭证后携带凭证进行请求,后台服务器拿着ticket票据信息去cas服务器验证,验证成功后并获取用户信息,后台服务器再将获取到的用户信息返回给浏览器下图,路线:1->5->6; 1->2->3->4; 1->2->7->8->9->1;下面代码解决的问题1.完成第三方客原创 2021-09-06 14:49:20 · 4040 阅读 · 13 评论 -
springboot中RestTemplate结合httpcomponents简单使用
背景spring中需要使用http去调用第三方接口,第三方接口每次请求需要有认证信息,为方便使用,封装了一下实现pom.xml中引入http工具包 <!-- http工具包 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <ve原创 2021-09-01 17:00:30 · 1009 阅读 · 0 评论 -
springboot集成log4j2进行日志切割
先看效果图实现pom.xml中引入jar,排除调springboot自带的日志 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions><!-- 去掉springboot默认配置 --> <原创 2021-09-01 15:34:18 · 842 阅读 · 0 评论 -
springboot 动态修改配置,不用重启项目
背景将配置文件写入到数据库中,通过修改之后,不用重启项目,能实时生效如果想要实现只要数据库数据被修改就实时生效,(从任何地方修改数据库数据),可以使用阿里的中间件 canal实现注解@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface DynamicConf { String value(); String defaultValue() default原创 2021-07-14 17:58:19 · 6614 阅读 · 0 评论 -
maven将本地jar包打入到仓库中
命令如下cd到jar包所在目录配置好maven环境变量修改如下命令中xxx部分替换为你pom.xml中的坐标修改如下配置中xxxxx.jar为你本地的jar包路径mvn install:install-file -DgroupId=xxx -DartifactId=xxx -Dversion=xxx -Dpackaging=jar -Dfile=xxxxxx.jar...原创 2021-07-09 14:45:47 · 345 阅读 · 0 评论 -
mybatisPlus根据起止时间作为条件进行查询
背景查询当天凌晨0.00 到当前时间的数据代码 SimpleDateFormat wrapperSdf1 = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); //当前时间 Date dzDateObj = new Date(); String nowTime = wrapperSdf1.format(dzDateObj); //当天0.00点 Calendar calendar = Calendar原创 2021-07-07 20:31:14 · 2272 阅读 · 0 评论 -
java获取当天0点到24点中间刻度集合
背景每5、15、30、60分钟获取一次数据,并展示当前24小时的刻度代码如下 public class TimeUtil { public static void main(String[] args) { //10为时间间隔刻度,单位是分钟 List<Date> ds = getTimeList(10); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); for (Date d : ds原创 2021-07-07 20:26:17 · 1519 阅读 · 0 评论 -
java字符串和字节转换
/* * 16进制数字字符集 */ private static String hexString = "0123456789ABCDEF"; /* * 将字符串编码成16进制数字,适用于所有字符(包括中文) */ public static String encode(String str) { // 根据默认编码获取字节数组 byte[] bytes = str.getBytes(); StringBuilder sb = new Stri.原创 2021-06-15 15:43:22 · 2852 阅读 · 0 评论 -
java使用snmp协议
背景控制华为交换机的poe供电与断电来重启PADsnmp协议使用import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Vector;import lombok.extern.slf4j.Slf4j;import org.snmp4j.CommunityTarget;import org.snmp4j.PDU;import org.snmp4j.Snmp;原创 2021-06-10 15:58:11 · 3133 阅读 · 0 评论 -
java8List对对象某个属性值去重
代码如下deviceDTOList :为需要去重的ListdeviceIds:为需要对某个属性去重的集合 List<Integer> deviceIds = new ArrayList<>(); deviceDTOList.stream().filter( device -> { boolean flag = !deviceIds.contains(device.getId()); deviceIds.add(原创 2021-04-30 17:45:24 · 1152 阅读 · 1 评论 -
mybatisPlus进行and+like查询
LambdaQueryWrapper<User> lambda = new QueryWrapper<User>().lambda(); lambda.eq(User::getName, param.getName()); lambda.and(wr -> { wr.like(User::getAge, param.getAge()).or() .like(User::getPhone, param.getPhone());.原创 2021-04-30 17:42:34 · 955 阅读 · 1 评论 -
netty客户端简单使用
背景需求通过给SONY电视发送命令控制其开关,且可以获取其返回信息客户端类 NettyClient@Slf4jpublic class NettyClient { /** * 客户端业务处理handler */ private ClientHandler clientHandler = new ClientHandler(); /** * 事件池 */ private EventLoopGroup eventGroup = new NioEventLo原创 2021-04-09 17:38:37 · 375 阅读 · 0 评论 -
java推送微信小程序订阅消息
效果图一、开发前资料准备:1.1 登录微信小程序后台:微信小程序使用自己微信号登录即可1.2 寻找Appid和AppSecret配置:1.3选择合适的模板消息进行推送选择自己需要的模板,没有的话到最后一页去自己申请(看下下张图的自己申请即可)1.4找到模板id:1.5下载官方微信开发工具:微信开发工具选择自己电脑匹配的版本下载二、小程序订阅消息代码开发:2.1创建官方小程序DEMO2.2获取code如下图点击app.js,然后再登录中打印code值2.原创 2021-03-22 18:38:32 · 1428 阅读 · 3 评论 -
阿里开源java诊断arthas
背景Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题。Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux、Mac、Windows 操作系统,命令还支持使用 tab 键对各种信息的自动补全,诊断起来非常利索。官网,github地址解决问题当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:1、这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?2、我改的代码为什么没有执行到?难道是我原创 2021-03-13 01:33:38 · 114 阅读 · 0 评论 -
linux上安装并启动activeMq
一、下载解压文件1、下载wget http://archive.apache.org/dist/activemq/5.15.5/apache-activemq-5.15.5-bin.tar.gz2、解压tar -zxvf apache-activemq-5.15.5-bin.tar.gz需要注意该版本官方说最低JDK版本要1.8,自己本地需要配置1.8以上的JDK环境二、启动启动服务./bin/activemq start查看启动状态./bin/activemq statu原创 2021-03-11 13:42:59 · 4790 阅读 · 0 评论 -
springboot项目统一处理异常
编写异常类@NoArgsConstructor@AllArgsConstructor@Datapublic class ThingsException extends RuntimeException { private String code; private String message; private String enMessage; public ThingsException(String code, String message) { this.code原创 2021-03-09 09:43:16 · 138 阅读 · 0 评论 -
activeMq集成到springboot中使用
搭建activeMq环境docker安装activemq1、拉去镜像docker pull webcenter/activemq2、查询是否拉取成功docker images3、运行镜像docker run -d --name myactivemq -p 61616:61616 -p 8161:8161 webcenter/activemq:latest61616为项目中tcp链接的端口 # 需要配置到项目中8161位浏览器访问的接口 # 浏览器端直接访问二、Springboot原创 2021-03-02 17:29:19 · 336 阅读 · 0 评论 -
spring中结合业务实际使用工厂模式策略模式
只是一种思想,具体需要自己结合具体业务做实现业务service接口public interface SendMessageStrategy { void sendMessage(WebSocketSession session, PanelMessage<?> message) throws IOException; String getMessageType();}业务实现类service实现一@Servicepublic class PingSendMessag原创 2021-02-22 10:20:50 · 221 阅读 · 0 评论 -
基于spring简单实现websocket服务器
直接实现spring的WebSocketConfigurer接口,并重写registerWebSocketHandlers方法@Configuration@EnableWebSocketpublic class WebSocketConfig implements WebSocketConfigurer { @Autowired Handler handler; @Override public void registerWebSocketHandlers(WebSocketH原创 2021-02-05 16:06:33 · 518 阅读 · 0 评论 -
java中对list中元素进行排序
实体类package com.example.demo.po;/** * @author wenjun * @date 2021/2/5 15:35 */public class User { private String name; private Integer age; private Integer sex; private String phone; public String getName() { return name; } pu原创 2021-02-05 15:48:46 · 275 阅读 · 1 评论 -
idea中编写java代码使用google-style风格
1、首先在github上下载intellij-java-google-style.xml文件google-style.xml2、将内容保存到本地电脑3、打开idea->File->settings->Editor->Code Style->设置按钮->Import Scheme->Intellij IDEA code style XML->然后选择上面保存的intellij-java-google-style.xml文件,点击应用保存即可4、每次写原创 2021-01-17 09:01:30 · 3302 阅读 · 2 评论 -
java程序在windows设置开机自启
配置jre环境编辑脚本文件xxx.bat只用修改下面 E:\xxx\xxx.jar即可小提示java -jar 会出现命令框javaw -jar 不会出现命令框@echo "程序开始" start javaw -jar E:\xxx\xxx.jar 创建xxx.bat的快捷方式将xxx.bat的快捷方式放入如下路径中,再重启电脑C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp...原创 2020-11-11 15:10:18 · 1966 阅读 · 0 评论 -
java获取阿里邮箱收件箱、发件箱、草稿箱、已删除邮件、垃圾邮件
通过下面两句代码即可获得该邮箱下所有文件夹名称Folder defaultFolder = store.getDefaultFolder();Folder[] allFolder = defaultFolder.list();然后通过下面代码获取对应的文件 IMAPFolder folder = (IMAPFolder) store.getFolder("INBOX"); // 收件箱 IMAPFolder sendFolder = (IMAPFolder) store.getFolder(原创 2020-11-10 10:03:04 · 3563 阅读 · 0 评论 -
spring中容器加载完成后再执行自己的方法
一.理论 在开发过程中遇到了要在项目启动后自动开启某个服务,由于使用了spring,我在使用了spring的 listener ,它有 onApplicationEvent ()方法, 在Spring容器将所有的Bean都初始化完成之后,就会执行该方法 。 应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用了其他类(可能是更复杂的关联),所以当我们去使用这个类做事情时发现包空指针错误,这是因为我们这个类有可能已经初始化完成,但是引用的其他原创 2020-10-31 14:00:01 · 2797 阅读 · 0 评论 -
java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.String
场景如下代码会报java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.String我的INDEX1中value值是1或2或3…这样的数据 Collections.sort(list, new Comparator<HashMap<String,String>>() { @Override public int compare(原创 2020-10-31 13:53:59 · 1394 阅读 · 0 评论 -
java中将word转成PDF
本文用的aspose-words15.8.0,代码下载下来之后,只要有jdk环境即可源码链接原创 2020-10-29 19:42:18 · 220 阅读 · 0 评论 -
设计模式之总结篇
设计原则github代码示例开闭原则:对扩展开放,对修改关闭依赖倒置原则:高层不依赖低层,都依赖抽象,细节依赖抽象,抽象不依赖细节单一职责原则:不要存在多于一个导致类变更的原因接口隔离原则:用专门的接口,而不使用总接口,客户端不用实现自己不用的接口迪米特法则:一个对象应该对其他对象保持最少的了解里氏替换原则:子类对象能替换父类对象而程序逻辑不变组合复用原则:尽量使用组合/聚合而不使用继承来达到软件复用的目的设计模式github代码示例创建型模式:简单工厂模式(不属于GOF23种里面),原创 2020-09-29 18:01:57 · 192 阅读 · 1 评论 -
设计模式之访问者模式
定义:访问者模式(Visitor Pattern)是一种将数据结构与数据操作分离的设计模式.是指封装一些作用于某种数据结构中的各元素的操作.特征:可以不改变数据结构的前提下定义作用于这些元素的新的操作.属于行为型模式.适用场景1.数据结构稳定,作用于数据结构的操作经常变化的场景;2.需要数据结构与数据操作分离的场景;3.需要对不同数据类型(元素)进行操作,而不使用分支判断具体类型的场景优点1.解偶了数据结构与数据操作,使得操作集合可以独立变化;2.扩展性好:可以通过扩展访问者角色,实现对数原创 2020-09-29 15:22:42 · 153 阅读 · 0 评论 -
设计模式之观察者模式
定义:观察者模式(Observer Pattern),又叫发布-订阅(Publish/Subscribe)模式,模型-视图(Model/View)模式,源-监听器(Source/Listener)模式或从属者(Dependents)模式.定义一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听,使得每当主题对象状态变化时,所有依赖于它的对象都会得到通知并被自动更新.属于行为型模式适用场景1.当一个抽象模型包含两个方面内容,其中一个方面依赖另一个方面;2.其他一个或多个对象的变化依赖于另一个对原创 2020-09-29 13:56:48 · 189 阅读 · 0 评论 -
设计模式之中介者模式
定义:中介者模式(Mediator Pattern)又称为调解者模式或调停者模式.用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互.核心:通过中介者解偶系统各层次对象的直接耦合,层次对象的对外依赖通信统统交由中介者转发.属于行为型模式.适用场景1.系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解;2.交互的公共行为,如果需要改变行为则可以增加新的中介者类.优点1.减少类间依赖,将多对多依赖转化成了一原创 2020-09-28 17:50:35 · 135 阅读 · 0 评论 -
设计模式之解释器模式
定义:解释器模式(InterPreter Pattern)给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.特征:为了解释一种语言,而为语言创建的解释器.属于行为型模式适用场景1.一些重复出现的问题可以用一种简单的语言来进行表达;2.一个简单语法需要解释的场景.优点1.扩展性强:在解释器模式中由于语法是由很多类表示的,当语法规则更改时,只需修改相应的非终结符表达式即可;若扩展语法时,只需添加相应非终结符类即可;2.增加新的解释表达式的方式;3.原创 2020-09-28 17:50:15 · 198 阅读 · 0 评论 -
设计模式之备忘录模式
定义:备忘录模式(Memento Pattern)又称为快照模式(Snapshot Pattern)或令牌模式(Token Pattern),是指在不破换封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.特征:"后悔药"属于行为型模式适用场景1.需要保存历史快照的场景;2.希望在对象之外保存状态,且除了自己其他类对象无法访问状态保存具体内容.优点1.简化发起人实体类(Originator)职责,隔离状态存储与获取,实现了信息的封装,客户端原创 2020-09-28 14:38:42 · 115 阅读 · 0 评论 -
设计模式之状态模式
定义:状态模式(State Pattern)也称为状态机模式(State Machine Pattern),是允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类.属于行为型模式适用场景1.行为随状态改变而改变的场景2.一个操作中含有庞大的多分支结构,并且这些分支取决于对象的状态优点1.结构清晰:将状态独立为类,消除了冗余的if…else或switch…case语句,使代码更加简洁,提高系统可维护性2.将状态转换显示化:通常的对象内部都是使用数值类型来定义状态,状态的切换都是通原创 2020-09-28 10:59:44 · 126 阅读 · 0 评论 -
设计模式之命令模式
定义:命令模式(Command Pattern)是对命令的封装,每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作.命令模式解偶了请求方和接收方,请求方只需请求执行命令,不用关心命令是怎样被操作以及是否被执行...等.本质:解偶命令请求与处理属于行为型模式.适用场景1.现实语义中具备"命令"的操作(如命令菜单,shell命令);2.请求调用者和请求的接收者需要解偶,使得调用者和接收者不直接交互;3.需要抽象出等待执行的行为,比如撤销(Undo)操作和恢复(原创 2020-09-27 20:30:53 · 111 阅读 · 0 评论 -
设计模式之迭代器模式
定义:迭代器模式(Iterator Pattern)又称游标模式(Cursor Pattern),它提供一种顺序访问集合/容器对象元素的方法,而又无须暴露集合内部表示.本质:抽离集合对象迭代行为到迭代器中,提供一致访问接口.属于行为型设计模式适用场景1.访问一个集合对象的内容而无需暴露它的内部表示2.为遍历不同的集合结构提供一个统一的访问接口优点1.多态迭代:为不同的聚合结构提供一致的遍历接口,即一个迭代接口可以访问不同的聚集对象;2.简化集合对象接口:迭代器模式将集合对象本身应该提供的元素原创 2020-09-27 15:13:02 · 164 阅读 · 0 评论