java开发
文章平均质量分 85
深寒色的猫丶
守正出奇,心底有光,不舍昼夜 - 袁杰
展开
-
Soul 网关探索(一)基本介绍 & 环境配置
背景:自从上次立了一个flag(以后要如何更好地输出博客)后,到今天居然快整整一年没写过博客了!这flag实在威力太大…[捂脸]2020年我们经历了新冠病毒这个黑天鹅事件,我也离开了呆了两年半的前东家,跳槽到了一家我还比较满意的互联网公司,对自己的职业生涯规划有了新的思考,同时也更深刻认识到了自己的不足,需要我去弥补追赶的还有好多好多…(针对这个我有空可以写一篇博客分享 ~)作为曾经萌生过转产品念头的佛系技术人,我越发坚定了在技术道路上继续探索下去的决心,从今天开始我准备重操旧业,开始输出博客!最近在原创 2021-01-15 02:46:19 · 1840 阅读 · 5 评论 -
http升级为https全过程(通过nginx安装SSL证书)
背景:之前项目都是为集团内部提供服务的,很多接口都是内网访问,网络安全方面考虑不多。但是随着业务发展,可能要对外提供互联网服务了,一些安全方面的因素也要逐步考虑计划。这次,就从最基本的域名安装SSL证书开始,将http协议升级为https协议。文章目录一、购买申请SSL证书二、通过nginx配置SSL证书三、将以前的http请求重定向到https四、要考虑的还有很多一、购买申请SSL证...原创 2019-11-08 01:37:35 · 7577 阅读 · 0 评论 -
多项目写入同一Logback日志文件导致的滚动混乱问题(修改Logback源码)
背景:最近打算将主要几个项目配置负载均衡策略,由于当前业务用户不多,不存在并发流量问题,我们目的只是为了实现不停机部署以及进程级别的故障转移而已。通过Jenkins动态传入端口选项参数,启动多实例项目,配合nginx的upstream策略将对应域名请求分发到不同端口。当然,首先我们得考虑项目中的服务状态以及资源共享问题,确保多实例部署不会对业务流程造成影响。这些操作配置不难,重点还是在于要充...原创 2019-11-01 01:28:42 · 8358 阅读 · 3 评论 -
springboot项目整合swagger全过程
背景:最近进行项目优化,增添swagger功能方便接口测试!一、swagger简介Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。作用:接口的文档在线自动生成。功能测试。Swagger...原创 2018-09-19 01:06:34 · 3625 阅读 · 1 评论 -
Eureka界面EMERGENCY提示背后的保护机制
背景:SpringCloud Eureka 投入使用很久了,server界面一直有红色提示:EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEI...原创 2018-09-23 23:53:58 · 2289 阅读 · 1 评论 -
CAS原理 基础篇(漫画版)
背景:最近研究并发编程,发现CAS操作贯穿其中,必须好好理解才行!特地找到一篇讲解原理很有意思的文章,转载记录下~注:本文转自 程序员小灰 微信公众号~一、CAS基础篇示例程序: 启动两个线程,每个线程中让静态变量count循环累加100次。最终输出的count结果是什么呢?一定会是200吗?加了同步锁之后,count自增的操作变成了原子性操作,...转载 2018-12-04 20:29:09 · 591 阅读 · 0 评论 -
CAS原理 进阶篇(漫画版)
背景:最近研究并发编程,发现CAS操作贯穿其中,必须好好理解才行!特地找到一篇讲解原理很有意思的文章,转载记录下~注:本文转自 程序员小灰 微信公众号~基础篇地址:https://blog.csdn.net/Abysscarry/article/details/84798224CAS进阶篇这一期我们来深入介绍之前遗留的两个问题:1.Java当中CAS的底层实现2.CAS的ABA问题...转载 2018-12-04 20:43:12 · 654 阅读 · 0 评论 -
《深入理解java虚拟机》volatile代码案例的一个bug?
背景:最近在读周志明的《深入理解 java虚拟机》第二版,发现第367页的 volatile演示例子(代码清单 12-1)无法运行出相应结果,在此记录下原因及解决办法 ~注:代码运行环境为 win64 - jdk1.8 - IntelliJ IDEA书中代码如下:import java.util.Map;/** * @Author: yuanj * @Date: 2018/11/...原创 2018-11-28 00:29:33 · 829 阅读 · 3 评论 -
测试volatile变量和普通变量区别
背景:volatile变量在多线程环境中经常使用,我们利用其线程可见性和禁止指令重排的特性,实现比synchronized更轻量级的变量同步共享;虽然我们经常使用或看见volatile关键字,但是 很多人却不一定测试过加volatile和不加到底有什么区别! 在此我们测试经典应用场景下volatile关键字具体会产生什么影响!环境:win10 - jdk1.8测试过程:1.前言J...原创 2018-12-14 00:26:59 · 2638 阅读 · 1 评论 -
SpringBoot自定义配置Redis连接需要注意的地方(结合JedisConnectionFactory源码)
背景:今天测试redis自定义配置时出现了连接空指针的问题,并且同样代码在不同版本下表现不同,让我们来结合源码详细分析下问题所在。一、问题起因起初我们SpringBoot使用的是1.5.9版本,在自定义RedisTemplate各种参数配置时出现了问题: @Bean(name = "foreRedisTemplate") public RedisTemplate getForeR...原创 2019-02-17 03:27:11 · 14243 阅读 · 3 评论 -
SpringBoot项目中Redis配置多数据库
背景:一个小需求,单Redis服务实例下根据业务配置多个数据库,需要自定义Redis配置稍作改动才能实现,此时就不能RedisTemplate一步就位了~注: Redis使用 单线程-多路复用 IO模型 ,别把多业务的并发全加在一个redis实例上,最好多实例或者集群处理!基本的配置我就不多说了,可以参考我之前的博客:SpringBoot 整合 Redis 使用详解直接上步骤:在 ap...原创 2019-02-17 03:46:03 · 12828 阅读 · 6 评论 -
Arrays.copyOf() 是深克隆还是浅克隆(jdk1.8)
背景:我们在看JDK源码时经常看到数组复制方法,如 Arrays.copyOf() 或 System.arraycopy(),今天我们研究下数组复制到底是浅克隆还是深克隆?一、源码public static <T> T[] copyOf(T[] original, int newLength) { return (T[]) copyOf(original, newLen...原创 2019-03-19 00:30:58 · 4410 阅读 · 2 评论 -
Java内部类相关注意点
背景:无论是看分布式、多线程相关源码,还是 Java编写 Spark、Flink相关大数据框架代码,都会遇到各种各样的内部类,今天复习下内部类相关注意点吧 ~一、分类静态内部类:定义在类内部的静态类成员内部类:定义在类内部的非静态类局部内部类:定义在方法中的类匿名内部类:继承一个父类或者实现一个接口,没有class关键字,直接使用new来生成一个对象的引用二、注意点汇总1.对于...原创 2019-03-26 22:57:25 · 387 阅读 · 0 评论 -
微信公众号开发基本流程
背景:过年前后做了个微信公众号项目,已经过去一段时间了,抽空回忆总结下基本流程吧,不然很快估计自己就忘了。。微信公众平台官网:https://mp.weixin.qq.com文章目录一、注册公众号二、了解公众号管理页面三、必备开发者工具的使用1.开发者文档2.在线接口调试工具3.web开发者工具4.公众平台测试账号四、细读开发者文档五、开发流程重点解析1.开发环境准备2.服务器基本配置3....原创 2019-04-07 16:46:18 · 146488 阅读 · 44 评论 -
公众号开发需要注意的几个小问题
背景:上一篇博客回忆了下公众号开发的基本流程,这篇博客记录下遇到的几个小问题吧。ps:实际开发当然不止这点问题。。1.通过code获取openid时报错{"errcode":40163,"errmsg":"code been used, hints: [ req_id: WiCbHFyFe-A5w7CA ]"}经检测,发现code只能用一次,获取之后直接将其作为参数调用获取openid...原创 2019-04-07 16:57:02 · 1711 阅读 · 0 评论 -
金额操作中的并发事务问题
背景:关于金额操作的并发事务如何处理是个经典问题,相信很多人都会遇到类似的需求,这里讨论下如何解决此类需求 ~一、需求一个用户查询请求过来,首先需要数据库查询用户余额是否足够,如果不足则返回余额不足,如果足够则调用第三方接口查询(预计花费2s),如果第三方接口返回true则正常扣费,update用户余额,如果第三方接口返回false或者代码发生异常,则本次查询不扣费。伪代码如下:pub...原创 2019-04-10 00:22:42 · 3959 阅读 · 0 评论 -
HttpURLConnection读取全局异常拦截器所返回响应体的一个注意点
背景: 服务端项目中通过全局异常拦截器进行异常处理,但进行单元测试发现用java原生HttpURLConnection方法访问服务端时,无法读取到处理异常后的响应体中的内容,直接报错!在此记录下解决方案!一、错误场景还原先看看发生报错时的代码如何写的:抛出自定义错误的代码:try { service = (MoerService) SpringContextHol...原创 2018-09-13 00:14:32 · 4401 阅读 · 2 评论 -
分布式架构系统生成全局唯一序列号的一些思路对比
背景: 分布式架构下,唯一序列号生成是我们在设计一个系统,尤其是数据库使用分库分表的时候常常会遇见的问题。当分成若干个sharding表后,如何能够快速拿到一个唯一序列号,是经常遇到的问题。在此整理记录下实现该需求的一些思路(参考多方资料)。1、需求全局唯一支持高并发能够体现一定属性高可靠,容错单点故障高性能2、业内方案可以看到网上生成ID的方法有...原创 2018-05-24 23:33:24 · 5399 阅读 · 1 评论 -
IDEA 2017 生成javadoc文件
话不多说,直接上步骤1.打开菜单栏 Tools -> Generate JavaDoc 2.点击上述菜单项后,会出现生成 JavaDoc 的对话框,一般的选项都很直观,不必细说。但是要注意生成 JavaDoc 的源代码对象的选择,一般以模块(Module)为主,必要时可以单独选择必要的 Java 源代码文件,不推荐以 Project 为 JavaDoc 生成的源范围。 3.里面有一转载 2018-01-22 17:54:23 · 2810 阅读 · 0 评论 -
Centos7 搭建Gitlab服务器并配置项目全过程
由于项目人员扩张,需要在服务器上搭建全新Gitlab服务器,完毕后在此记录全过程及遇到的问题。 注:我是在内网防火墙关闭状态下安装一、在Centos7上安装Gitlab之前尝试过直接yum安装,但服务器从该yum源下载实在太慢,故手动下载rpm包安装。1.先安装相关依赖yum -y install policycoreutils openssh-server openssh-...原创 2018-02-28 16:46:47 · 18416 阅读 · 4 评论 -
Springboot 项目整合 MyBatis Generator插件
注:本文参考文章 Spring boot Mybatis 整合(完整版)1、创建springboot项目 注意修改springboot项目版本,不要用2.0+版本以防莫名错误: 勾选上这4个依赖: 2、配置 application.yml 文件先将默认的 application.properties 文件名改为 application.yml 文...原创 2018-05-09 00:00:55 · 5679 阅读 · 3 评论 -
SpringBoot 使用 @Transactional 注解配置事务
SpringBoot项目中需要配置事务管理,所以在这里系统地整理下关于@Transactional 注解相关的知识!1、详细介绍事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。 编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代...原创 2018-05-04 00:09:39 · 30303 阅读 · 5 评论 -
SpringBoot项目的logback日志配置(包括打印mybatis的sql语句)
关于logback日志的详解见这位仁兄的博客:Spring Boot-日志配置(超详细) 我在这就开门见山直接介绍我们项目日志的配置使用吧!~1、基本介绍默认情况下,Spring Boot项目就会用Logback来记录日志,并用INFO级别输出到控制台。如下图: 实际开发中我们不需要直接添加logback日志依赖。 你会发现 spring-boot-starter 其中...原创 2018-05-04 16:09:21 · 50899 阅读 · 5 评论 -
Java串行、并行执行对比实验(使用Callable多线程)
背景: 直接上需求:在一个方法中查询多个数据库表的结果,然后汇总返回; 由于我们单独查询一个数据库表速度较慢(大字段查询),此时如果串行查询多个表的话效率会非常低,所以需要多线程同时查询数据库,等全部查询完毕后再汇总!注:项目为 springboot 项目,数据库我直接用公司业务库表名,模仿的话需要自定义数据库表1、测试项目基础结构搭建整体结构: pom.xml:...原创 2018-05-19 17:29:37 · 4751 阅读 · 0 评论 -
使用@ControllerAdvice + @ExceptionHandler 注解实现Controller层异常全局处理
背景: 分享下项目中使用的两个十分有效的注解,用于对Controller层异常实现全局统一处理,十分nice!1、前言对于与数据库相关的 Spring MVC 项目,我们通常会把事务配置在 Service层,当数据库操作失败时让 Service 层抛出运行时异常,Spring 事物管理器就会进行回滚。如此一来,我们的 Controller 层就不得不进行 try-catch Se...原创 2018-05-22 00:41:32 · 4388 阅读 · 1 评论 -
SpringBoot 整合 Redis 使用详解(StringRedisTemplate 和 RedisTemplate 对比分析)
背景: 最近项目采用前后端分离的架构,单点登录系统采用Redis存储用户session信息,在这里总结下springboot整合redis的详细过程,以及部分源码分析1、前期准备首先保证安装好redis,并开启远程访问权限(最好配置密码)pom.xml:添加依赖:<dependency> <groupId>org.springfra...原创 2018-06-03 15:56:45 · 35940 阅读 · 13 评论 -
SpringBoot中注入ApplicationContext对象的三种方式
在项目中,我们可能需要手动获取spring中的bean对象,这时就需要通过 ApplicationContext 去操作一波了!1、直接注入(Autowired)@Componentpublic class User { @Autowired private ApplicationContext applicationContext;}2、构造器方...原创 2018-05-29 00:30:34 · 41512 阅读 · 1 评论 -
前后端分离架构下的登录系统设计(v1)
背景: 最近项目的开发架构改为前后端分离模式; 前端采用vue框架npm编译后在tomcat独立部署,前后端完全通过http请求接口的方式进行交互,页面控制权交给前端,后端只提供页面所需数据而已! 由此带来的主要问题就是登录系统如何设计?以前项目都是通过Shiro框架内部控制cookie、session、登陆状态、页面权限等一系列资源,现在前端页面脱离后端项目后,我们要做出哪些改变呢?...原创 2018-06-12 23:58:21 · 13453 阅读 · 7 评论 -
logback多业务日志文件配置
背景: 一般业务并不复杂的项目,logback日志只需配置一种<logger>,即最高级<root>就行,但如果项目业务种类不止一个,且需要按类别打印日志进行数据分析的地方较多,一种logger当然远远不够!在此我们研究下如何进行多业务日志配置吧!一、logback配置文件在 resources 根目录下创建 logback.xml 文件,内容如下:&...原创 2018-06-25 23:25:32 · 4551 阅读 · 3 评论 -
40个Java多线程问题总结(转)
网上比较经典的多线程问题总结,在此转载记录下!1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓”知其然知其所以然”,”会用”只是”知其然”,”为什么用”才是”知其所以然”,只有达到”知其然知其所以然”的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法:(1)发挥多核CPU的优势随...转载 2018-06-19 16:47:30 · 372 阅读 · 0 评论 -
使用 StopWatch 统计任务时间
背景: 最近看springboot源码时发现springboot的任务计时是通过StopWatch来完成的,在此研究下该类的使用方法一、SpringBoot源码中的StopWatch 二、StopWatch用法我们按照以往传统的方法是这样给代码中的任务计时的:long start = System.currentTimeMillis();......long...原创 2018-06-20 00:04:30 · 2680 阅读 · 0 评论 -
根据关键字读取日志文件,按出现次数排序打印关键字(java实现)
背景: 公众号上偶尔看到一道阿里编程面试题,简单答一下哦 ~直接上代码:package test;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.util.*;/** * @Author: yuanj * @CreateDate: 20...原创 2018-07-02 23:00:28 · 4551 阅读 · 2 评论 -
Intellij idea 17 打包发布maven项目 全记录
网上关于idea打包的博客比较乱,总结靠谱的打包流程如下。一. 普通jar包1.打开项目File->Project Structure 2.3. 4. 5. 6. 7.打包后目录结构如下: 8.windows下测试jar包: 2.Maven War包1.注意:需要在pom.xml中注明打包方式为war 2.点击界面最右侧的选项:Maven Projects -> 双击package原创 2017-11-24 09:36:37 · 16143 阅读 · 0 评论