java
h_sn999
这个作者很懒,什么都没留下…
展开
-
java 计算时间差
public static void test(String endDate,String newDate) throws ParseException { long nd = 1000 * 24 * 60 * 60; long nh = 1000 * 60 *60; long nm = 1000 * 60; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");..原创 2021-06-18 14:25:11 · 132 阅读 · 0 评论 -
java 执行 shell
importjava.io.BufferedReader; importjava.io.InputStreamReader; publicclassRunShell{ publicstaticvoidmain(String[]args){ try{ Stringshpath="/home/felven/word2vec/demo-classes.sh"; Process...原创 2021-06-16 14:59:30 · 116 阅读 · 0 评论 -
SpringBoot集成Mybatis(零配置注解版)
Mybatis初期使用比较麻烦,需要各种配置文件、实体类、dao层映射关联、还有一大推其它配置。当然Mybatis也发现了这种弊端,初期开发了generator可以根据表结构自动生成实体类、配置文件和dao层代码,可以减轻一部分开发量;后期也进行了大量的优化可以使用注解了,自动管理dao层和配置文件等,发展到最顶端就是今天要讲的这种模式,mybatis-spring-boot-starter就是springboot+mybatis完全注解不用任何配置文件,就可以简单配置轻松上手。mybatis-spri转载 2020-06-27 16:24:30 · 482 阅读 · 0 评论 -
Sharding-JDBC:垂直拆分怎么做?
经过读写分离的优化后,小王可算是轻松了一段时间,读写分离具体的方案请查看这篇文章:Sharding-JDBC:查询量大如何优化?可是好景不长,业务发展是在太快了。数据库中的数据量猛增,由于所有表都在一个数据库中,导致服务器本地存储快满了。从上图我们可以看的出来,由于表的数量较多,每个表的数据量也较大,但是还没到水平拆分的地步。目前遇到的问题是服务器的存储不够了,短期内还不用水平拆分,那么方案呼之欲出了:垂直拆分。解释下什么是垂直拆分?我们都知道,一个数据库它是由N张表构成,每个表存储的数转载 2020-06-27 01:50:05 · 212 阅读 · 0 评论 -
深入理解Java双冒号(::)运算符的使用
Jdk8中有好多新的特性,比如引入Lambda,简化代码的书写等等我们先看一个关于Lambda的使用/*** 输出list*/@Testpublic void test() { String[] array = {"aaaa", "bbbb", "cccc"}; List<String> list = Arrays.asList(array); //Java 7 for(String s:list){ System.ou...转载 2020-06-02 17:27:12 · 441 阅读 · 0 评论 -
LineBasedFrameDecoder
LineBasedFrameDecoder 和LineEncoder采用的通信协议非常简单,即按照行进行分割,遇到一个换行符,则认为是一个完整的报文。在发送方,使用LineEncoder为数据添加换行符;在接受方,使用LineBasedFrameDecoder对换行符进行解码。1 LineBasedFrameDecoderLineBasedFrameDecoder采用的通信协议格式非常简单:使用换行符\n或者\r\n作为依据,遇到\n或者\r\n都认为是一条完整的消息。LineBasedFram原创 2020-06-02 11:25:19 · 1026 阅读 · 0 评论 -
LengthFieldBasedFrameDecoder/LengthFieldPrepender
大多数的协议(私有或者公有),协议头中会携带长度字段,用于标识消息体或者整包消息的长度,例如SMPP、HTTP协议等。由于基于长度解码需求 的通用性,Netty提供了LengthFieldBasedFrameDecoder/LengthFieldPrepender,自动屏蔽TCP底层的拆包和粘包问题,只需要传入正确的参数,即可轻松解决“读半包“问题。发送方使用LengthFieldPrepender给实际内容Content进行编码添加报文头Length字段,接受方使用LengthFieldBasedFr转载 2020-06-02 11:21:14 · 936 阅读 · 0 评论 -
数据结构之Redis-跳表(zset)
数据结构之Redis-跳表 在前面说Redis的文章里,提到了Redis的有序集合zset底层是依赖跳表实现的,当时没有展开讨论,内心认为还是需要一个专门的篇幅来介绍它。 先想一想为什么有序集合需要用跳表实现?回忆一下有序集合的几个关键词:是SortedSet和HashMap的结合;value具有唯一性;多了一个score;支持范围查询,结构如下:zset.png下面我...转载 2020-05-03 16:36:52 · 611 阅读 · 0 评论 -
Redis缓存穿透、缓存雪崩、redis并发问题分析
把redis作为缓存使用已经是司空见惯,但是使用redis后也可能会碰到一系列的问题,尤其是数据量很大的时候,经典的几个问题如下:(一)缓存和数据库间数据一致性问题分布式环境下(单机就不用说了)非常容易出现缓存和数据库间的数据一致性问题,针对这一点的话,只能说,如果你的项目对缓存的要求是强一致性的,那么请不要使用缓存。我们只能采取合适的策略来降低缓存和数据库间数据不一致的概率,而无法保证两者...转载 2020-05-03 16:31:47 · 166 阅读 · 0 评论 -
AtomicReferenceFieldUpdater
一个基于反射的工具类,它能对指定类的指定的volatile引用字段进行原子更新。(注意这个字段不能是private的)通过调用AtomicReferenceFieldUpdater的静态方法newUpdater就能创建它的实例,该方法要接收三个参数: 包含该字段的对象的类 将被更新的对象的类 将被更新的字段的名称下面是例子:Java代码...原创 2020-02-29 15:41:39 · 279 阅读 · 0 评论 -
Java Scala 相互调用
Java语言的重要性自不必说,Scala运行在JVM上,运行时也会翻译成class字节码文件进行执行,所以两种语言本质上是同源的,互相之间的调用在编程时就显得很重要了。多两种语言都有所了解的兄弟来说,调用很简单,贴出代码,已做记录Scala代码/** * 伴生对象,与类共享名字,可以访问类的私有属性和方法 * 在object中一般可以为伴生类做一些初始化等操作 */obj...转载 2020-01-17 00:15:28 · 454 阅读 · 0 评论 -
logstash 条件判断语句
logstash 条件判断语句使用条件来决定filter和output处理特定的事件。logstash条件类似于编程语言。条件支持if、else if、else语句,可以嵌套。比较操作有:相等: ==, !=, <, >, <=, >=正则: =~(匹配正则), !~(不匹配正则)包含: in(包含), not in(不包含)布尔操作:and(与)...转载 2020-01-13 21:06:59 · 3402 阅读 · 0 评论 -
SpringBoot logback 的 MDC
Logback的设计目标就是审计、调试复杂的分布式应用。在分布式应用中,为了区分不同客户端的日志输出,往往为每个客户端实例化一个单独的logger。但是这样将导致大量日志的产生,而且增加了日志管理的负担。为此,Logback采用了更轻量级的技术,为一个客户端的每一个日志请求打上唯一识别的时间戳,而这是通过SLF4J的MDC实现的。为了给每个日志请求打上唯一识别的时间戳,必须利用请求的上下文...原创 2020-01-13 21:02:17 · 1023 阅读 · 1 评论 -
spring aop底层原理ProxyFactoryBean的具体使用过程--FactoryBean深入理解
实际的spring使用aop的过程,配置好ProxyFactoryBean,给ProxyFactoryBean设置一个bean id然后通过ac.getBean(bean id),就取得被ProxyFactoryBean代理的对象,不是ProxyFactoryBean因为这个bean id虽然代表ProxyFactoryBean对象,直接getBean获取的是ProxyFactoryBea...转载 2019-12-08 14:01:28 · 447 阅读 · 0 评论 -
动态注册Bean
1.获取ApplicationContext ,通过ApplicationContext 可以获取BeanFactory@Configurationpublic class MyConfig implements ApplicationContextAware { private static ApplicationContext applicationContext=null...原创 2019-12-08 13:09:38 · 143 阅读 · 0 评论 -
SpringCloud 自定义ribbon路由实现灰度发布
整合nacos(Euraka 类似)实现灰度发布在一般情况下,升级服务器端应用,需要将应用源码或程序包上传到服务器,然后停止掉老版本服务,再启动新版本。但是这种简单的发布方式存在两个问题,一方面,在新版本升级过程中,服务是暂时中断的,另一方面,如果新版本有BUG,升级失败,回滚起来也非常麻烦,容易造成更长时间的服务不可用。什么是灰度发布呢?要想了解这个问题就要先明白什么是灰度。灰度从字面意...原创 2019-12-03 20:34:41 · 2915 阅读 · 1 评论 -
cloud server ribbon 自定义策略配置
虽然ribbon默认为我们提供了多钟负载均衡策略,但有时候我们仍然需要自定义符合自身业务逻辑的规则使用配置文件的方式:我们只需要在配置文件中添加配置serviceId.ribbon.NFLoadBalancerRuleClassName=自定义的负载均衡策略类其中 serviceId 为具体服务名这样在调用对应服务时候,就会使用我们自定义的负载策略,很方便对于该配置...转载 2019-12-01 14:22:57 · 191 阅读 · 0 评论 -
【SpringCloud】Ribbon如何自定义客户端配置和全局配置
起因事情的起因是这样的,公司内部要实现基于Zuul网关的灰度路由,在上线时进行灰度测试,故需要配置业务微服务向Eureka注册的metadata元数据,和自定义Ribbon的负载规则达到只访问灰度服务的目的。这样就需要自定义Ribbon的IRule,实现灰度请求只会负载到带有灰度标签元数据的业务微服务上,当自定义IRule规则开发好后,问题是如何将这个IRule规则配置给某个Ribbon Cl...转载 2019-12-01 12:35:19 · 387 阅读 · 0 评论 -
nacos 使用简介
什么是 Nacos? 服务发现和服务健康监测 Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO或HTTP&API查找和发现服务。 Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持...原创 2019-11-27 22:59:51 · 668 阅读 · 0 评论 -
spring cloud-zuul的Filter详解
在前面我们使用zuul搭建了网关http://blog.csdn.net/liuchuanhong1/article/details/59056278关于网关的作用,这里就不再次赘述了,我们今天的重点是zuul的Filter。通过Filter,我们可以实现安全控制,比如,只有请求参数中有用户名和密码的客户端才能访问服务端的资源。那么如何来实现Filter了?要想实现Filter,需要以下几...转载 2019-11-26 22:50:35 · 163 阅读 · 0 评论 -
springcloud 自定义元数据
如果你的注册中心是基于eureka# Eureka config for discoveryeureka.instance.metadataMap.group=a-service-groupeureka.instance.metadataMap.version=1.0eureka.instance.metadataMap.region=deveureka: instance:...原创 2019-11-24 23:40:12 · 3100 阅读 · 2 评论 -
10个Spring&SpringBoot 高阶用法,相信你看完会有新的认识
10个Spring&SpringBoot 高阶用法,相信你看完会有新的认识目录10个Spring&SpringBoot 高阶用法,相信你看完会有新的认识 *1、获取Spring IOC容器(Aware) *2、动态注册bean信息(BeanFactoryPostProcessor) *3、动态修改bean信息(BeanFactoryPostProcesso...转载 2019-11-24 12:17:30 · 1571 阅读 · 0 评论 -
java 阻塞队列和非阻塞队列
1.阻塞队列和非阻塞队列的区别 阻塞队列可以阻塞,非阻塞队列不能阻塞,只能使用队列wait(),notify()进行队列消息传送。而阻塞队列当队列里面没有值时,会阻塞直到有值输入。输入也一样,当队列满的时候,会阻塞,直到队列不为空。2.阻塞队列 ArrayBlockingQueue:基于数组实现的一个阻塞队列,在创建ArrayBlockingQueue对象时...转载 2019-11-23 18:29:51 · 701 阅读 · 1 评论 -
后端架构师技术图谱
https://github.com/xingshaocheng/architect-awesome太完整了!推荐:《Java技术书籍大全》 - awesome-java-books从初级开发者到资深架构师,看这些书就够了数据结构队列 集合 链表、数组 字典、关联数组 栈 树 二叉树 完全二叉树 平衡二叉树 二叉查找树(BST) 红黑树 B,B...转载 2019-11-23 17:52:46 · 1533 阅读 · 0 评论 -
将pdf转换成一张大的图片
package com.dinpay.dpp.pmscorp.util;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.UUID;import javax.imageio.ImageIO;import org.apache.pdf...原创 2019-11-23 17:43:02 · 363 阅读 · 0 评论 -
SpringBoot 整合kafka
Pom.xml<dependencies> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </de...原创 2019-11-23 17:35:18 · 170 阅读 · 0 评论 -
SpringBoot 发送邮件功能
创建一个springboot工程,在其pom文件加入:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency>添加配...原创 2019-11-23 17:18:59 · 203 阅读 · 0 评论 -
SpringBoot整合国际化功能
*SpringBoot已经自动配置了管理国际化资源文件的组件(3)在配置文件中指定国际化资源文件的文件夹及基础文件1#指定国际化资源文件的文件夹及基础文件2spring.messages.basename=i18n/index添加国际化文件首先在配置文件 application.yml 填写国际化文件的相对路径,表示读取classpath:/static/i18n/m...转载 2019-11-21 23:06:27 · 440 阅读 · 0 评论 -
JAVA中ResourceBundle (读取国际化资源文件)使用详解
这个类主要用来解决国际化和本地化问题。国际化和本地化可不是两个概念,两者都是一起出现的。可以说,国际化的目的就是为了实现本地化。比如对于“取消”,中文中我们使用“取消”来表示,而英文中我们使用“cancel”。若我们的程序是面向国际的(这也是软件发展的一个趋势),那么使用的人群必然是多语言环境的,实现国际化就非常有必要。而ResourceBundle可以帮助我们轻松完成这个任务:当程序需要一个特定...转载 2019-11-21 22:36:27 · 878 阅读 · 0 评论 -
Spring Boot配置文件放在jar外部
springboot读取外部配置文件的方法,如下优先级:第一种是在执行命令的目录下建config文件夹。(在jar包的同一目录下建config文件夹,执行命令需要在jar包目录下才行),然后把配置文件放到这个文件夹下。第二种是直接把配置文件放到jar包的同级目录。第三种在classpath下建一个config文件夹,然后把配置文件放进去。第四种是在classpath下直接放配置文件。sp...原创 2019-11-21 22:34:14 · 174 阅读 · 0 评论 -
正则表达式简要示例
示例:/2[0-4]\d(?#200-249)|25[0-5](?#250-255)|1?\d\d?(?#0-199)/ 匹配0-255的整数字符: (?#comment)描述: comment是注释,不对正则表达示的处理产生任何影响参数:\num 对捕获组的反向引用。num是一个正整数示例: (\w)(\w)\2\1 匹配abba类型的数字,如2332 4334常用元字符. 匹...原创 2019-11-21 22:31:41 · 327 阅读 · 0 评论 -
Java 去除空格换行回车
public static String replaceBlank(String str) { String dest = ""; if (str!=null) { Pattern p = Pattern.compile("\\s*|\t|\r|\n"); Matcher m = p.matcher(str);...原创 2019-11-21 22:25:03 · 399 阅读 · 0 评论 -
springboot项目实现jar包外配置文件管理
背景为实现快速搭建和开发,项目以Springboot框架搭建,springboot搭建的项目可以将项目直接打成jar包并运行,无需自己安装配置Tomcat或者其他服务器,是一种方便快捷的部署方式。假设项目以最常规的方式打包成一个整体的jar包部署,即配置文件和第三方依赖包都包含在jar包里,就会有如下两个问题问题一:项目运行过程中,要改动配置文件的话需要重新打包并部署。问题二:多个...转载 2019-11-21 22:22:32 · 147 阅读 · 0 评论 -
SpringCloud微服务间参数的传递( threadLocal+Feign的RequestInterceptor方式)
我们在开发过程中,常有这样的需求,要将当前的微服务参数传递到下一个微服务,比如userId或者token之类,如果我们使用SpringCloud,把参数放到Header里就可以轻松实现了参数的传递。下面是一个利用Feign的RequestInterceptor实现的例子这里使用ThreadLocal来保持参数,这样在当前的环境中就可以随时使用了package app.gatew...原创 2019-11-19 22:07:01 · 5762 阅读 · 1 评论 -
Spring的@ExceptionHandler和@ControllerAdvice统一处理异常
前言之前敲代码的时候,避免不了各种try…catch, 如果业务复杂一点, 就会发现全都是try…catchtry{ ..........}catch(Exception1 e){ ..........}catch(Exception2 e){ ...........}catch(Exception3 e){ ...........}这样其实...转载 2019-11-17 15:55:55 · 470 阅读 · 0 评论 -
springboot hibernate validator 参数校验详解
数据校验是任何一个应用程序都会用到的功能,无论是显示层还是持久层. 通常,相同的校验逻辑会分散在各个层中, 这样,不仅浪费了时间还会导致错误的发生(译注: 重复代码). 为了避免重复, 开发人员经常会把这些校验逻辑直接写在领域模型里面, 但是这样又把领域模型代码和校验代码混杂在了一起, 而这些校验逻辑更应该是描述领域模型的元数据.JSR 303 - Bean Validation...原创 2019-11-17 15:45:40 · 861 阅读 · 0 评论 -
OVAL验证框架帮助文档
java开源验证框架oval,功能非常强大,使用简单;现在整理帮助文档供大家参考,希望能得到更多的反馈和使用经验。1.注解说明1.1、@AssertCheck if evaluating the expression in thespecified expression language returns true.检查指定语言的表达式返回值是否为true;这里表达式是groo...转载 2019-11-16 23:49:39 · 969 阅读 · 0 评论 -
Elasticsearch 如何处理 word pdf ?(Ingest Attachment Processor Plugin)
本文主要介绍如何使用ES插件将word/pdf等文档导入ES中以及如何使用JAVA API操作写入读取信息Ingest Attachment Processor Plugin插件允许Elasticsearch通过使用Apache文本提取库Tika提取通用格式(例如PPT,XLS和PDF)的文件附件。源字段必须是base64编码的二进制。如果不想增加在base64之间来回转换的开销,则...原创 2019-11-16 22:33:02 · 2784 阅读 · 3 评论 -
Elasticsearch 7 如何解决ES5/6中的type映射问题
自定义类型字段当然,一个集群中可以存在多少个主要分片是有限制的,因此您可能不希望浪费整个分片来仅收集几千个文档。在这种情况下,您可以实现自己的自定义type字段,该字段的工作方式与旧的类似_type。让我们以上面的user/tweet为例。最初,工作流看起来像这样:PUT twitter{ "mappings": { "user": { "proper...转载 2019-11-06 23:03:44 · 1044 阅读 · 0 评论 -
Elasticsearch路由机制介绍
Elasticsearch路由机制介绍Elasticsearch的路由机制与其分片机制有着直接的关系。Elasticsearch的路由机制即是通过哈希算法,将具有相同哈希值的文档放置到同一个主分片中。这个和通过哈希算法来进行负载均衡几乎是一样的。而Elasticsearch也有一个默认的路由算法:它会将文档的ID值作为依据将其哈希到相应的主分片上,这种算法基本上会保持所有数据在所有分片上的...转载 2019-11-03 14:46:57 · 176 阅读 · 0 评论