Java编程
文章平均质量分 50
喜码拉雅
追求卓越,成功自然到来。
展开
-
灰度上线实践之zuul网关流量分配
最近手头的项目进行了重构,改动比较大,直接上线的话风险较大,于是我采用了灰度上线的方式来将风险最小化。我们系统包括自己的门户页面,也作为中台来给各个业务方调用,我们灰度上线的话,要兼容各个业务系统。业务系统调用我们接口是前缀是特殊的,可以和我们的门户调用区分开,且业务系统调用所有接口都是有签名的,每个接口的参数格式都是一样的,会含有每个业务系统的appId之前流量是经过nginx直接打到我们的服务商,这次在nginx和我们系统之间添加了网关,作为我们灰度的核心--流量控制关于zuul网关可以原创 2021-04-26 22:07:42 · 990 阅读 · 0 评论 -
服务端自我保护之超时处理
该文章适用于比较重的操作的服务端开发人员。我们经常会遇到远程调用超时的情况,一般这种情况客户端会有一个超时时间,超过该时间,那客户端抛异常,客户端可以进行重试等操作,那此时此刻,服务端呢?最近遇到了一个线上问题,我的一个服务是文件处理,所有的接口都会进行文件转换相关的操作(word转pdf、word转html等操作),文件操作是比较重的操作,遇到比较大的文件,服务可能要处理很长很长时间。某用户上传了一个不算大的excel文件,只有437.64KB,但是这个文件有一百多万行,这个文件请求到服务端,服务原创 2021-04-25 20:42:12 · 793 阅读 · 1 评论 -
Spring Boot 项目启动时初始化资源
在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等。今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作。这个神器就是CommandLineRunner,CommandLineRunner接口的Component会在所有Spring Beans都初始化之后,SpringApplic...转载 2019-09-27 14:13:14 · 189 阅读 · 0 评论 -
java stream排序
1. 排序apples.stream().sorted(Comparator.comparing(Apple::getWeight))2. 逆序如果你想要对苹果按重量递减排序怎么办?用不着去建立另一个Comparator的实例。接口 有一个默认方法reversed可以使给定的比较器逆序。因此仍然用开始的那个比较器,只要修改 一下前一个例子就可以对苹果按重量递减排序:apples...原创 2019-04-23 17:28:25 · 3537 阅读 · 0 评论 -
java打印(调用驱动实现)
@Override public void print(byte[] file, int printNum, String printerName) { HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); pras.add(new Copies(printNum))...原创 2019-02-27 18:04:39 · 3661 阅读 · 3 评论 -
java POI合并两个word文档
有需要的可以将主函数中写死的地方改为一个List。import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import org.apache.poi.openxml4j.opc.OPCPackage;i...原创 2018-11-01 17:20:43 · 5127 阅读 · 1 评论 -
pdf及word右上角添加图片(Java实现)
以下代码,如有问题,请大家不吝指出,如有更优实现方案,欢迎一起讨论。最近在做一个需求:在pdf和word右上角添加一个二维码其中,pdf可以灵活实现二维码的位置,但是word由于我是在页眉处添加的图片,因此我的方法只能在页眉处添加图片。首先定义一个接口(先抛出Exception,还没优化)public interface DocAddQRCodeI { int QRCo...原创 2018-10-25 20:24:40 · 1815 阅读 · 6 评论 -
从BIO到NIO
我们知道,Java服务端编程,很重要的一块就是IO,而我们的Java IO,经历了由BIO到NIO再到AIO的过程。首先,我们来看一下什么是BIO:1.普通BIO我们刚开始学Java Socket的时候,可能都写过这么一段代码: ServerSocket serverSocket = new ServerSocket(8000); while (true){ ...原创 2018-09-17 18:03:49 · 150 阅读 · 0 评论 -
Java实现简易的缓存
之前看redis的书,书上罗列源码的时候我总是在想,redis为什么不用Java实现!!今天自己用Java写了一个简易的缓存,发现,redis不用Java实现可能是正确的:C语言可以自行回收内存,而Java不可以(我水平可能没达到,还没有自己回收过某个对象的内存),这样就导致了你的缓存中的对象有可能都过期了,你只是把这些过期对象的引用置空,但是什么时候回收这些内存,不是我们说了算的。好,废...原创 2018-09-01 09:03:30 · 361 阅读 · 0 评论 -
NIO学习笔记一之Buffer
参考:http://ifeve.com/buffers/有一些个人理解,大家辩证地看,有问题的地方,还请大家指出。Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。1.Buf...原创 2018-08-24 14:00:10 · 244 阅读 · 0 评论 -
序列化注意事项
参考《深入理解Java web 技术内幕》1.当父类实现Serializable接口时,所有子类都可以被序列化父类代码:import java.io.Serializable;public class SerialFather implements Serializable { private static final long serialVersionUID = -...原创 2018-08-17 14:35:31 · 333 阅读 · 0 评论 -
详细介绍Logger日志
参考:http://blog.csdn.net/fu_xl/article/details/73550345 浅谈Logger日志输出不同的日志文件 其实一直想动态生成路径和文件名称,但是log4j只能加载系统环境变量类似于${webapp.root}动态获取安装路径,框架首先加载配置文件创建文件路径和文件名称,通过手动控制等待代码设置环境变量后再加载可以实现动态生成文件名称,但是...转载 2018-03-15 10:15:03 · 676 阅读 · 0 评论 -
序列化之用序列化实现深复制
首先,我们先来bala一下深复制和浅复制。浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。深复制:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的...原创 2018-06-28 18:00:27 · 487 阅读 · 0 评论