Valid注解使用及扩展
@Valid注解使用及扩展
一、@Vaild注解介绍
使用@Vaild注解可以简化入参的校验,配合统一异常实现简单快捷的入参校验,具体使用参照以下
二、@Vaild具体使用
1、引入jar包
如果你是springboot项目,此依赖内已经引入,无需再次引入
12345<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.0.5.RELEASE</version></dependency>
如果没有,将依赖jar包引入到自己的项目中,maven依赖如下
12345678910<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</arti ...
Java线程池
Java线程池
一、介绍
线程池,顾名思义,这是管理一堆线程而出现的对象。与数据库的连接池一致,它的出现解决了线程的频繁创建和销毁,从而浪费大量资源的问题。
所以,线程池中有提前创建好的线程,使用时直接分配获取,使用完再由线程池管理是否销毁。
优点
降低资源消耗,也就是不需要重复多次的创建线程
更好的管理线程
比如可以获取当前运行的线程是什么
还在等待执行的任务有什么
二、使用线程池
在JDK5起提供了线程池的对象,ExecutorService和Executors
其中,ExecutorService和它的子类ThreadPoolExecutor是线程池的关键
而Executors是对应的工具类,里面有些工厂方法可以快速创建线程池
查看ThreadPoolExecutor的构造方法
12345678910public class ThreadPoolExecutor extends AbstractExecutorService { public ThreadPoolExecutor(int corePoolSize, ...
Java多线程
Java多线程
一、介绍
在了解线程之前,还需要简单了解进程的概念。简单的来说就是一心多用
在生活之中,我们常常可以一心多用。我可以一边打游戏,一边放着音乐听听歌,甚至可以再泡个脚。没错,这也可以理解成我的多线程生活。
而在计算机之中,也有以上同时进行的任务,这就可以叫做多线程,例如
进程:比如说电脑上开着游戏,音乐等其他多款应用。这每一个应用姑且可以算作一个进程
线程:往往一款游戏,有伤害计算,有数据上传,图像音乐等等的步骤,这每个执行的细项也可以理解成一个线程
所以总结来看,进程是一个应用运行的过程,可以包含多个线程运行,但至少必须要有一个线程,这样才能撑得起这是个进程。
线程是cpu对某个资源的调度计算的通道,这条通道下,cpu可以执行某些任务的调度。
在java中,我们从Main方法运行,所以称其为主线程
除了主线程外,java还有一个后台线程在默默地工作着,这就是GC线程,也就是垃圾回收所处的线程
二、Java线程的实现
1)继承Thread类
1234567891011121314151617181920212223242526272829303132333 ...
Java注解的介绍和反射使用
功能:Java注解的介绍和反射使用
一、注解
1、注解介绍
java注解==(Annotation)==,又称为java标注,是jdk5.0引入的一种机制。
Java 语言中的类、方法、变量、参数和包等都可以被标注,对这些代码段进行解释,编译时生成class时,标注也可以被编译。在运行时,java可以通过反射获取到注解内容,进行一些骚操作,进而简化开发。
2、注解分类
Java 定义了一些注解,有些比较常见
@Override:检查方法是否重写父类方法
@Deprecated:标记方法过时
@SuppressWarnings:忽略警告
元注解,标注注解的注解,一切注解的开始
@Retention:使用范围,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问
@Documented:标记这些注解是否包含在用户文档中
@Target:作用范围,可以标记哪些代码块,方法,类或者是字段等其他
@Inherited:标记这个注解是继承于哪个注解类
java7后加入的注解
@SafeVarargs:Java 7 开始支持,忽略任何使用参数为泛型变量 ...
git企业级版本管理
git企业级版本管理
一、介绍
git大家都知道,是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。它和SVN最大的不同,在与git分支的遍历。
但往往企业在使用git时,也仅仅把git当做SVN来使用,并没有很好的利用起git的分支,每个人都提交一堆commit,建立一堆杂乱无章的分支,导致项目的管理混乱。
所以需要企业根据实际的开发需要,定义一个git版本规范,是很有必要的。
二、分支命名
分支线
master:主分支,始终与线上发布的版本保持一致,只做合并,不做提交
test:测试分支,对应测试环境的分支
dev:开发分支,对应开发环境的分支
hotfix:火速修复分支,当线上代码出现bug,基于master分支创建出一个新的分支,进行修复bug
命名规则:[分支线]_[年月日 ]_信息
如开发权限代码:dev_20211128_auth
如线上支付出现bug:hotfix_20211128_pay
三、开发发布流程
3.1)正常版本需求开发
当开发人员需要开发新需求,开发人员需要基于master创建出一个新分支,注意分支名称要规范,例 ...
Java8新特性stream流
Java8新特性stream流
一、包装数据类型
123456789101112131415161718192021222324252627@Testpublic void main22() { List<Integer> list = new ArrayList<Integer>(){{ add(7); add(5); add(1); add(2); add(8); add(4); add(3); add(6); add(3); add(6); add(3); add(6); }}; // 过滤 List<Integer> filterList = list.stream().filter(a -> a < 5).collect(Collectors.toList()); // 排序(正序) List<Integer> sortList1 = list.stream().sorted().colle ...
SpringBoot日志配置详情
SpringBoot日志配置详情
一、介绍
在所有的项目中,日志是必不可少的,为了高效清晰的查找日志,可以配置日志输出的等级和格式。
在配置后,可以自定义输出日志到指定目录,可以按照天数来分割日志,可以按照日志级别分割日志,可以按照大小来进行分割日志。
输出的日志方式,可以说五花八门,但总有一款适合你的项目
二、简单配置
1、日志的级别
关于日志的级别打印,需要搞清楚日志等级的优先级
12345678910111213141516171819import lombok.extern.slf4j.Slf4j;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;@Slf4j@Componentpublic class LoggerTask { @Scheduled(cron = "0/30 * * * * ?") public void logTask(){ // ...
SpringBoot整合rabbitMq
SpringBoot整合rabbitMq
一、介绍
消息队列(Message Queue)简称mq,本文将介绍SpringBoot整合rabbitmq的功能使用
队列是一种数据结构,就像排队一样,遵循先进先出的原则。
而消息队列是一种消息中间件,在项目中我们可以将消息打包放入队列,再由消费者监听进行处理数据,再进行业务的处理
那么使用队列可以带来哪些好处呢
解耦
异步
流量削峰/限流
原本的程序再装上了消息中间件后,有哪些事需要特别注意的呢
高可用:简单点就是说,要保证消息中间件不要那么容易崩溃。作为桥梁的消息中间件崩溃了,那整个系统就相当于崩溃的情况的
数据丢失
重复消费
顺序性
话不多说,优缺点的例子以后补上,先来开始使用rabbitmq吧
二、rabbitmq的安装,项目依赖和相关配置
安装我就不多说了,我是通过这篇博客安装成功的,大家可以试试。
本文rabbitmq使用的版本是3.8.5,在不同版本下可能会出现与本文不同的结果,甚至是报错
创建springBoot项目,引入项目依赖,本文使用的springBoot版本为2.4.2,算是比较新的 ...