自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 Docker命令速查

Docker命令速查

2022-08-10 23:36:39 1208 1

原创 Dubbo降级&容错机制

Dubbo降级&容错机制在分布式环境中,由于所有的服务不在同一台服务器中,就涉及到服务之间的调用,而远程调用涉及到网络,网络是不可靠的,这就导致了有时候远程调用会失败,这时候就需要容错机制而服务降级机制,是指在流量特别大的情况下,我们主动关闭一些不重要的服务,将资源向核心服务倾斜,被关闭的服务就会做服务降级服务降级服务降级就是我们将一些不重要的服务屏蔽掉,当有别的服务对被降级的服务发起远程调用时,不发起调用,而是执行本地的服务降级逻辑首先我们构建一个提供者服务,用于获取用户的地址@Ser

2021-07-24 23:32:13 592 2

原创 Dubbo常用配置

Dubbo常用配置使用Dubbo作为项目的RPC框架,可以根据项目实际需要,选择Dubbo提供的自定义配置,本文介绍了Dubbo常用的配置选项启动时检查默认情况下,消费者服务启动时,会检查注册中心是否有启用的提供者服务,如果没有,会造成检查不通过,启动失败有时候在开发过程中,需要绕过启动检查,可以使用check属性,将值设置为false既可@Servicepublic class OrderServiceImpl implements OrderService { @DubboRef

2021-07-24 23:28:16 677 1

原创 Dubbo负载均衡策略

Dubbo负载均衡策略在分布式环境中,一般都有多个提供者服务,形成一个集群,在多个提供者的环境下,每次调用服务使用哪个提供者,这就涉及分布式的负载均衡策略,Dubbo为我们提供了四种负载均衡策略,分别是随机,轮询,最小活跃以及一致性Hash为了测试,我们创建一个服务提供者,用于查询用户地址,并且记录是哪个提供者,以及被调用的次数和调用的参数,在测试的时候,启动多个提供者来测试不同负载均衡策略下的调用效果@Service@DubboService@Slf4jpublic class UserSer

2021-07-04 18:14:47 959 3

原创 搭建Dubbo监控面板

搭建Dubbo监控面板Dubbo官方为我们提供了一个监控中心dubbo-admin,可以让我们在使用Dubbo时,监控和控制服务的状态,使用监控面板更方便地管理服务,不过这个监控中心是一个单独的项目,需要我们下载并启动首先从github上将项目克隆到本地,地址如下:dubbo-admin项目地址启动后端服务新版dubbo-admin项目是一个前后端分离的项目,需要分别启动前端和后端项目,启动后端项目之前前请确保Zookeeper正在运行打开项目下的dubbo-admin-server项目,这就是

2021-07-03 23:16:49 367 1

原创 Dubbo简单体验

Dubbo简单体验Dubbo是一款高性能的RPC框架,他主要实现了在分布式系统中,服务之间的相互调用,也支持一些负载均衡策略和限流降级策略。由于Dubbo在通信协议层使用自有的二进制流协议传输,因此效率比基于Http协议的RPC框架效率要高,也因此Dubbo成为了现在分布式系统领域中炙手可热的一个框架在使用Dubbo之前,需要先介绍一下分布式系统中的几个概念以下是Dubbo官网中的一张图片,可以看到,在分布式系统中,一个服务要去远程调用另一个服务,则调用方为“消费者”,被调用方为“提供者”在分布式系

2021-07-03 23:13:45 152 3

原创 事务的传播机制

事务的传播机制事务的传播行为就是在两个都启用了事务的方法进行嵌套调用时,外层事务和内层事务的执行动作,Spring支持七种传播方式,他们的效果如下:REQUIRED:如果有外层事务,则加入这个事务,否则开启一个新的事务SUPPORTS:如果有外层事务,则加入这个事务,否则就以非事务方式执行MANDATORY:如果有外层事务,则加入这个事务,否则抛出异常REQUIRES_NEW:开启一个独立的新事务执行NOT_SUPPORTED:方法不应该以事务方法执行,如果有外层事务,就以非事务方式执行NE

2021-06-25 21:28:12 2911 1

原创 声明式事务

声明式事务事务是描述对数据库的一组操作,比如在转账业务中,A向B转了一笔钱,那么从A的账户中扣款和把钱打入B的账户这两个数据操作就应该放在一个事务中,不允许只单独执行其中一个操作,如果在事务执行过程中有错误产生,则整个事务中的操作需要全部回退。关于事务可以了解一下事务的ACID特性Spring对事务做了支持,可以用注解标记一个方法中的操作为一组事务,这就是Spring声明式事务为了测试,我们创建一个Service类,定义一个新增操作的方法,这个方法一定会产生一个异常,来模拟业务产生错误的情景@Ser

2021-06-25 21:27:13 299 1

原创 整合Swagger

整合Swagger在现在的web开发中,前后端分离的开发模式大行其道,前端负责页面渲染,并发送请求到后端服务器请求数据,后端负责数据访问和处理,然后返回数据给前端在前后端开发的模式中,接口的定义在协同开发中就非常重要,前端开发人员需要清晰地知道后端接口的用途,需要的参数和返回的数据,因此在开发中需要一份接口文档。Swagger是一款流行的Api框架,他可以定义Api接口的参数和返回值,并且支持同步更新和在线调试,解决了这个问题基本使用使用Swagger,需要导入Swagger的starter依赖,本

2021-06-25 21:24:15 280 1

原创 Spring Boot发送邮件

发送邮件在web开发中,发送邮件是一个很常用的功能,Spring Boot也集成了发送邮件的功能基本使用使用Spring Boot的发送邮件功能,需要导入邮件的starter依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency&gt

2021-06-23 22:00:47 578 6

原创 Spring Boot异步任务

异步任务在业务开发中,有一些业务流程耗时会比较长,这样会使前端发送请求后一直等待响应,但是有一些业务逻辑不需要有很强的及时性,例如发短信,发邮件等等,这些业务逻辑由于要进行网络通信,耗时比较长,却不需要在真正完成业务逻辑之后才响应给前端,对于这种业务场景我们可以使用异步任务机制,将响应立即返回给前端,然后开启异步线程执行慢业务逻辑,这样会大大提升用户体验使用多线程的方式可以实现异步的功能,但是线程的编写比较繁琐,Spring Boot帮我们封装了异步任务的功能,让我们可以简单地实现异步任务首先我们来模

2021-06-21 23:26:32 321

原创 整合Shiro

整合ShiroShiro是一款开源的轻量的权限管理框架,他能实现用户的认证和授权功能,也可以实现密码加密功能基本使用使用Shiro,首先需要导入starter依赖<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.7.0</

2021-06-20 23:55:02 223 1

原创 Spring Boot定时任务

定时任务在开发中,我们经常会用到定时任务的功能,例如定时同步数据,定时发送邮件等等,Spring Boot也提供了定时任务的功能基本使用要使用定时任务,首先需要开启项目的定时任务功能,只需要在启动类或者配置类中添加@EnableScheduling注解@EnableScheduling@SpringBootApplicationpublic class SpringDemoApplication { public static void main(String[] args) {

2021-06-20 23:51:10 134 1

原创 JSR303参数校验

JSR303参数校验在进行web开发时,对于前端发送的参数,需要进行合法性验证,虽然前端也会进行验证,但是用户仍然可以使用postman等工具或者手动拼接url等方式绕过验证,因此后端也需要验证要验证参数,可以使用JSR303校验机制,他适用于大多数验证场景基本使用使用JSR303校验,首先需要导入对应的starter<dependency> <groupId>org.springframework.boot</groupId> <artifactId

2021-06-20 23:49:25 546 1

原创 整合Spring Session

整合Spring Session在web开发中,我们会使用Session来存放当前登录用户的信息,不过这么做有许多弊端,比如Session底层是一个存放在本地内存的map集合,这使得在分布式集群环境下无法在集群内的多台机器中共享Session,而且登录的用户一旦多,本地存放Session的方式也会使得内存资源紧张,因此我们可以使用Redis来存放SessionSpring Session是Spring官方提供的一个用于解决分布式Session的框架,他也支持使用Redis来存放Session,而且使用简

2021-06-20 23:45:57 456 2

原创 整合Spring Cache

整合Spring CacheSpring Cache是Spring框架为我们提供的一个缓存抽象层,无论我们使用一个map作为本地缓存,还是EnCache和Redis这种专业的缓存,都可以使用Spring Cache方便地集成,使用起来也很简单,使用注解在业务逻辑方法上标注,即可完成缓存操作,而不用将缓存操作和业务代码耦合在一起基本使用使用Spring Cache,首先需要导入对应的starter依赖<dependency> <groupId>org.springfra

2021-06-20 23:43:07 231

原创 整合Redis

整合RedisRedis是一款高性能的非关系性数据库,他基于内存存储数据,并且在底层做了数据结构优化,读写的效率都非常高,在开发中往往作为数据缓存的首选。在使用Spring Boot开发web应用时,可以使用Spring Boot官方提供的starter轻松整合Redis到项目中导入依赖使用Redis,首先需要导入对应的starter<dependency> <groupId>org.springframework.boot</groupId> &

2021-06-20 23:41:00 142

原创 单元测试流程控制

单元测试流程控制Spring Boot默认使用JUnit5作为测试框架,而JUnit5提供了丰富的API和注解,方便我们对测试的流程做控制断言断言机制就是在测试方法中编写判断逻辑,如果满足逻辑则测试成功,不满足则测试失败,简单的断言有以下几种:assertEquals:判断两个对象或两个原始类型是否相等assertNotEquals:判断两个对象或两个原始类型是否不相等assertSame:判断两个对象引用是否指向同一个对象assertNotSame:判断两个对象引用是否指向不同的对象as

2021-06-20 23:38:08 288 1

原创 Spring Boot单元测试

单元测试使用Spring Boot进行开发,就会涉及到做单元测试,而Spring Boot帮我们集成了单元测试框架JUnit5,在我们创建完一个Spring Boot项目之后,可以直接使用Spring Boot整合的单元测试功能基本使用使用单元测试功能,需要以下依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte

2021-06-20 23:34:28 204

原创 Spring Boot打印日志

打印日志Spring Boot默认使用Slf4j日志门面和Logback日志实现,关于日志门面和日志实现的关系,可以使用以下Slf4j官网的这张图表示,日志门面是日志实现的抽象层,我们调用日志的接口时应该调用日志门面的接口但是有时候一些框架的日志不是用slf4j的规范,这时候可以使用桥接jar包去转换,在Spring Boot整合其他框架的时候也是这么实现的,桥接的原理如下图所示输出日志在Spring Boot中打印日志,可以使用Spring Boot默认的Slf4j接口,使用日志工厂类Logg

2021-06-20 23:31:35 1611 2

原创 整合JPA

整合JPA使用Spring Boot框架做开发时,除了选择Mybatis作为ORM框架访问数据库,还可以选择另一款优秀的ORM框架Hibernate来访问数据库。我们可以使用Spring Data提供的JPA规范来使用Hibernate,JPA的底层默认实现就是Hibernate。导入依赖使用Hibernate框架,需要导入spring-boot-starter-data-jpa依赖<dependency> <groupId>org.springframework.b

2021-06-14 00:38:02 139

原创 整合Mybatis-Plus

整合Mybatis-PlusMybatis-Plus是在Mybatis框架的基础上再次进行封装,从而增强了Mybatis的功能,他最核心的功能就是自动生成CURD语句,使我们不需要再去编写简单的Sql语句,只需要编写一些复杂的需要定制化的Sql语句,而且他还有很多实用的插件可以使用Mybatis-Plus也提供了Spring Boot的场景启动器,和Spring Boot的整合也很方便引入依赖首先需要引入Mybatis-Plus的启动器依赖<dependency> <gr

2021-06-08 23:44:09 409 8

原创 整合Mybatis

整合MybatisMybatis是一款轻量级的ORM框架,他有灵活方便的特点,可以帮我们实现自定义的Sql语句,并且很方便地编写动态Sql,使用Spring Boot框架进行开发时也可以很轻松地整个Mybatis框架引入依赖使用Mybatis,首先需要引入Mybatis的启动器依赖<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spr

2021-06-08 23:41:01 272

原创 整合Druid连接池

整合Druid连接池Spring Boot默认使用Hikari作为数据库连接池,这是一款优秀的高性能连接池但是由于Druid连接池在监控和防火墙方面的突出优势,在开发中往往使用Druid连接池导入Druid连接池使用Druid连接池,首先需要导入Druid官方的启动器<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter&lt

2021-06-08 23:39:23 197 4

原创 整合JDBC

整合JDBC使用Spring Boot简单操作数据库,可以使用JDBC,而Spring Boot对JDBC进行了封装,从而省去了建立连接,创建Statement等繁琐的操作,只需要使用Sping Boot提供的JdbcTemplate即可引入依赖使用JDBC操作数据库,首先需要引入JDBC的启动器依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>

2021-06-08 23:35:18 111 5

原创 修改servlet配置

修改servlet配置通过Spring Boot的配置文件,可以方便地修改servlet配置,下面介绍常用的一些配置修改端口号修改端口号,可以使用server.port配置,默认是8080端口启动server: port: 8888配置完之后就会以指定端口启动修改项目路径修改项目路径,可以使用server.servlet.context-path配置,默认是/server: servlet: context-path: /hello配置了项目路径,要访问项目,就需要

2021-06-08 23:32:50 721

原创 多配置文件

多配置文件导入配置文件有时候我们需要根据配置文件的分类,将一个配置文件拆分到多个配置文件中,而不是全写在主配置文件application.yml中,这时候可以使用配置文件的导入功能使用导入功能很简单,首先在资源目录下创建一个yaml文件或者properties文件然后在主配置文件中用以下配置就可以将这个配置文件导入spring: config: import: classpath:person.yml配置文件优先级我们可以在Spring Boot项目中的这些地方创建配置文件

2021-06-08 23:31:30 210

原创 多环境配置

多环境配置使用多配置文件需要配置多个环境下的配置文件,只需要以application-{profiles}.yml的格式命名配置文件,{profiles}的值既配置文件的环境名称我们创建一个组件,从配置文件中取值,用来测试环境切换@Data@Component@ConfigurationProperties(prefix = "person")public class Person { private String name; private int age;}appl

2021-06-08 23:29:19 311

原创 使用YAML

使用YAML我们在使用Spring Boot的时候,可以使用properties配置文件来做配置,但是Spring官方更推荐使用YAML来做配置,他有着更清晰的结构,更简洁的语法,更少的占用空间,非常适合用来做以数据为中心的配置文件YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。YAML语法有以下基本特性:基

2021-06-08 23:23:46 385 6

原创 解决跨域问题

解决跨域问题有时候我们通过浏览器发送请求时,会碰到这样一个错误been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource这是浏览器为了安全禁止非同源访问引起的跨域问题,跨域问题可以通过部署Nginx解决,也可以通过修改Spring MVC的配置解决@CrossOrigin注解我们可以将@CrossOrigin注解添加在Controller类上

2021-05-22 00:07:55 457

原创 定制日期时间格式

定制日期时间格式当我们和前端交互中传递时间时,我们可以指定时间的表示格式,以方便前端的数据展示和接收处理前端的时间参数配置日期数据格式,可以通过配置文件的方式,也可以通过注解的方式配置文件指定日期格式我们定义一个接口,返回一个Date对象,测试在默认情况下的JSON转换会转换成什么格式@RestControllerpublic class MyController { @RequestMapping("/getDate") public Date getDate() {

2021-05-22 00:05:20 467

原创 请求异步处理

请求异步处理当我们使用Spring Boot进行web开发时,默认使用Tomcat作为Servlet的容器,而Tomcat的线程池大小默认为200,如果我们的处理流程很长,就可能因为请求过多而造成线程池里的线程占满,这时候可以使用异步线程返回Callable接口在Spring MVC中,如果我们的请求处理方法返回一个Callable接口,则会开启异步线程功能,主线程接收到请求,然后把处理交给副线程处理,这样主线程就可以空闲出来去处理别的请求当副线程处理完成后,再获取到副线程的处理结果,然后返回给前端

2021-05-20 10:17:59 624

原创 全局异常处理

全局异常处理在一个项目中,我们希望在发生一些异常时,如果在service层没有对异常进行捕获处理,则在返回给前端时可以做一个统一的异常捕获处理,这时候可以用Spring MVC为我们提供的全局异常处理机制异常处理器创建一个异常处理器,需要两个注解@ControllerAdvice和@ExceptionHandler,首先我们将@ControllerAdvice注解添加在我们自定义的异常处理器中@ControllerAdvicepublic class GlobalExceptionHandler

2021-05-20 10:14:44 340

原创 文件上传下载

文件上传下载我们使用Spring Boot开发web应用,可以很轻松地实现文件上传和下载功能文件上传MultipartFile类要使用文件上传类,只需要使用Spring提供的MultipartFile类即可,它可以封装上传的文件对象,方便我们对文件做各种操作首先我们将MultipartFile对象作为参数添加在请求处理方法的参数列表中,然后在这个对象上添加一个@RequestPart注解,并且绑定文件的名字,也就是前端页面标签中的name属性的值如果前端的一个标签上传的是多个文件,只需要将参数的

2021-05-20 10:12:19 193

原创 添加拦截器

添加拦截器当我们需要在所有的请求处理之前,先做一些预处理,或者在请求处理之后做一些后续处理,或者在处理执行流程中如果有异常则执行一段出错逻辑,这时候我们可以使用Spring MVC的拦截器功能事实上这个功能很常用,他的逻辑类似Spring的AOP,在所有的请求处理逻辑之上增加一些增强逻辑HandlerInterceptor接口首先创建一个拦截器类,并实现HandlerInterceptor接口public class MyInterceptor implements HandlerIntercep

2021-05-20 10:07:55 745

原创 扩展Spring MVC

扩展Spring MVC使用Spring Boot框架开发时,Spring Boot为我们设置了很多的默认设置,但是有时候我们对默认的Web设置想要做一些改变,参照官方文档,可以得知,这时候我们可以使用一个实现了WebMvcConfigurer接口的配置类来扩展web的默认设置@Configurationpublic class MyWebConfig implements WebMvcConfigurer {}实现这个接口之后,可以看到这个接口有很多的方法,这些方法就是我们可以做配置的设置,

2021-05-20 10:01:52 96

原创 设置Session和Cookie

设置Session和Cookie使用Spring MVC时,如果需要使用Session和Cookie,可以通过Servlet原生api设置Session和Cookie设置Session当我们需要保存Session时,如保存用户数据,只需要在请求处理方法的参数列表中添加一个HttpSession对象,然后调用对象的setAttribute方法和getAttribute方法,就可以轻松地设置和获取session@RestControllerpublic class MyController {

2021-05-20 09:42:20 504

原创 获取请求头和Cookie

获取请求头和Cookie当我们需要获取请求头中的参数,或者Cookie的时候,可以使用Spring MVC给我们提供的相关注解来完成@RequestHeader使用@RequestHeader注解,可以轻松地获取请求头中的信息,使用方法和获取请求中携带的参数类似,将注解添加在参数列表的参数前,将参数和请求头中的参数名绑定即可@RestControllerpublic class MyController { @RequestMapping("/user") public Map&

2021-05-20 09:38:38 3539

原创 转发和重定向中携带变量

转发和重定向中携带变量有时候我们需要在转发中或者重定向中携带变量,并且在转发或者重定向到的请求方法中获取变量,Spring MVC都可以帮我们做到这两点转发中携带变量当我们需要在转发中携带变量和获取变量时,我们可以使用以下几种方式原生HttpServletRequest类使用原生的HttpServletRequest类,可以做到在转发中携带变量,也可以使用他来获取变量携带变量时,将HttpServletRequest类添加在请求方法的参数列表中,然后调用setAttribute方法就可以将变量以

2021-05-20 09:35:27 599

原创 自动封装前端参数

自动封装前端参数除了用String类型或者基础数据类型接收参数,Spring MVC还可以帮我们使用集合框架或者自定义类自动封装前端的参数参数封装为List当同名的前端参数有多个时,可以使用一个List类,来作为请求接收方法的参数,参数名和请求中的参数名绑定,这样Spring MVC就会将这个参数封装成一个List类@RestControllerpublic class MyController { @GetMapping(path = "/user") public Map&l

2021-05-20 09:32:04 1273

空空如也

空空如也

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

TA关注的人

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