自定义注解实现参数校验,并实现多参数联动校验
Spring Boot中自定义注解实现参数校验 在日常开发中, 我们经常需要用到参数校验,而如果在Controller层中对每个参数都手动代码去校验,无疑是非常繁琐且不易于维护的。而javax正好提供了很多常用的校验,如:@NotNull、@NotBlank、@NotEmpty等常用的参数校验注解,我们只需要在对用的参数上添加该注解就可以完成校验。但是还有很多情况是javax中没有提供的,...
Spring Boot中自定义注解实现参数校验 在日常开发中, 我们经常需要用到参数校验,而如果在Controller层中对每个参数都手动代码去校验,无疑是非常繁琐且不易于维护的。而javax正好提供了很多常用的校验,如:@NotNull、@NotBlank、@NotEmpty等常用的参数校验注解,我们只需要在对用的参数上添加该注解就可以完成校验。但是还有很多情况是javax中没有提供的,...
前言 介绍了websocket与STMOP以及SockJs使用代码,基本上拿来即可使用。也介绍了2者的区别及个人推荐使用websocket方式。 websocket在Html5里使用,主要目标还是解决服务器能主动向客户端发送消息的功能。也就是全双工的通信方式。 Spring提供了对Websocket的支持,WebSocket API是比较低级的API,但恰恰是我比较中意的方式。因为接近...
针对某些读写比很高的场景,使用本地缓存可以极大提高访问效率。 springboot中对cache做了很好的支持 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifa...
Servlet容器采用多线程来处理请求,提高性能的同时也造成了线程安全问题。要开发线程安全的Servlet应该从一下几个方面进行: 1. 变量的线程安全; 多线程并不共享局部变量,所以我们要尽可能的在Servlet中使用局部变量; 2. 代码块的线程安全; 使用同步块Synchronized,防止可能调用的代码块;但是要注意的是,要尽可能得缩小同步代码的方范围,不要在service方法和...
区别 这两个接口说白了都是 Spring 在初始化 Bean 时对外暴露的扩展点,因为 Spring 框架提供的功能不一定能够满足我们所有的需求,有的时候我们需要对其进行扩展,那么这两个接口就是用来做扩展功能的。 其实不用看源码,单纯从字面上看,大家应该也能理解个差不多: BeanFactoryPostProcessor 是针对 BeanFactory 的处理器。 Bean...
一、Spark SQL简介 Spark SQL 是 Spark 中的一个子模块,主要用于操作结构化数据。它具有以下特点: 能够将 SQL 查询与 Spark 程序无缝混合,允许您使用 SQL 或 DataFrame API 对结构化数据进行查询; 支持多种开发语言; 支持多达上百种的外部数据源,包括 Hive,Avro,Parquet,ORC,JSON 和 JDBC 等; ...
Deployment Kubernetes Deployment Deployment为Pod和Replica Set(升级版的 Replication Controller)提供声明式更新。 你只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。您可以定义一...
一、创建DataFrame和Dataset 1.1 创建DataFrame Spark 中所有功能的入口点是 SparkSession,可以使用 SparkSession.builder() 创建。创建后应用程序就可以从现有 RDD,Hive 表或 Spark 数据源创建 DataFrame。示例如下: ```plain text val spark = SparkSession.bu...
本文主要基于 Spring 5.0.6.RELEASE 摘要: 原创出处 http://cmsblogs.com/?p=2731 「小明哥」,谢谢! import 标签解析完毕了,我们一起来看看 Spring 中最复杂也是最重要的标签 bean 标签的解析过程。 1. processBeanDefinition 在方法 #parseDefaultElement(…) 方法中,如果...
介绍 JUC包中的并发List只有CopyOnWriteArrayList。CopyOnWriteArrayList是一个线程安全的ArrayList,使用了写时复制策略,对其进行的修改操作都是在底层的一个复制的数组上进行的。 源码解析 初始化 CopyOnWriteArrayList内部包含一个array: /** The array, accessed only via get...