自定义博客皮肤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

  • 博客(116)
  • 收藏
  • 关注

原创 SpringBoot集成Redis

在 SpringBoot 中整合 Redis 十分简单,目前来看,对 Redis 的整合支持两种使用方式:Lettuce(推荐) 和 Jedis;默认的是 Lettuce,也是推荐的方式。

2023-03-20 16:14:45 567

原创 SpringBoot集成Kaptcha验证码

在开发中,验证码功能是一个常见且重要的功能,Kaptcha 是大名鼎鼎的谷歌公司提供的一款用于生成验证码的插件,支持高度可配置;本章将通过一个简单的示例展示如何实现验证码功能。

2023-03-14 11:46:55 612

原创 SpringBoot集成Token

在项目开发中,Token 是常见且重要的一个功能,目前对于 Token 设计有很多成熟的方案;比如使用 Redis 存储管理 Token,不过这种方式需要而额外集成 Redis 服务,虽然 Redis 查询效率很高,但是对于普通项目来说,还是增加了开发难度;

2023-03-14 10:26:23 1176 1

原创 SpringBoot启用GZIP压缩

Gzip 压缩算法的压缩比非常高,能有效减少数据大小和网络传输负担,而且现代浏览器基本上都支持 Gzip 压缩技术,所以在项目中使用数据压缩技术是非常好的方案;启用 GZIP 压缩可以大大提高数据传输效率,像 js 等文件压缩比能达到 4 倍左右;使得网页访问速度大大增加。

2023-03-14 10:13:44 2411

原创 SpringBoot+Maven搭建分模块项目

前面介绍的项目都是一个整体的 SpringBoot 项目,在实际的开发过程中,特别是微服务部分,经常需要将各个功能模块分开,使用 Maven 就能很好的实现这个效果1. 父级项目添加子模块的配置有两处,分别在 和 下,子模块的信息一定要填写准确2. 由于 Controller 模块还作为启动模块,特别要主要各个模块之间的包名的关系。

2023-03-14 09:50:07 926

原创 SpringBoot使用Redis实现缓存

上一章已经介绍了如何在 SpringBoot 中如何使用缓存,本章将介绍如何将缓存和 Redis 结合使用。

2023-03-10 16:16:59 590

原创 SpringBoot使用缓存

Spring 框架已经具备了缓存机制,虽然我们可以使用 Redis 等作为缓存处理机制,不过对于非常零碎的数据交互其实使用 Spring 的缓存机制反而显得简单;而且我们可以将 Spring 的缓存机制融合 Redis 和 关系型数据库建立一个完备的数据处理方案,相当于实现了 3 级缓存,将非常有助于超大型系统的数据交互压力。

2023-03-09 14:41:57 1391

原创 SpringBoot集成MyBatis

1. xxxMapper.class 上添加 @Mapper 注解表明这是一个 Mapper 类,也可以在项目启动类或添加了 @Configuration 注解的配置类上添加 @MapperScan("com.study.springboot.mapper") 注解表明这个包路径下的所有接口类都是 Mapper 类;3. 对于自增的记录,有时候我们需要插入操作后直接返回插入的结果,但是得不到自增的主键,如果是使用 xxxMapper.xml 文件方式,可以通过添加如下属性解决这个问题。

2023-03-08 13:36:14 556

原创 SpringBoot使用log

SpringBoot 默认的 log 插件是 Logback + slf4j,所以根本不用再配置再 log4j。

2023-03-08 13:33:42 353

原创 SpringBoot部署War包到Tomcat

SpringBoot 项目可以以 jar 和 war 包格式启动,jar 包部署的方法非常简单,只需要在 pom.xml 文件中将 packaging 这项设置为 jar,直接打包即可;将打好的 jar 包,通过命令 java -jar xxx.jar 启动就好了;本章主要介绍如何打成 war 包,并部署到 tomcat 服务器。

2023-03-08 09:53:59 432

原创 SpringBoot集成数据源

spring-boot-starter-data-jdbc 是 SpringBoot 中一个比较简单的数据操作框架,它集成了 JdbcTemplate 来操作数据库;当引入了 spring-boot-starter-data-jdbc 后,有如下自动配置类帮助我们完成自动配置。:因为我们使用的 SpringBoot 的版本是 2.3.4.RELEASE,默认该版本引入的 MySQL 的版本是 8.0.21;Druid 是阿里的数据源框架,是非常受欢迎的一款数据源整合框架;

2023-03-08 09:48:07 667

原创 SpringBoot之Session共享问题

使用 @CrossOrigin 注解即可实现跨域请求,不过由此带来的问题是 HttpSession 不一致的问题;真实情景:用户请求后台验证码,后台 session 保存验证码 5 分钟,当用户在前端输入验证码后,点击确认再次发送请求到后台验证是否和上一次请求中 session 保存的验证码一致;如果前端和后台是分离开发的,请求都是跨域请求的话,就会导致两次请求方法中的 session 不一致,从而导致验证失败。

2023-03-08 09:44:12 858

原创 SpringBoot跨域请求处理

通过 cors 协议处理跨域问题,需要在添加了 @Configuration 注解的配置类中实现如下方法。在控制层类上或者方法上直接添加 @CrossOrigin 注解即可。

2023-03-08 09:40:12 108

原创 SpringBoot定制化组件

也就是说 WebMVCAutoConfiguration.class 中的默认配置将全部失效!所有这些默认配置都需要我们自己实现;例如系统默认静态资源 /static/,/public/ 等等默认访问路径将全部失效!SpringBoot 项目中对组件的普通定制化可通过实现 WebMvcConfigurer 接口实现对应方法定制 Web 功能;例如:修改静态文件默认访问地址。对 WebMVC 模块全面接管;但要注意:添加了 @EnableWebMvc 注解后,系统的静态资源、视图解析器,欢迎页面等等配置会。

2023-03-08 09:36:07 180

原创 10.外观模式

外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用;外观模式又称为门面模式,它是一种对象结构型模式;在 JDBC 中就使用到了外观模式。

2023-03-06 13:10:42 118

原创 9.组合模式

组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构;组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole) 模式,它是一种对象结构型模式;组合模式主要用于处理树形结构的数据,组合模式通过一种巧妙的设计方案,可以一致性地处理整个树形结构或者树形结构的一部分,也可以一致性地处理树形结构中的叶子节点(不包含子节点的节点)和容器节点(包含子节点的节点)/*** 公共父类 - 文件类*//*** 添加文件*/

2023-03-06 13:08:18 238

原创 8.装饰者模式

装饰器模式(Decorator Pattern)也称为包装模式(Wrapper Pattern) 是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式;装饰器模式的核心是功能扩展,使用装饰器模式可以透明且动态地扩展类的功能。

2023-03-06 13:06:12 470

原创 7.桥接模式

在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分;如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难;桥接模式就是为了解决这样的问题桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化;它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(interface)模式/*** 手机品牌, 任何品牌的手机都具有。

2023-03-03 09:42:19 347

原创 6.适配器模式

将一个类的接口转换成客户希望的另外一个接口;适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作;例如在生活中,我们常常会碰到这样的场景:手机充电需要 5V 的电压,但生活用电是 220V,手机不能直接使用 220V 电压充电,我们就需要一个充电器将电压从 220V 转换为 5V,才能给手机充电;本章以次示例演示不同的适配器模式。

2023-03-03 09:29:10 337

原创 5.建造者模式

建造者模式也叫生成器模式,是一种对象构建模式;它可以把复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象;建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容,就可以构建它们,用户不需要知道内部的具体构建细节;

2023-03-02 13:31:16 209

原创 4.原型模式

Java 中 Object 类是所有类的根类,Object 类提供了一个 clone() 方法,该方法可以将一个 Java 对象复制一份,但需要实现 clone 的 Java 类必须要实现一个接口 Cloneable,该接口表示该类能够复制且具有复制的能力;原型模式是指用原型示例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节;原型模式主要分为:浅拷贝和深拷贝。

2023-03-02 13:21:50 292

原创 3.工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一;这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式;在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象;工厂模式是一种设计思想,让代码扩展性更好,便于二次开发维护,缺点是增加了代码量和复杂度;简单工厂模式,工厂方法模式,抽象工厂模式;简单工厂模式就是创建一个工厂类,根据传入的参数类型来创建具体的产品对象,并返回产品对象的实例;

2023-03-02 10:06:49 497

原创 SpringBoot嵌入式Servlet容器

默认情况下,我们通过在 application.properties 配置文件中添加 server.xxx 配置即可修改 WebServer 的默认配置;如果要自定义修改配置,可参考如下实现方法新建 CustomServer.class 并实现 WebServerFactoryCustomizer 接口,重写 customize() 方法即可@Component@Override// 修改服务启动端口。

2023-03-02 09:55:52 169 1

原创 SpringBoot之Web原生组件注入(Servlet,Filter,Listener)

在 SpringBoot 中要使用 Servlet、Filter、Listener 的话,可通 过 @WebServlet/@WebFilter/@WebListener + @ServletComponentScan 注解组合实现;假如我们的 Servlet、Filter、Listener 都放在 com.study.springboot.servlet 这个包下,那么在使用这些原生组件之前,在项目的启动类或项目的配置类上添加如下注解。新建 MyServlet.class 添加如下测试代码即可。

2023-03-02 09:53:54 273

原创 SpringBoot访问jsp页面

SpringBoot 也可以像 SpringMVC 项目一样支持 web 开发,对于前端页面的访问,配置是十分相近。

2023-03-02 09:49:06 3697

原创 SpringBoot异常处理

1. 新建 GlobalErrorController.class 实现 ErrorController 接口并实现如下逻辑// 错误请求路径@Resource@Override/*** JSON格式错误信息*/注意1)ERROR_PATH = "/error" 这个路径其实就是 SpringBoot 错误处理机制中自动配置的路径;在 ErrorProperties.class 中可找到这个配置。

2023-03-02 09:25:51 1444

原创 2.单例模式

(1) 由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如:读取配置、产生其他依赖对象时,可以通过在应用启动时直接产生一个单例对象,然后以永久驻留内存的方式解决。即在类装载的时候,就执行静态代码块中的代码,初始化类的实例;而类的装载过程是线程安全的,即保证了线程安全。缺点:如果在多线程下,一个线程还在 if 判断语句块,而另一个线程通过了 if 代码块,就会产生多个实例。加入了双重检查代码,解决了线程安全的问题,同时也解决了懒加载的问题,效率较高。结论:可用于实际开发。

2023-03-01 16:15:41 302

原创 1.设计模式简介

2)类 A 通过接口 interface1 依赖类 B,类 C 通过接口 interface1 依赖类 D,如果接口 interface1 对于类 A 和类 C 来说不是最小接口,那么类 B 和类 D 必须实现他们不需要实现的方法。4)依赖倒置原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多;5)使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。1)客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小接口上。

2023-03-01 16:08:42 418

原创 2.webpack实时打包

上一章已经实现了使用 webpack 构建了一个简单的项目;但是我们发现,每次修改了 index.js 需要重新执行 cnpm run dev 命令重新构建 main.js;这在开发阶段是无法忍受的,因为这样调式将浪费大量的时间;还好 webpack 提供了自动化更新资源的依赖 webpack-dev-server 和 html-webpack-plugin 插件让项目自动打包,可以轻松实现边开发,边调试webpack-dev-server 有如下特点。

2023-03-01 09:39:18 241

原创 1.webpack创建项目

我们通过简单的使用 webpack 一步一步的实现搭建一个完整的项目,逐步理解前端的开发不再是简单的 html +css + javascript 脚本,而是系统的,架构的开发模式;就跟后端开发一样,开始规范化了;后面很多地方都可以对比后端的开发模式,你会发现有很多类似的地方!Webpack 是一个前端资源加载/打包工具;它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源;官网地址:https://webpack.docschina.org/;

2023-03-01 09:32:57 436

原创 SpringMVC异步请求

为满足耗时任务占用应用服务器连接数,而客户端又必须等待这些耗时长任务返回才能处理下一步工作的场景,Spring 引入了以下机制来处理:使用 Callable 或者 DeferredResult 作为 Controller 的返回值,能够处理异步返回单个结果的场景;使用 ResponseBodyEmitter/SseEmitter 或者StreamingResponseBody 来流式处理多个返回值;在 Controller 中使用响应式客户端调用服务并返回响应式的数据对象Callable。

2023-02-28 14:02:35 2409

原创 SpringMVC使用 redis 实现缓存

SpringMVC 中也可以将缓存标签和 redis 结合起来使用,其实此时缓存没有起作用,只是通过缓存的那几个注解来操作 redis 而已;SpringMVC 中整合 redis 比较麻烦的是注意版本冲突的问题,如下是官网有关于版本的要求。

2023-02-28 09:42:42 585

原创 SpringMVC使用缓存

注意:@Cacheable 标签中的 cacheNames 属性的值 myCache 就是我们在 SpringConfig.class 中添加的缓存实例的属性值,一定要对应上,否则会报错。cacheManager 方法中可以添加多个缓存实例,缓存实例将会在后面用到。MyKeyGenerator 类的实现。

2023-02-27 14:18:09 858

原创 SpringMVC配置多个数据源

今天遇到一个需求,我们开发的项目需要同时连接 DB2 和 SQLite 数据库,刚开始认为可以复制一份当前数据源的配置就可以了,结果发现失败了;原因是:SqlSessionFactory 只能是单例模式,所以根本无法通过这种方式实现多数据源的开发解决方案:手动创建一个动态的数据源,将 DB2 和 SQlite 数据源放入,再将该动态数据源放入 ThreadLocal,然后在代码中指定需要的数据源即可。

2023-02-27 14:13:44 797

原创 SpringMVC实现服务器端推送服务

从服务器端向客户端推送数据是一个很普遍的需求,在该 SpringMVC 中主要利用了 Servlet3.0 对异步方法的支持实现,通过前端轮询获取后端的数据。

2023-02-27 14:11:31 235

原创 SpringMVC实现对象序列化转换

SpringMVC 对对象实现序列化转换,在我看来不是很好用,而且比较鸡肋,因为需要使用 Ajax 的方式进行提交才会比较好用。

2023-02-27 14:06:58 317

原创 SpringMVC拦截器

SpringMVC 中的拦截器配置十分简单,本章主要介绍基于纯 Java 配置的项目如何配置拦截器;Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理;例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等要使用Spring MVC中的拦截器,就需要对拦截器类进行定义和配置;通常拦截器类可以通过两种方式来定义。

2023-02-27 14:04:29 51

原创 SpringMVC之Maven项目搭建(4.3.18 RELEASE)

本章将介绍通过 Maven 搭建一个 SpringMVC 项目,主要是有很多依赖需要记录一下;这里将详细介绍如何搭建一个 4.3.18 RELEASE 版本的项目。

2023-02-27 14:03:42 426

原创 Spring基础总结(下)

本章节通过手写一个简单的 Spring 框架来加深对 Spring 框架源码以及设计思想的理解;

2023-02-22 15:52:14 570 1

原创 Spring基础总结(中)

注意:AppConfig 上面不要 @EnableAspectJAutoProxy 注解,否则会报错:com.sun.proxy.$Proxy19 cannot be cast to com.spring.demo.service.CService。注意:CService 上面要添加 @Component 注解,1) 和 2) 则不用。方式一:通过 applicationContext 获取。使用 ApplicationContext 直接发布。调用 print 方法发布。

2023-02-21 16:58:32 366

空空如也

空空如也

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

TA关注的人

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