自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

onion的博客

欢迎关注【洋葱头么】公众号,回复【领取资源】,200G架构师学习资源干货免费送。

  • 博客(42)
  • 问答 (7)
  • 收藏
  • 关注

原创 SpringBoot2同时支持打war包和jar包

一般我们使用SpringBoot开发都是打包为jar,但有时候总是需要打成war包,甚至两种都要同时支持,也就有了本篇文章。至此,SpringBoot 即可同时支持 war 包和 jar 包。

2023-03-27 20:08:42 294 1

原创 手把手带你写Web框架

不知道从何时起,觉着Spring有些臃肿,总想自己写一个web框架来替代Spring,却一直不知道从何处下手。你的救星来啦!!!如果你想开发一个轻量级web框架,如果你不懂Spring原理,学完课程,你将能够手写一个简易的web框架,可以出去吹牛逼啦!微信扫描如下二维码或者点击链接手把手带你写Web框架即可获取(听说6月9日0点有优惠哦)...

2020-06-08 22:57:16 1705

原创 一步一步手写一个Tomcat

  相信java自学的朋友都有这样的烦恼:找不到合适的网站学习。需要入门的朋友找到的资料讲的太宽泛,需要熟练掌握的朋友又不能理解原理性的东西,这次小编一直关注的大神站长出了一个手写tomcat教程,这里推荐给有java基础想要提高的朋友,想要入门的就不要看了哈,当然可以看看其他的内容,入门内容几乎全免费哦。放图先睹为快微信扫描如下二维码或者点击链接手写tomcat即可获取...

2020-05-26 21:10:06 493

原创 mybatis-plus生成mapper扩展文件

阅读提示  具有mybatis基础,熟练使用mybatis-plus。概述  我们都知道,mybatis-plus是一个mybatis的增强工具,为简化开发、提高效率而生,我们经常使用mybatis-plus生成controller、service、mapper等文件,对于简单的curd,可以直接使用mybatis-plus封装好的方法。  然而,我们经常有这样那样的需求,需要额外编写sq...

2020-05-24 14:08:15 5794

原创 阿里巴巴Java开发手册泰山版发布

继2019年6月19日阿里发布Java开发手册华山版后,昨天也就是2020年4月22日阿里发布了Java开发手册最新版本并命名为泰山版,阿里巴巴Java开发手册让众多开发人员养成了好的代码编写习惯,真的要感谢阿里的无私奉献啊!值得一提的是,泰山版对错误码规则第一次提出了完整的解决方案,如响应正常是00000,A0111表示用户已存在,再比如A0120表示密码校验失败等等;除了错误码之外,泰山版还...

2020-04-24 00:32:30 646

原创 Redis高可用之集群模式

一台机器上模拟Redis集群创建方式1:redis-cli1、创建一个文件夹redis-cluster,然后在其下面分别创建6个文件夹如下mkdir -p /usr/local/src/redis/redis-clustermkdir 7001、mkdir 7002、mkdir 7003、mkdir 7004、mkdir 7005、mkdir 70062、把 redis.conf 配置文...

2020-04-06 21:33:54 242

原创 Redis安装及主从模式、哨兵模式

一、redis安装1、安装gcc:yum -y install gcc-c++2、下载安装包cd /usr/local/src/rediswget http://111.1.51.86/files/1187000008B19271/download.redis.io/releases/redis-5.0.8.tar.gz3、解压:tar -zxvf redis-5.0.8.tar.gz...

2020-03-28 22:39:49 147

原创 聊聊什么时候引入MQ

MQ的特点  消息发送方不关注消息接收方是谁,同时消息接收方不关注消息发送方是谁,但发送方和接收方都要依赖MQ。什么时候引入MQ  结合MQ的特点我们知道,两个或多个服务不在同一台服务器上且一个服务需要使用其他服务产生的数据时可以使用MQ。那么,具体的场景呢?服务顺序执行  服务A执行完毕再执行服务B,服务B执行完毕再执行服务C。。。MQ不就是为这种场景量身定做的嘛!消息发送方不关心执...

2019-12-29 21:14:32 205

原创 docker版MyCat分库分表实现

安装mycatmkdir mycatcd mycatwget http://dl.mycat.io/1.6.7.1/Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gzmv Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz mycat.tar.gztar -zxvf...

2019-12-15 22:15:04 259

转载 MySQL索引

没有索引的查找本集的主题是索引,在正式介绍索引之前,我们需要了解一下没有索引的时候是怎么查找记录的。为了方便大家理解,我们下边先只唠叨搜索条件为对某个列精确匹配的情况,所谓精确匹配,就是搜索条件中用等于=连接起的表达式,比如这样:SELECT [列名列表] FROM 表名 WHERE 列名 = xxx;在一个页中的查找假设目前表中的记录比较少,所有的记录都可以被存放到一个页中,在查找记录的...

2019-12-14 00:40:22 118

原创 MongoTemplate实现按日期分组统计

场景  需要按日期统计记录数目,使用MongoTemplate实现按日期分组统计。实现思路关键代码:Aggregation aggregation = Aggregation.newAggregation( Aggregation.project("createTime").and(DateOperators.DateToString.dateOf("createTime").toStr...

2019-12-14 00:12:09 4902 4

原创 内存缓存修改为Redis缓存时对于设计的一点思考

场景  起初为了简便编码,直接在java文件中定义map等集合用于缓存数据,集合形如 private static final Map<String, String> map = new HashMap<String, String>(); public static String get(String key) { return map.get(key); } p...

2019-12-10 23:45:20 249

转载 InnoDB存储引擎的索引页和槽

MongoRepository  Spring提供了一个非常强大的组件Spring Data JPA,其提供了很多基础的操作数据的方法,可以大大减少数据访问层的开发工作量,同样对于MongoDB也提供了MongoRepository加快开发。  下面是基础的规范,我们只需要继承MongoRepository接口,命名符合该规范即可  例子MongoTemplate  MongoRep...

2019-12-08 22:39:07 708

原创 MongoDB操作方式总结

MongoRepository  Spring提供了一个非常强大的组件Spring Data JPA,其提供了很多基础的操作数据的方法,可以大大减少数据访问层的开发工作量,同样对于MongoDB也提供了MongoRepository加快开发。  下面是基础的规范,我们只需要继承MongoRepository接口,命名符合该规范即可  例子MongoTemplate  MongoRepos...

2019-11-19 17:41:11 192

原创 SpringBoot实现Swagger接口响应信息自定义(一)

  swagger提供了一套完整的接口文档解决方案,只需在pom文件中加入swagger相关的包并简单配置一下即可得到一份完整的接口文档,想要更详细规范的信息还可在Controller类中加入类似@ApiOperation注解,诸如这些swagger的基本使用网上有很多教程,这里不在赘述。  本篇主要讲述如何使用SpringBoot实现Swagger接口信息自定义。场景  接口相关信息如路径...

2019-11-18 18:22:26 1394

原创 jenkins插件下载缓慢

问题  安装jenkins后,启动运行,浏览器访问ip:port,安装插件,经常会遇到安装缓慢问题,甚至需要几个小时,相信很多人都遇到过这样的问题现有的解决方案  相信很多人都问了“度娘”,大多数方法都是改为国内镜像源,如jenkins插件清华大学镜像地址https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.js...

2019-11-17 19:11:54 1044

原创 程序设计原则

单一职责原则:类的单一职责,方法的单一职责。指定目录最小化原则:如mapperScan扫描目录只能存放mapper接口文件,mongo的EnableMongoRepositories基础包配置只存放repository接口文件。读者原则(最少时间理解原则):把自己当作读者,假设什么业务都不了解,能否尽快理解程序的含义。长即有问题:如果你觉得某部分程序太长,那么很可能有问题。勒布朗法则:稍...

2019-10-13 21:20:59 120

原创 MongoDB保存文档的小“坑”

什么“坑”?  使用MongoTemplate对文档进行增改操作时,稍不注意就会造成数据丢失,究其原因在于对增改操作理解不到位,特定场景下没有理解save操作含义。场景  假设文档共有10个字段,保存文档时保存10个字段,更新文档时只更新1个字段。“坑”操作  程序只提供一个增改接口,而保存和更新文档却直接使用了save方法。分析  save方法本身的含义是当数据中不存在_id字段时...

2019-09-15 12:06:37 1426

原创 跨站点请求伪造(CSRF)

是什么?  CSRF攻击指诱使用户访问伪造的页面,然后以该用户身份在第三方站点执行一次操作,CSRF攻击是利用用户身份操作用户账户的一种攻击方式。怎么办?验证码:CSRF攻击的过程,往往是在用户不知情的情况下构造了网络请求。验证码则强制用户必须与应用进行交互,才能完成最终请求。因此在通常情况下,验证码能够很好地遏制CSRF攻击,但该防御方式用户体验较差;Referer Check防盗链:可...

2019-09-07 12:22:41 734

原创 XSS跨站脚本攻击

  SpringBoot的强大不用多说,同样也集成了MongoDB,即MongoTemplate,MongoTemplate实际上使用的是MongoClient,故而本篇介绍MongoClient的基本使用。场景  接口相关信息如路径、参数等数据可能来自枚举、模板文档、数据库等。<dependency> <groupId>org.springframework...

2019-09-01 23:38:08 78

原创 SpringBoot实现Swagger接口响应信息自定义(三)

  新需求的解决方案与原有思路不同,具体见下文新的需求  我们想要对自定义的接口信息进行分组,可以进行权限控制、分组查询等操作,仅仅靠上述操作是无法实现了,如何解决这个问题呢?新需求的解决方案  该方案其实可以替代SpringBoot实现Swagger接口响应信息自定义(二)的终版解决方案,并且功能更强大,但处理也相对复杂一些,自己尝试下就知道了。话不多说,先看分组的要求,如下图可以选择所...

2019-08-26 18:42:23 3184

原创 SpringBoot实现Swagger接口响应信息自定义(二)

  上一篇SpringBoot实现Swagger接口响应信息自定义(一)讲到了实现Swagger接口响应信息自定义的初版解决方案,本篇讲述终版解决方案。场景  接口相关信息如路径、参数等数据可能来自枚举、模板文档、数据库等。终版解决方案:依据swagger接口响应机制,重写swagger接口响应数据  我们访问swagger-ui.html页面,看到的接口响应数据都是v2/api-docs...

2019-08-25 20:43:59 6965 3

原创 SpringBoot实现Swagger接口响应信息自定义(一)

  swagger提供了一套完整的接口文档解决方案,只需在pom文件中加入swagger相关的包并简单配置一下即可得到一份完整的接口文档,想要更详细规范的信息还可在Controller类中加入类似@ApiOperation注解,诸如这些swagger的基本使用网上有很多教程,这里不在赘述。  本篇主要讲述如何使用SpringBoot实现Swagger接口信息自定义。场景  接口相关信息如路径...

2019-08-24 12:18:33 6474 5

原创 RabbitMQ多消费者消费同一批数据

  最近在使用RabbitMQ作消息转发,供消费者使用,遇到了多消费者消费同一批数据的问题。场景  1.多个消费者消费同一批数据;  2.每条数据每个消费者都要消费解决方案:采用direct模式,消费者创建队列形式  生产端不创建队列,只负责把消息发送到交换机并指定routingKey,这里为了避免消息投递到RabbitMQ失败,采用了手动确认方式,如# spring配置# 手动确认...

2019-07-29 18:23:26 16934 7

原创 SpringMVC接收Date类型的数据

接收形式  SpringMVC接收日期类型的数据有两种形式,一种是直接接收日期类型的参数,一种是在模型中接收。第一种:直接接收日期类型的参数如果参数直接写 dateMapping(Date test)会抛异常指示无法转换,所以需要加入时间转换的注解@DateTimeFormat,一般我们的日期是有格式的,所以这里配置pattern属性;@RequestParam注解标识这是一个请求参数。...

2019-07-21 12:54:08 5143

原创 代理模式

介绍  GoF 23种设计模式之一。定义  为其他对象提供一种代理以控制对这个对象的访问。静态代理举例站点售票接口interface Station { void sellTicket();}火车站类class TrainStation implements Station { public void sellTicket() { System.out.println(...

2019-07-14 22:36:31 100

原创 Git 的 revert 命令撤销多次提交

git revert 命令的含义git revert commitId表示撤销某个提交,并不是说撤销至某个提交。举个例子:新增1.txt文件进行第一次提交,新增2.txt文件进行第二次提交;此时使用 git log 命令找到第一次提交的 commitId,执行 git revert commitId,暂存区只会撤销新增的1.txt。如果想要撤销多次提交怎么办?典型的应用场景是某次提...

2019-07-07 17:50:11 7128

原创 装饰模式

介绍  GoF 23种设计模式之一。定义  在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。举例手机抽象接口public interface Phone { public abstract void call();}具体手机public class MyPhone implements Phone { @...

2019-06-09 21:23:32 103

原创 适配器模式

介绍  GoF 23种设计模式之一。定义  将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。举例适配接口interface Target { void request();}适配类class Adapter implements Target{ private Adaptee adaptee; public Ada...

2019-05-30 09:29:38 103

原创 责任链模式

介绍  GoF 23种设计模式之一。定义  避免请求的发送者与接收者耦合在一起,使得多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。举例观察者接口interface Observer { public void update();}具体观察者1class ConcreteObserver1 implements Observer...

2019-05-21 09:17:09 173

原创 观察者模式

介绍  GoF 23种设计模式之一。定义  定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。举例观察者接口interface Observer { public void update();}具体观察者1class ConcreteObserver1 implements Observer { public void u...

2019-05-13 16:33:16 166

原创 策略模式

介绍  GoF 23种设计模式之一。定义  定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。举例策略接口public interface IStrategy { public void doSomething();}具体策略1class ConcreteStrategy1 implements IStrategy { public void doSomethin...

2019-05-04 23:26:06 86

原创 模板方法模式

介绍  GoF 23种设计模式之一。定义  定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。举例排序抽象类public abstract class AbstractSort { protected abstract void sort(int[] array); /** * 模板方法 * * @par...

2019-04-29 16:21:29 94

原创 单例模式

介绍  GoF 23种设计模式之一。定义  保证在内存中只有一个对象,并提供一个全局访问点。举例单例类public class Singleton { // 懒汉式 private Singleton() { } private static Singleton single = null; public synchronized static Singleton ge...

2019-04-22 10:02:38 89

原创 工厂方法模式

介绍  GoF 23种设计模式之一。定义  定义一个用于创建对象的接口(或类),让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。举例动物类public abstract class Animal { public abstract void eat(); }猫类public class Cat extends Animal { @Override ...

2019-04-13 11:19:06 105

原创 抽象工厂模式

介绍  GoF 23种设计模式之一。定义  为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。举例产品A接口public interface ProductA { public void methodA();}具体产品A1public class ProductA1 implements ProductA { public void methodA...

2019-04-07 10:50:53 85

原创 idea显示Run Dashboard

以前版本的idea显示面板的方法:  找到项目目录下的.idea->workspace.xml,搜索RunDashboard,添加如下代码即可<option name="configurationTypes"> <set> <option value="SpringBootApplicationConfigurationType" /&gt...

2019-03-31 08:55:08 262

原创 简单工厂模式

介绍  又叫静态工厂方法模式,非GoF 23种设计模式之一。特点  需要什么对象就传递一个参数,就可以获取需要的对象而不需要知道对象的创建细节。举例动物类public abstract class Animal { public abstract void eat(); }猫类public class Cat extends Animal { @Override ...

2019-03-28 17:23:14 100

原创 VMware安装CentOs6.4

准备工作安装VMware;CentOs6.4镜像(.iso);安装过程1. 创建新的虚拟机2. 按图示新建虚拟机3. 编辑虚拟机配置,其中CD/DVD指定镜像路径,网络适配器使用桥接,使得虚拟机和主机共享网络4. 开启虚拟机,选择第一个安装或升级现有系统,然后选择跳过测试5. 可按图示操作...

2019-03-26 17:52:34 294

原创 WebSocket和Servlet3.0服务器消息推送技术

欢迎使用Markdown编辑器 最近研究了两种服务器推送技术,一种是**WebSocket**技术,一种是基于**Servlet3.0**实现的服务器异步推送技术。1. WebSocket(聊天室)WebSocket客户端连接类(javaee-api-7.0.jar)import java.io.IOException;import java.text.SimpleDateFormat...

2018-10-14 22:39:02 3855 1

空空如也

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

TA关注的人

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