![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 58
kzcming
好记性不如记下来时常翻看
展开
-
redis分布式锁实现与思考
分布式锁说明:在java中我们最常使用的加锁方式就是 synchronized关键字和各种 Lock锁,但是这种方式加的锁只能保证在单项目或者说同一个jvm中起作用.但是在现在的分布式环境下就不能很好的应对分布式环境的加锁需求,所以有了分布式锁分布式锁:分布式锁就是一种思想,指的是能在分布式环境中,在多个地方使用一个锁的时候,保证只能同时有一个持锁对象.一般是加锁的地方由常规的java的锁,变成 第三方组件或工具实现(比如:redis,memcached,基于数据库的实现,zookeeper 等等原创 2021-07-22 11:05:00 · 309 阅读 · 0 评论 -
synchronized 锁加的地方的说明
synchronize 锁加的地方的说明传统mvc 分层模式下,事务一般是加在service 服务层加锁地方不同:1. 加在controller 层:如果锁的代码的最终流程是数据入库,事务和数据库操作也能及时执行系统设置: springboot 架构,mysql 数据库,事务加在 service 层, 使用了mybatisPlus 框架2. 加在service 层:也能按照预想的来执行,但由于事务一般是加在service 层,可能会造成锁的代码确实是按预想的来执行,但是事务数据库原创 2021-06-08 10:37:02 · 1393 阅读 · 0 评论 -
java8 stream 流api
流api 之 filter 方法说明:用于过滤条件,collect 方法用于将过滤条件获得的流 输出到集合代码 Stream<T> filter(Predicate<? super T> predicate);代码分析: 进一步点击 Predicate 类,javadoc 说明该类表示一个谓语词,布尔值类型, 由此说明 filter 中的lambda 表达...原创 2021-05-10 11:15:13 · 147 阅读 · 0 评论 -
java concurrent 包之 ScheduledThreadPoolExecutor
java 自带定时任务的另一种实现使用示例://package com.ws.com.util;import java.util.concurrent.ScheduledThreadPoolExecutor;import java.util.concurrent.TimeUnit;/** * 定时执行 util */public class TimerUtil { ...原创 2019-12-09 15:33:20 · 573 阅读 · 0 评论 -
java中的正则使用
java 中的正则使用说明:在 java 中使用正则,主要是 java.util.regex.Pattern 和 java.util.regex.Matcher 这两个类相关常用的调用匹配正则的方法String#matches(arg1) // 可以看到内部也是调用的 Pattern#matches(arg1,arg2) 方法 public boolean matches(String regex) { return Pattern.matches(regex, this)原创 2021-03-31 17:27:48 · 486 阅读 · 0 评论 -
java 根据 KeyPairGenerator对象生成RSA密钥对,并进行测试
java 根据 KeyPairGenerator对象生成RSA密钥对,并进行测试说明:rsa 算法根据密钥长度, 每轮 加/解密 填充 允许的最大长度,也不相同,这个地方暂时还不知道是怎么计算出来的限制:由于上面的原因,这里暂时只支持 密钥长度为 1024 / 2048 位长度实现:根据 KeyPairGenerator 对象传入密钥长度,随机种子,生成rsa 密钥编码实现 package com.example.demo.util.encrypt;import org.apache.com原创 2021-03-25 12:02:48 · 6784 阅读 · 0 评论 -
java 时间字符串中带 “AM“ 或 “PM“ 等指示上半天,下半天标识的解析
java 时间字符串中带 “AM” 或 “PM” 等指示上半天,下半天标识的解析AM/PM 解析时,必须切换为 英语环境 /** * 时间带 AM/PM 标识 */ public void testDate() { String date1 = "2/23/2021 10:01:24 AM";// DateTimeFormatter settleTimeFormatter = DateTimeFormatter.ofPattern("M/d转载 2021-03-23 15:22:46 · 1246 阅读 · 0 评论 -
多线程下 ArrayList 出现null的问题
多线程下 ArrayList 出现null的问题发现这个问题在某个项目中使用了ArrayList 了,将他带入到 子线程中去添加待定值,然后出现了意向不到的错误,报空指针异常,出现一个 null 值,而且该问题不必现,有时候经常跑代码才出现几次.排查反复查看代码,未发现明显可能会出现 null 的地方,返回的值(上文中的添加待定值)在其他方法中都不为null在代码中插入打印代码判断为null的情形,进行打印,加断点,分析,发现 在对添加待定值 进行为null 判断时不起作用,而 在对list原创 2021-02-19 17:02:58 · 2866 阅读 · 0 评论 -
Java时间转换,日期格式化使用 YYYY-MM-dd 的潜在问题
日期格式化使用 YYYY-MM-dd 的潜在问题测试逻辑:创建两个日期格式化,一个是出问题的YYYY-MM-dd,另一个是正确用法yyyy-MM-dd分别去格式化两个不同的日期:2020年12月26日(周六),2020年12月27日(周日)代码如下@Test public void dateTest() { // 指定了两个时区 // 通过指定具体的 年月日时分秒 构建 一个 LocalDateTime 对象(无时区), 绑定 到 北京时区,转为原创 2021-01-25 17:05:45 · 1940 阅读 · 2 评论 -
使用 mybatisPlus 的 dynamic datasource 配置多数据源中的问题
使用 mybatisPlus 的 dynamic datasource 配置多数据源中的问题环境环境配置参考官方文档: https://github.com/baomidou/dynamic-datasource-spring-boot-starter问题既然是想使用多数据源,问题就是按照配置最后没有使用动态切换数据源需要注意的地方一定要在配置文件中,排除自定义的数据源创建(javax.sql.DataSource)- 例如:我使用的druid 的数据库连接池,则这里要排除他原来的创建的原创 2020-12-09 14:24:34 · 1828 阅读 · 0 评论 -
java 连接 rabbitMq,并处理数据的例子
从我得另外一篇文章中摘抄出来: https://mp.csdn.net/postedit/103457479rabbitMq jar版本: amqp-client-5.7.3.jar例子:说明一个rabbitmq 的例子,由于涉及隐私,某些数据已经脱敏,仅供展示连接工厂,创建连接package mq.util;import com.rabbitmq.client.Chan...原创 2020-01-14 10:25:31 · 1272 阅读 · 0 评论 -
动态生成google 身份验证码(口令)
依赖<!-- 谷歌验证码 --> <dependency> <groupId>com.warrenstrange</groupId> <artifactId>googleauth</artifactId> <version>1.2.0</version> </dep...原创 2020-01-08 15:00:26 · 5877 阅读 · 0 评论 -
java 对json的处理,主流json jar 包转换方式
主流Java json 库的实现分析: https://blog.csdn.net/u013063153/article/details/731636241.fastjson主要处理对象是JSON,通过JSON.toJSONString(obj) 来将数据转为json 格式,通过 JSON.parseObject 将数据转换为所需格式其他类型转为json 类型的StringSt...原创 2018-09-07 11:17:38 · 3016 阅读 · 0 评论 -
SpringMVC 注解(五) @ControllerAdvice,@ExceptionHandler 异常处理
SpringMVC 注解(五) @ControllerAdvice,@ExceptionHandler1. ExectionHandler@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ExceptionHandler { /** * Exc...原创 2018-12-08 15:38:35 · 634 阅读 · 0 评论 -
多线程实现ftp 文件下载
1 需求:某个接口的纪录在ftp 服务器上,以类别/日期/时间.来存放文件,而一天可能会产生几百个文件,需要下载文件进行保存问题:1. 这个时候如果同时,要拿几个类别,某个时间段的数据,就要疯狂下载了,如果是单线程的2. ftp 一般只允许同一个用户名,同时有几个进程连接3. ftp 多个读取文件循环读取的时候,经常会出现,第一个文件得到字节流,而后面的文件的字节流都是null...原创 2018-11-27 09:39:29 · 11678 阅读 · 0 评论 -
Spring 一个接口多个实现,如何根据外部条件来实时替换具体实现类
代码:<T> Map<String, T> getBeansOfType(Class<T> var1) throws BeansException;作用:1. 传入一个接口的Class 类型,获取这个class 的所有具体实现,不包括抽象类2. 还可以将 applicationContext 单独设置一个值,写成一个工具类,结合Applicat...原创 2018-11-26 17:43:13 · 4953 阅读 · 2 评论 -
Spring @Primary 注解,指定主要实现
作用:Spring @Primary 注解,指定主要实现,一个接口有多个实现时,只引入接口时,可以spring 可以直接引入@Primary 注解的实现举例: 这样尽管一个接口有多个实现,只要其中一个service 上注解了@Primary 注解,这样在其他类中@Autowire 引入这个接口时,spring 会自动引入注解了@Primary 注解的实现@Primary 的代码Sp...原创 2018-11-26 09:51:37 · 1566 阅读 · 2 评论 -
java spi 机制
参考:https://www.cnblogs.com/huzi007/p/6679215.html参考:https://www.cnblogs.com/lovesqcc/p/5229353.html参考:https://blog.csdn.net/a718515028/article/details/72457436java spi 机制 介绍:SPI 全称为 (Service P...转载 2018-11-22 10:24:56 · 109 阅读 · 0 评论 -
Spring @Qualifier 注解,一个service 接口,有多个实现时,如何在controller 只引入service 接口,进而实现引入具体bean
参考: https://blog.csdn.net/mazuyu408/article/details/79629846@Qualifier 作用在只引入service 接口的情况下在,指示spring 引入value 为那个别名的具体service 实现类场景:假设有一个场景,一个service 接口定义了多个 实现类,而在controller 我只想引入 service 接口,...转载 2018-11-22 09:58:37 · 3988 阅读 · 0 评论 -
SpringMVC 注解(四) pathVariable,ResponseStatus
@pathVariable将uri模板中的参数映射到注解参数中,可以在设置动态请求映射@RequestMapping("path/{type}")//可以配置动态路径 pathVariable 会自动将路径中的值绑定到方法参数上 @ResponseBody public void testPathVaiavle(HttpServletRequest req,HttpServletR...原创 2018-09-07 11:09:26 · 253 阅读 · 0 评论 -
lombok 和 hibernate 配合对实体类注解
lombok的@Data注解,可以在编译过程中自动插入get/set ,有参构造,hash,toString 等方法但是这个类如果是表中的映射类,使用的hibernate的注解映射,怎么办,请看hibernate映射注解的实例,问题:可以看到hibernate注解实体类时,会在每个get方法上加 @Column注解,主键上还会加@GenericGenerator,@GeneratedV...原创 2018-09-20 10:19:25 · 1991 阅读 · 0 评论 -
java HashMap 原理
基于jdk 1.6 的HashMap都知道HashMap 内部结构是数组+链表,但是一般正常插入很少会出现链表,因为hash 不同,这里模拟一下hash 相同的情况参考: http://www.importnew.com/28263.html参考: https://blog.csdn.net/v123411739/article/details/78996181HashMap的wirt...转载 2018-09-08 14:16:37 · 312 阅读 · 0 评论 -
SpringMVC 注解(六) @InitBinder 注解
test springmvc 注解@InitBinder用法类型转换,将前台传递的String类型表示的其他类型参数进行转换(例如Date)参数用法:1.initBinder 注解的参数返回值必须时void2.注解的方法参数类型一般时WebDataBinder3.在requestMapping 注解的方法直接引入需要的类型而前台传递的是String类型需要解析的时候,就可以在外部添...转载 2018-12-10 09:54:11 · 332 阅读 · 0 评论 -
SpringMVC 注解(七) @ModelAttribute注解,设置model视图属性
SpringMVC @ModelAttribute注意的地方当类中定义了@ModelAttribute 注解的方法(定义在方法上),此时所以的@RequestMapping 定义的方法在执行前都会执行被@ModelAttribute定义的方法,如果此类对应多个视图,要谨慎使用,防止值混乱作用:1.在有@RequestMapping 注解的类中,可以注解方法的参数设置Model属性暴...转载 2018-12-10 14:39:22 · 408 阅读 · 0 评论 -
java jndi(命名和系统服务接口) 介绍
java JNDI 接口介绍参考: https://yangzb.iteye.com/blog/242560毕竟是古老的技术了,现在搜索百度只能看到一堆文字解释看的迷迷糊糊的找到一篇有实例介绍的,接解析看看...转载 2018-12-10 16:40:34 · 408 阅读 · 0 评论 -
java AES 加密,报javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decryp
java 使用AES解密报这个异常,字面理解很容易,就是解密的字符串的数组必须是16的倍数javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher at com.sun.crypto.provider.CipherCore.doF...原创 2018-04-20 17:18:38 · 117092 阅读 · 10 评论 -
java常见的开源算法支持以及java默认支持的provider
参考: https://blog.csdn.net/wangshfa/article/details/9102359 java6支持了很多的加密算法,各大机构提供了很多的实现。但是大部分收费。1、这里Bouncy Castle(http://www.bouncycastle.org)提供了一系列的算法实现,可以跻身于JCE的框架下,以提供者的方式纳入java安全实现的开源项目。2、comm...转载 2019-07-22 19:39:22 · 427 阅读 · 0 评论 -
jenkins 配置 springmvc 项目(非maven) 使用ant 打包
jenkins 配置:参考: https://www.cnblogs.com/Zfc-Cjk/p/9043076.html参考: https://www.cnblogs.com/lidong94/p/7427923.html参考: https://blog.csdn.net/Qizonghui/article/details/80657206参考:https://blog.c...转载 2019-07-12 09:54:10 · 1058 阅读 · 0 评论 -
url encode 的时候出现 ¬
url encode 的时候出现 ¬因为url中的参数¬ifyUrl中的¬转换成了¬字符解决方法:将代码中的 & 换成 &, 或者在在后端向前端传的时候,先encode 一下,在前台在处理就不会有问题参考: https://blog.csdn.net/wszxs1990/article/details/62883614参考: htt...转载 2019-07-09 16:41:43 · 416 阅读 · 0 评论 -
Jenkis 自动部署 在windows 下的实验
1 安装及初始化:首先去官网下载 ,我选择的是war包,然后直接将war包放到tomcat 下启动运行即可(也可以直接启动war包,内含jetty 插件也可单独启动,java -jar jenkins.war --httpPort=8080 ),根据提示复制口令,新建账户2. 配置第一个项目选择左上角的 新建item - > 输入任务名称,选择 FreeStyle Project...原创 2019-07-08 15:27:42 · 206 阅读 · 0 评论 -
Thymeleaf模版页面内嵌JS不能使用For循环问题, 报错org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符
Thymeleaf模版页面内嵌JS不能使用For循环问题, 报错org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符不仅仅是for 循环,while 循环等等也会报错参考: https://blog.csdn.net/xionghui2007/article/details/78760464多次尝试找到的解决方法:需要在for循环语句前后添加...转载 2019-07-08 14:47:45 · 478 阅读 · 1 评论 -
mysql 保存微信特殊昵称报错,报非法字符异常
解释:这些字符发现都是 emoji 表情在各个编程语言种对应的编码也不相同原因和办法:特殊字符一个字符有可能是一个符号由4个字节组成,但UTF-8 一个字符由3个字节组成,所有会报错1. 在数据库中将该列的字符该为utf8mb4,2. 存的时候,Base64 转化一下,取得时候再解密一下附带代码:由于前端需要 unicode 编码格式的,所有这里提供一下unicode ...转载 2019-06-10 15:01:51 · 1871 阅读 · 2 评论 -
TreeSet 在实现Comparator 接口实现compare方法是需要注意的地方
我们都知道Set 无序且去重的,但是在给TreeMap 实现compare 方法后发现,在add 元素时,有些正常的元素,没放入集合,例如这样写 Set<String> noEqu = new TreeSet<>(new Comparator<String>() { @Override public int ...原创 2019-01-16 17:03:02 · 1046 阅读 · 8 评论 -
SSH 项目报错: java.lang.NoClassDefFoundError: javax/transaction/SystemException
报错: java.lang.NoClassDefFoundError: javax/transaction/SystemException项目缺失 jta的jar包参考: ttps://blog.csdn.net/u014663563/article/details/50426978下载地址: http://www.java2s.com/Code/Jar/j/Downloadjta11...转载 2019-07-16 15:45:42 · 1672 阅读 · 0 评论 -
java 读取jar包中的文件
参考: https://blog.csdn.net/rchm8519/article/details/39557499参考: https://www.cnblogs.com/zeciiii/p/4178824.html 需求:我自己写了一个Java 的记事本工具,然后实现快捷键功能,于是就把快捷键对应的key-value 保存到properties文件中,类似:Ctrl,S=\...转载 2018-09-07 11:07:56 · 3809 阅读 · 0 评论 -
java.securtiy KeyGenerator对象详解
KeyGenerator对象介绍:keyGenerator对象位于javax.crypto包下jdk 1.6 doc介绍:KeyGenerator 此类提供(对称加密算法:AES,DES 等等)密钥生成器的功能获得keyGenerator:一般是通过此类的静态方法getInstance()方法获得,此类的全局变量都为私有变量,因此不讨论方法:getAlgorithm();获得算法名称getInst...翻译 2018-04-26 16:35:08 · 24502 阅读 · 1 评论 -
java.securityt SecureRandom类详解
SecureRandom类介绍jdk 1.6 doc介绍:此类提供强加密生成器(RNG)强加密:根据rfc 1750 描述:任何传递给secureRandom对象的种子材料必须是不可预知的,所有SecureRandom对象输出的输出序列必须是强加密的对象获取:可通过无参构造或getInstance()方法获得对象方法:generateSeed(int size);返回给定的种子字节数量getAlg...翻译 2018-04-26 17:17:07 · 7380 阅读 · 0 评论 -
java.security KeyFactory类详解
KeyFactor介绍:java 1.6doc介绍:密钥工厂用于将密钥(key类型的不透明密钥)转换成密钥规范(底层密钥密钥材料的透明表示),反之亦然,密钥工厂是双向的,对于同一个密钥可以存在多个兼容的密钥规范获得对象:一般通过静态方法getInstance()获得方法:generatePrivate(keySpec) ;根据给定的密钥材料生产私钥对象generatePublic(keySpec)...翻译 2018-04-26 18:09:12 · 12396 阅读 · 0 评论 -
java rsa 解密 报:javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes
Exception in thread "main" javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:344) at com.sun.crypto.provi...原创 2018-04-27 16:46:09 · 12796 阅读 · 3 评论 -
java rsa 解密报:javax.crypto.BadPaddingException: Decryption error
Exception in thread "main" javax.crypto.BadPaddingException: Decryption error at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:380) at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:29...原创 2018-04-27 16:41:20 · 97012 阅读 · 14 评论