jenkins三种部署方式
Jenkins 是一款开源 CI&CD 软件
持续集成(CI)123持续集成是指多名开发这在开发不同功能代码的过程中,可以频繁的将代码合并到一起并且相互不影响工作。持续集成是在版本控制的基础上,通过频繁的代码提交、自动化构建和单元测试加快集成周期和问题反馈速度,从而及时验证系统可用性。为了保证后续的系统质量,在持续集成过程中,还会加入代码规范扫描、安全漏洞扫描、集成测试等活动,用来保证代码形成过程符合质量要求。持续集成的频率达到每天多次、频繁的集成,可以提前发现问题尽早解决冲突,使后续的持续集成更顺畅。
持续部署(CD)123持续部署是基于某种工具或者平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表一个开发团队的更新迭代速率。持续部署并不特指通过质量验证的制品自动部署到生产环境的特定环节。在持续集成过程中不断生成可执行的制品,需要尽快验证是否存在功能性能等方面的问题,或者尽可能快速的让最终用户可以使用这些功能。通过持续部署到测试环境、准生成环境中,可以使测试团队尽快开始测试,开发团队获得快速的反馈并响应。使研发和测试的协同加快了进程 ...
面向对象设计原则
面向对象【Object Oriented】四大特性:封装,继承,抽象,多态
一份好的对象设计,往往是以对象为中心,充分利用接口和多态来停供灵活性【应对变化,提高复用】
目标可扩展性
有了新的需求,新的性能可以容易添加到系统中,不影响现有的性能,也不会带来新的缺陷
可修改性
系统一部分的代码要修改时不会破坏系统的现有结构,也不会影响到其它的部分
可替换性
可以将系统中的某些代码替换为相同接口的其它类,不会影响到系统
七大设计原则
设计原则名称
定 义
使用频率
单一职责原则(Single Responsibility Principle, SRP)
一个类只负责一个功能领域中的相应职责
★★★★☆
开闭原则(Open-Closed Principle, OCP)
软件实体应对扩展开放,而对修改关闭
★★★★★
里氏代换原则(Liskov Substitution Principle, LSP)
所有引用基类对象的地方能够透明地使用其子类的对象
★★★★★
依赖倒转原则(Dependence Inversion Principle, DIP)
抽 ...
柔性可用和刚性可用
简述这两个词汇一般出现在事务当中刚性可用又称为刚性事务,也就是我们经常见到的”强一致性”,ACID理论柔性可用又称为柔性事务,也就是我们经常见到的”最终一致性”,BASE理论
前言进入主题之前,我们先简单聊一下事务在编程中,事务是指作为单个工作单元执行的一系列操作,用于确保数据库或者其它系统中数据的一致性和完整性而事务通常具有四个属性(ACID):
原子性(Atomicity)
事务的原子性是指事务必须是一个原子的操作序列单元任何一项操作失败都将导致整个事务失败,同时其他已经被执行的操作都将被撤销并回滚,只有所有的操作全部成功,整个事务才算是成功完成要么成功,要么失败
一致性(Consistency)
事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态事务执行的结果必须是使数据库从一个一致性状态转变到另一个一致性状态
隔离性(Isolation)
事务的隔离性是指在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰
持久性(Durability)
事务的持久性也被称为永久性,是指 ...
枚举工具类判断包含关系
123456789101112131415161718192021222324252627package com.tthk.inland.ticket.core.enums.order;import lombok.AllArgsConstructor;import lombok.Getter;import java.util.Arrays;/** * @Description 重试状态枚举 * @date 2023/4/7_15:04 * @author Foam */@Getter@AllArgsConstructorpublic enum RetryEnum { SYS_ERROR("系统错误,请您稍后重试"), SYS_ERROR_01("系统开了一个小差"); private String type; /** * @Description 判断是否需要进行重试,true:需要,false:不需要 * @date 2023/4/7 **/ public static Boole ...
服务构造静态引用
构造静态引用我们有些静态工具类中如果需要使用到service,这个时候引入就会有问题,如下所示
1234567891011121314151617package com.tthk.inland.ticket.core.utils.statistic;import com.tthk.inland.ticket.core.utils.redis.RedisUtil;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Componentpublic class StaticRedisTemplateComponet { @Autowired private RedisUtil redisUtil; private static void test(){ redisUtil.get("test"); }}
有时候我们在静态方法里面 ...
实体类转MAP工具类
实体类转MAP工具类123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657package com.tthk.inland.ticket.core.utils.other;import java.lang.reflect.Field;import java.util.HashMap;import java.util.Map;public class EntityUtils { /** * * @description 实体类转Map */ public static Map<String, Object> entityToMap(Object object) { Map<String, Object> map = new HashMap<>(); for (Field field : object.getClass().getDeclaredFields()) ...
http工具类统一封装
http工具类统一封装
个人封装使用,仅供参考,用来捕获接口异常,并且通知到企业微信
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354package com.tthk.inland.ticket.core.utils.https;import cn.hutool.http.HttpRequest;import cn.hutool.http.HttpResponse;import com.alibaba.fastjson.JSONObject;import com.tthk.framework.base.api.dto.CommonResult;import com.tthk.inland.ticket.core.enums.result.ResulEnum;import com.tthk.inland.ticket.core.enums.wechat.WeChatEnums;import com.tthk.inland.ticket.c ...
limiter限流
limiter限流单机限流思路介绍采用 Google 的 Guava 中的 RateLimiter.create 来进行令牌桶的分发,但是我们需要动态控制限流的速率,所以在这上面利用单例模式的“ 双重检查锁 ”和 “懒汉式”来进行动态创建
12345<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version></dependency>
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960package com.tthk.inland.ticket.core.utils.limiters;import com.google.common.util.concurrent.Rate ...
定义either类
定义either类
在我们日常开发中,stream流里面如果出现了异常是没法直接抛出的,需要进行try-catch进行捕获然后进行处理,或者干脆直接抛出异常停止
这个时候我们需要一个either工具类,区分成功和失败的执行结果,并且单独对失败的这些结果进行处理,以下是一些简单的实现
1234567891011121314151617181920212223242526272829303132333435package com.tthk.inland.ticket.core.utils.stream;import java.util.List;import java.util.Random;import java.util.stream.Collectors;import java.util.stream.Stream;/** * @Description either类 * @date 2023/4/20_15:05 * @author Foam */public class Either<L, R> { public static void main(S ...
规则枚举
规则枚举一些简单的猜想实现,用来去除ifelse或者switch,虽然在jdk17中已经引入了新的switch语法,但是还是想做一些尝试
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849package com.tthk.inland.ticket.core.enums.czloworder;import lombok.AllArgsConstructor;import lombok.Getter;import java.util.Arrays;/** * @author Foam * @Description 枚举 * @date 2023/5/4 17:12 */@Getter@AllArgsConstructorpublic enum LowOrderEnums { UNLIMITED("枚举1"){ @Override public boolean check(Integer i ...