自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hello World ^—^

Hello World

  • 博客(51)
  • 资源 (10)
  • 收藏
  • 关注

原创 使用dynamic-datasource-spring-boot-starter做多数据源及源码分析

多数据源系列1、spring boot2.0 +Mybatis + druid搭建一个最简单的多数据源2、利用Spring的AbstractRoutingDataSource做多数据源动态切换3、使用dynamic-datasource-spring-boot-starter做多数据源及源码分析文章目录多数据源系列简介实操基本使用集成druid连接池源码分析整体结构总结简介前两篇博客介绍了用基本的方式做多数据源,可以应对一般的情况,但是遇到一些复杂的情况,比如:动态增减数据源、数据源分组,纯粹多

2020-06-29 20:39:11 82945 27

原创 spring boot中使用Bean Validation做优雅的参数校验

文章目录Bean Validation简介Bean Validation作用基本使用常用注解作用于成员变量(Field-level constraints)嵌套对象校验继承对象校验作用于类上,自定义校验(Class-level constraints)使用全局异常处理实战自定义参数校验Bean Validation简介Bean Validation是Java定义的一套基于注解的数据校验规范,目前已经从JSR 303的1.0版本升级到JSR 349的1.1版本,再到JSR 380的2.0版本(2.0完成于

2020-06-16 21:12:28 8271 3

原创 HTTP缓存介绍及在spring boot中设置HTTP缓存

介绍在工作之余阅读缓存相关的书籍时,看到了http缓存相关的知识,HTTP 缓存机制是一个 web 性能优化的重要手段,无论是做前端还是做web后台,都可能会用得到它,应该是知识体系库中的一个基础环节,以前这一块学的不是很扎实,现在巩固巩固。HTTP缓存可以说是浏览器缓存的其中一种,浏览器缓存也包含很多内容: HTTP 缓存、indexDB、cookie、localstorage 等等。这里我...

2019-06-20 20:02:10 11110

原创 Quarkus云原生应用初体验

文章目录前言为什么要构建Native Image怎么解决?什么是云原生(Cloud Native)总结Quarkus前言上一篇:GraalVM学习笔记上一节简单介绍了GraalVM,提到了它的Native Image的构建,这一节将使用Quarkus框架来实战一个CRUD应用,并将其构建为Native Image来感受这技术的魅力为什么要构建Native Image小伙伴们可能遇到过这种场景,每次开发的接口刚上线的时候,可能会有一小部分请求超时,虽然大部分情况下不影响,但是看着心里还是有点不爽。。

2020-12-31 11:43:36 2571 5

原创 GraalVM学习笔记

文章目录前言介绍关于native image:关于跨语言运行原理:关于graal compiler:graalVM安装一:通过sdkman来安装graal(需要网络环境)二:手工安装(推荐)前言官网: https://www.graalvm.org/Github:https://github.com/oracle/graal我是在看《深入理解java虚拟机第三版》的时候了解到的graalVM,在书中的1.5 展望java技术的未来和11.5实战:深入理解Graal编译器有提到,感觉这玩意挺有意思的,

2020-12-28 19:00:01 4580 2

原创 CentOS7.3安装配置maven

构建项目经常用到maven,这里把maven环境配起来1、下载去这个地址下载:https://maven.apache.org/download.cgi下载一个最新版本 apache-maven-3.6.3-bin.tar.gztar –xzvf apache-maven-3.6.3-bin.tar.gz 解压2、配置然后修改conf的仓库为阿里云<mirrors> <mirror> <id>alimaven</id&

2020-12-27 17:44:33 260

原创 Java-Thread-Affinity框架使用及原理分析

文章目录前言简介实操实现原理windows下分析Linux下分析进程/线程亲和的思想很常见1、nginx上可以使用进程亲和2、Netty的eventLoop也可以使用线程亲和前言前一段时间在实现生产消费队列模型,参考了disruptor的等待策略,对比各种策略的区别,然后发现了BusySpinWaitStrategy忙等策略中注释写的一段话,It is best used when threads can be bound to specific CPU cores.当线程可以被绑定到特定的CPU核心时

2020-12-18 00:29:00 3734 2

原创 spring boot内嵌tomcat优雅的开启apr模式

文章目录简介Win下开启APRLinux下开启APR把lib打进jar包简介环境: jdk8、spring boot 2.3.4.RELEASE、centOS7.3、win7在spring boot启动的时候常常会看到这样的ERROR日志,说是本地的Tomcat Native library版本太低,这里就来解决这个问题2020-10-29 14:22:54.229 ERROR 11152 --- [ main] o.a.catalina.core.AprLifecycleLis

2020-10-29 18:07:41 5057

原创 使用国密(SM3WithSM2)对jwt进行签名

文章目录环境背景介绍国密系列简要介绍实操1、首先去git上把开源项目拉下来2、关于曲线参数修改3、生成证书4、引入pom5、签名验签思路6、编码7、单元测试环境jdk8、spring boot 2.3.4、java-jwt 3.11.0、bouncycastle 1.65背景介绍在多个系统之间,由于调用链长,使用了jwt token的方式鉴权,然后获取相应的资源,这里用到核心的一点就是jwt的防篡改特性。以往使用的签名算法大都是HS256(HMAC with SHA-256)、RS256(RSAS

2020-10-15 21:12:03 29482 4

原创 react通过fetch下载二进制图片并使用blob展示

环境说明前端框架: react 16.8.6、umi 3.2.20、antd-mobile 2.3.1后端框架: jdk1.8浏览器:chrome 85.0.4183.121需求:原有页面是展示一堆图片,这些图片从后台获取的,后台直接往outputStream输出图片的二进制数据,前端通过img标签的src属性来显示这些图片现在由于增加了鉴权功能,使用的jwt,往http header里面放jwt来鉴权的,然后就不能使用img的src来做了,现在前端请求使用的umi-request,配置了拦截器

2020-10-12 15:43:19 6273

原创 java中png转索引图压缩图片

文章目录背景png格式简介图片压缩实操使用OpenViewerFX使用pngquant(JNI调用)在linux下构建在win下构建JNI调用关于pngquant的jni动态链接库文件下载背景需求是大大的减小彩信图片的体积,可以发送更多数量的彩信图片,图片的内容是报表,颜色单一。最开始把透明色去掉了,位深从32->24,但是最近测试发现彩信图片体积还是太大了,这就需要去学习图片压缩的知识了png格式简介PNG格式有8位、24位、32位三种形式,其中8位PNG支持两种不同的透明形式(索引透明和a

2020-08-12 18:14:51 2247

原创 利用Spring的AbstractRoutingDataSource做多数据源动态切换

多数据源系列1、spring boot2.0 +Mybatis + druid搭建一个最简单的多数据源2、利用Spring的AbstractRoutingDataSource做多数据源动态切换3、使用dynamic-datasource-spring-boot-starter做多数据源及源码分析简介搭建多数据源有多种方式,上一篇博客介绍了一种最基本的方式搭建多数据源,就是把每个数据源配置了一个DataSource的Bean,这种方式显得比较繁琐,mapper也要放在不同的地方,这里介绍一种动态切换

2020-06-17 18:08:44 3798 1

原创 Ubuntu下编译JDK源码并使用clion断点debug

本地环境准备Ubuntu20.04、jdk8u262-b02、make4.2.1 、gcc 7.5.0、Clion2019.2开始之前试过在centOS7.3、win7下build,可能是环境的问题,在win7下无法debug进源码,想着也不是经常debug这玩意,就学习的时候用,那么就用Ubuntu虚拟机搞一个环境供学习用就可以了下载源码这次下载一个标准版,进入jdk8u仓库,下载版本jdk8u262-b02可以使用hg下载,当然我这里为了方便直接点击zip下载,网速慢的使用科学上网官方仓库

2020-05-25 11:20:46 1185 2

原创 mybatis打印的sql日志不写入到log文件问题解决

问题描述环境: java 1.8、spring boot 2.2.4、mybatis-spring-boot-starter 2.1.1在一次上线调bug中,想看看执行的sql语句,结果tail -100f这个日志文件发现sql语句没有输出到这个文件里面,然后在本地运行从console中又能看到有sql打印。问题分析第一时间想到会不会是logback配置不对<?xml versio...

2020-04-20 15:15:23 6817 4

原创 使用javacv给报表图片去白边并打包上线

环境java1.8.0_191、javacv1.5.2、opencv4.1.2、spring boot 1.5.10、centOS7.2 x64问题描述注意:前面是解决问题的一个过程描述,如果想看javacv、linux上线打包的重点部分就直接跳到最后的问题解决中第二种思路业务场景是将一些报表图片通过彩信发送到手机,因为是发送彩信,所以对每张图片的大小有很大的限制。这里是保存文本表格,它们...

2020-03-12 16:11:53 1585 1

原创 使用protostuff + redis做mybatis二级缓存

实操 &amp;amp;amp;amp;lt;dependency&amp;amp;amp;amp;gt; &amp;amp;amp;amp;lt;groupId&amp;amp;amp;amp;gt;redis.clients&amp;amp;amp;amp;lt;/groupId&amp;amp;amp;amp;gt; &amp;amp;amp;amp;lt;artifactId&amp;amp;amp;amp;gt;

2019-03-14 18:06:47 707

原创 git rebase -i合并多次提交

简介在日常开发中,代码变更比较频繁,有时候想让前几次提交的合并为一次提交,这里可以使用git rebase -i 命令来完成,当然,git rebase命令不仅仅用于合并提交,它还有许多用处,比如可以使用git rebase onto将某一段commit粘贴到另一个分支上等等,这里主要介绍合并提交。命令介绍rebase为变基git rebase -i 命令可以压缩合并多次提交格式:git...

2019-01-22 17:05:51 56272 5

原创 Git游离指针状态

问题描述:有次在idea中提交git发生了这样的情况,当初上一个操作之前还提示了stash changes的,然后就进入了游离指针状态在这里可以发现这里的git分支指向的不是当前任何分支游离状态 本质上是 本地的HEAD 指向了一个 未知的分支,HEAD不会指向任何分支,严谨的说是HEAD指向了一个没有分支名字的修订版本git checkout本质上是修改HEAD里面的内容来让它指向...

2019-01-10 18:07:18 1774

原创 idea中Field injection is not recommended提示

问题描述:在idea中,使用属性值注入会一个警告提示,一直冒着这个强迫症又犯了,可以在idea中取消这个提示但还是去学习学习了为什么会有这个提示通常依赖注入方式有三种constructor为了强制依赖,或者为了易变性,使用构造方法注入getter &amp; setter为了可选的或者可变的依赖,使用setter注入通过反射直接注入到fields@Autowired就是通过这种...

2019-01-10 17:51:33 14875

原创 使用applicationContextAware接口获取bean

问题描述:在quartz框架中的job接口,发现无法@Autowire注入mybatis的mapper,属性注入、构造器注入都不行,也不能@Value去spring boot的yml配置文件中取值后来通过实现ApplicationContextAware接口,拿到context,从而获取bean就行了,代码示例SpringUtil工具类import org.springframewor...

2019-01-10 17:44:39 1487

原创 An invalid domain [] was specified for this cookie问题解决

在tomcat8.0升级到8.5时会发生这样的问题java.lang.IllegalArgumentException: An invalid domain [.tencent.xxx.com] was specified for this cookie at org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateD...

2018-12-10 17:17:16 21250 5

原创 Java 诊断利器-Arthas的基本使用

简介Arthas 是阿里巴巴最近才开源出来的一款 Java 诊断利器,它主要是针对线上环境,能够帮助我们更好的定位问题。Case:https://github.com/alibaba/arthas/issues?q=label%3Auser-case官方文档: https://alibaba.github.io/arthas官方文档还是比较详细的,这里就挑几个觉得好用的来实操一下实操...

2018-11-20 18:16:13 5102

原创 spring boot2.0 +Mybatis + druid搭建一个最简单的多数据源

在大部分情况下,搭建单数据源就能够满足需求了,但是特殊情况下也需要使用多数据源,这里就写了一个demo搭建多数据源,注意这里没有使用AbstractRoutingDataSource 来实现动态切换实操文件结构先上pom,这里只截取了关键的依赖 &amp;lt;parent&amp;gt; &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;..

2018-11-16 17:50:47 3745 1

原创 使用jmeter向db2数据库批量插入测试数据

JMeter是Apache组织开发的基于Java的压力测试工具,现在来模拟线上环境,插入千万条数据来测试性能实操首先下载jmeterhttp://jmeter.apache.org/download_jmeter.cgi下载完成解压然后配置jmeter的环境变量最后在bin目录下的jmeter.bat打开jmeter添加一个线程组添加jar包到构建路径,jmeter由于使用...

2018-10-17 10:03:07 2311 1

转载 Java中的强引用、软引用、弱引用、虚引用

在读ThreadLocal源码的时候遇到了WeakReference,然后就仔细学习引用方面的知识,现在转载一篇博客。。一.了解 强引用、软引用、弱引用、虚引用的概念在Java中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了。从Java SE2开始...

2018-09-29 17:15:37 391

原创 spring hateoas初体验

前一段时间学习工作流偶然接触到了hateoas,感觉比较有意思,虽然用的不是那么多,但是加强了自己对restful的理解。hateoas简介HATEOAS是Hypertext As The Engine Of Application State的缩写。在Richardson Maturity Model中, 它是REST的最高级形态。在介绍 HATEOAS 之前,先介绍一下 Richards...

2018-09-29 11:13:02 21697 4

原创 AbstractMethodError: com.ibm.db2.jcc.c.b.isValid(I)Z解决办法

在获取数据库连接过程中发生了这个问题环境:tomcat8.5.16java8数据库驱动db2jcc10.1.jar没有配置连接池根据错误提示,这个数据库驱动jar包中没有isValid方法,去找了找还真没有这个方法找了下原因,因为在tomcat8.5.16中,默认使用的dbcp2的连接池,这也是tomcat自带的在dbcp中org.apache.commons.dbcp2.Del...

2018-09-20 15:49:13 3460

原创 idea中配置JNDI数据源

前言在公司接触一个报表项目时,发现里面使用的JNDI配置的数据源,在web.xml中有resource-ref这个标签,这种方式跟传统的JDBC连接还是有些区别JNDI简介JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服...

2018-09-20 14:54:16 10973

转载 2018年最全Java面试通关秘籍汇总集

此套面试题适用于Java开发的各个阶段面试,不过更偏向初级和中级开发人员!由于每一个问题的答案不唯一且都可以在网上搜索到答案,这里只给出问题,不列出参考答案。一、基础篇1.1、Java基础 面向对象的特征:继承、封装和多态final, finally, finalize 的区别Exception、Error、运行时异常与一般异常有何异同请写出5种常见到的runtime ex...

2018-05-30 17:13:51 322

原创 经典排序算法学习笔记

简介排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。 分类: 插入类排序:直接插入排序(Insertion Sort)、折半插入排序(binary insertion sort)...

2018-03-30 21:31:04 690

原创 历届试题 回文数字

问题描述   观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。  本题要求你找到一些5位或6位的十进制数字。满足如下要求:   该数字的各个数位之和等于输入的整数。 输入格式   一个正整数 n (10&lt;n&lt;100), 表示要求满足的数位和。 输出格式   若干行,每行包含一个满足要求的5位或6...

2018-03-29 20:33:55 2367

原创 历届试题 错误票据

某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。你的任务是通过编程,找出断号的ID和重号的ID。假设断号不可能发生在最大和最小号。输入格式 要求程序首先输入一个整数N(N&lt;100)表示后面数据行数。...

2018-03-28 11:53:06 253

原创 在eureka中使用ip注册服务

在将微服务放入docker部署在多个云服务器上的时候,发现eureka里显示的是机器名,然后弄了个spring boot admin监控平台,发现它就找不到各个微服务对应的主机了。 在网上查得eureka.instance.prefer-ip-address=true,使用这条配置eureka里显示的就是ip地址了,但是依然不够的,在监控平台里面还是连接不上。还需要配置instance-和h...

2018-03-27 22:29:15 22794 1

转载 nohup和&的区别

转自:nohup和&amp;的区别 https://blog.csdn.net/zhang_red/article/details/52789691nohup是永久执行&amp;是指在后台运行运行 nohup –help Run COMMAND, ignoring hangup signals. 可以看到是“运行命令,忽略挂起信号”就是指,用nohup运行命令可以使命令永久的执行...

2018-03-27 21:44:03 550

原创 使用JWT做微服务的登录方案

由于微服务大都是分布式的,需要几台服务器部署,当一个用户在其中一台服务器登录后,传统的方式是session保存其登录信息,然后可以使用共享存储共享,比如redis共享,这种方案的缺点在于共享存储需要一定保护机制,因此需要通过安全链接来访问,这时解决方案的实现就通常具有相当高的复杂性了,所以这里使用基于令牌的方式做登录。JWT简介简介网上都有,下面是摘抄的一部分,做做笔记。。。JWT(J...

2018-03-06 21:08:37 32017 20

原创 eureka做服务注册与发现

关于eureka的介绍什么的就不写了哈,网上有很多。。首先搭建eureka服务端可以通过Spring Initializr创建 pom文件: &lt;parent&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boo...

2018-02-24 19:20:45 5929 3

原创 redis运行在docker容器中

首先需要配置文件 首先到github上搜索redis,选择对应的版本,因为我docker pull的是3.2的版本,所以在release中找到3.2的版本,下载源码 https://github.com/antirez/redis/releases/tag/3.2.11 然后就得到了配置文件 想要远程连接,首先把绑定到本地地址的配置注释掉 然后把保护模式关掉 设置登录密...

2018-02-20 14:42:33 16168

原创 从零开始通过idea插件将一个spring boot项目部署到docker容器里运行

实操:将一个spring boot项目部署到docker容器里运行实验需要的环境:腾讯云+Ubuntu 16.04 x64+idea+插件docker integration+daocloud第一步,安装操作系统首先在腾讯云上安装一个干净的Ubuntu系统 系统使用Ubuntu 16.04 64位 这里服务市场虽然有docker,但是版本都太低(1.8.2左右),现在的...

2018-02-20 14:28:38 14099 1

转载 分布式架构的演进

这是前几天在知乎上看到的,感觉受益匪浅,转载转载。。。系统架构演化历程-初始阶段架构 初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP特征:应用程序、数据库、文件等所有的资源都在一台服务器上。 描述:通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统

2017-12-07 22:03:28 798

原创 算法提高 不同单词个数统计

算法提高 不同单词个数统计 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述   编写一个程序,输入一个句子,然后统计出这个句子当中不同的单词个数。例如:对于句子“one little two little three little boys”,总共有5个不同的单词:one, little, two, three, boys。   说明:

2017-12-05 15:37:37 1000

tomcat-native-1.2.25-src-build

从https://tomcat.apache.org/download-native.cgi下载的源码,编译出来的东西,用于tomcat开启apr模式的链接库文件

2020-10-29

gmhelper-master.zip

从https://github.com/ZZMarquis/gmhelper克隆,支持SM2/SM3/SM4算法的简单封装、SM2 X509v3证书的签发、SM2 pfx证书的签发

2020-10-12

opencv-430.zip

opencv4.3.0 centOS x64下编译好的动态链接库文件,包含opencv-430.jar、libopencv_java430.so还有编译时lib64目录下文件

2020-08-31

png图片压缩-pngquant-JNI链接库

官网:https://pngquant.org/,一个有损png压缩工具,将图片量化转索引图。这里编译的2.12.6版本,包含libimagequant.dll、libimagequant.so、libimagequant.jnilib,可用于win、linux、macOS的开发

2020-08-12

dynamic-datasource-spring-boot-starter.zip

从github上拉下来的dynamic-datasource-spring-boot-starter 3.1.1版本,用于学习交流

2020-06-29

openjdk8u262.zip

这是从官网hg仓库clone下来的openjdk8u262源码,官网下载速度慢,所以发布个资源...

2020-05-25

openjdk8u262-dev.zip

从官网hg仓库拉下来的代码,按照REAME文档可成功编译, 于2020/05/10从jdk8u-dev里面拉出来的

2020-05-11

opencv-linux64.zip

opencv4.1.2 centOS x64下编译好的动态链接库文件,包含opencv-412.jar、libopencv_java412.so还有编译时lib64目录下文件

2020-03-12

cmpp2开发代码包

cmpp2开发代码包,包含服务端和客户端,还有cmpp2官方文档和cmpp2网关模拟器

2018-09-14

com.hoten.cmpp源码

com.hoten.cmpp源码,用于cmpp2连接,发送短信,代码注释齐全 用法 cmpp = new CMPP_Shell("xxx"); if (!cmpp.initCMPP("xxx.properties")) { this.logger.error("初始化cmpp失败!"); } SubmitMsg cs = new SubmitMsg(); setSubmitMsg(cs); cs.sDestTerminalId = phone; cs.sMsgContent = content; cs.nMsgLength = content.length(); cs.sSrcId = srcId; int stat; try { stat = cmpp.submit(cs); if (stat == 0) { logger.debug("短信发送成功"); return 0; }else { logger.error("短信 {} 发送失败,stat= {}", phone, stat); return 1; } } catch (Exception ex) { ex.printStackTrace(); }

2018-09-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除