- 博客(175)
- 资源 (33)
- 收藏
- 关注
原创 springboot整合logback进行日志管理(下篇)
上一篇介绍了springboot整合logback的一些项目中用到的经验,本片文章继续介绍在项目中实际用到的工程经验。
2024-09-02 23:16:06
1154
原创 springboot整合logback进行日志管理(上篇)
在日常开发中日志的打印与日志的记录是非常重要的。市面上主流的日志管理框架有log4j、logback,二者各有优缺点v,由于项目中比较常用的是logback(我们自己项目就是用的logback),进行就主要介绍一下logback在真是项目中是如何整合的。
2024-09-01 23:31:12
1172
原创 java设计模式之:策略模式+简单工厂模式+模板方法模式项目案例实战
关于这三种设计模式是什么这里就不再赘述,本篇文章主要讲的是应用,不理解概念的可以先看一下我的其他关于讲解设计模式的文章,接下来直接进入主题。书接上文讲的策略+简单工厂模式,本次我们又引入了模板方法,将一些公用的方法定义在抽象类的方法中,不同子类各自实现各自的逻辑。我们这次还是根据不同的渠道类型进行通知客户(渠道类型有短信sms、邮件email、钉钉dingTalk)然后通过策略工厂来获取具体的策略类:(由于只有三个策略类,所以通过注入的方式对channel进行判断)然后三个子类短信、邮件、钉钉。
2024-07-21 23:52:47
629
原创 java日常开发中常用的集合工具类方法归总(java8 stream)
1、创建map集合的方式方法4:创建空map方法5 使用Guava库的ImmutableMap(不可变)方法6 使用Builder模式来创建更复杂的不可变Map方法7:java9及以后的创建方式方法8:Collections.singletonMap2、创建list集合的方式方式5:创建空list集合方式6:通过stream创建方式7:不可变list方式8:Collections.singletonList3、map集合常用操作判断map集合是否为空;获取所有键、所有值、获取值根据键的信息。
2024-07-14 00:28:56
418
原创 java设计模式之:策略模式+工厂模式整合案例实战(二)
上一篇文章介绍了策略模式+工厂模式的案例,但是上一篇是针对策略类比较少的情况下我们在策略工厂里面通过注入具体的策略实现类来完成,那如果策略实现类比较多呢?我们系统里面有很多销售和客户,我针对不同的场景需要圈出来该场景下的销售和客户进行其他操作(比如消息通知等),不同场景圈人群是不是就可以使用不同的策略来实现。到此策略模式+工厂模式之多策略实现类如何处理就结束了,欢迎点评和指出不足之处。然后是:圈2024.08.01号有购买了商品的客户策略。然后是接口实现:圈购物车有加购商品的客户策略实现。
2024-07-12 23:26:44
450
原创 java设计模式之:策略模式+工厂模式整合案例实战(一)
然后通过策略工厂来获取具体的策略类:(由于只有三个策略类,所以通过注入的方式对channel进行判断)案例1:项目中对系统中的客户和销售进行事件通知(短信、邮件、钉钉)到此该版本的策略模式+工厂模式就结束了,欢迎点评和指出不足之处。首先要有通知的策略接口,接口里面要有一个方法就是通知的方法。有了接口那必然有实现类,三个实现类短信、邮件、钉钉。该案例是针对策略类比较少的情况。下一篇会讲解策略类比较多的案例。本文介绍项目中常用的。
2024-07-12 23:09:31
1107
原创 Java设计模式之代理模式
静态代理和动态代理模式都要求目标对象去实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何接口,这个时候可以使用目标对象的子类来实现代理,这就是cglib代理。即通过代理对象访问目标对象,这样做的好处是可以在目标对象实现的基础上增强额外的功能操作,即扩展目标对象的功能。缺点是因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,一旦接口增加方法,目标对象和代理对象都要维护。静态代理在使用时,需要定义接口或者父类,被代理对象(目标对象)与代理对象一起实现相同的接口或者是继承相同父类。
2023-04-18 23:08:12
925
原创 Java设计模式之七大原则
如果对每个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。3、依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。4、使用接口或抽象类的目的就是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。2、提高类的可读性,可维护性,降低变更引起的风险。
2023-04-16 21:23:02
546
原创 Java设计模式之单例模式
单例模式确保一个类只有一个实例,并提供一个全局访问点,实现单例模式的方法是私有化构造函数,通过getInstance()方法实例化对象,并返回这个实例。如果想要线程安全直接getXXX方法加上synchronized,简单粗暴,但是效率低。其实很简单,在构造方法中加一个判断即可。改造之后如果再想通过反射创建对象的话就会直接抛出异常。缺点:可能存在线程不安全的问题,需要解决线程安全问题。优点:共享资源全局使用,节省创建时间提高性能。破解方式一:通过反射进行破解单例模式。
2023-04-11 23:30:11
423
原创 Java设计模式之状态模式
state模式将每一个条件分支放入到一个独立的类中,这使得你可以根据自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。2、状态模式不同状态下做的事情不同,而策略模式做的都是同一件事,例如聚合支付平台,有支付宝、微信支付、银联支付,虽然策略不同,但最终做的事情都是支付,也就是说他们之间是可替换的。反观状态模式,各个状态的同一方法做的是不同的事,不能互相替换。1、状态模式重点在各状态之间的切换从而做不同的事情,而策略模式更侧重于根据具体情况选择策略,并不涉及切换。
2023-04-10 00:17:18
580
原创 Java设计模式之门面模式
facade类相当于Engine、Wheel、Light三个模块的外观界面,有了facade类客户端就不需要亲自调用这三个模块了,也不用知道三个模块内部实现的细节,即客户端只需要和facade交互就行。通过对客户端提供一个统一的接口用于访问子系统中的一群接口。3、通过使用Facade更好的划分访问层次,有些方法是对外的,有些方法是对内的,把需要对外的功能集中到门面中,方便了客户端的调用。1、子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统模块进行交互,只需要跟门面类交互就可以了。
2023-04-09 22:28:04
628
原创 Java设计模式之工厂模式
工厂模式就是将创建对象的具体过程和使用过程分开,这样能够使代码更加灵活。简单工厂模式工厂方法模式抽象工厂模式比如在没有工厂的时候,用户需要一台奥迪车,那么就需要用户去创建一台奥迪车,然后使用简单工厂模式:如果我需要一辆奥迪,我不需要自己去创建奥迪,想要奥迪哪个牌子直接通过工厂创建就行了,比如我需要奥迪A4L,那工厂就去创建奥迪A4L。
2023-04-09 18:31:17
522
原创 java设计模式之模板方法设计模式
模板方法是基于继承实现的,在抽象父类中声明一个模板方法,并在模板方法中定义算法的执行步骤(即算法骨架)。在模板方法模式中,可以将子类共性的部分放在父类里实现,而特性部分在子类中实现,只需将特性部分在父类中声明成抽象方法即可,使得子类可以在不改变算法结构的情况下重新定义算法中的步骤,不同的子类可以以不同的方式来实现这些逻辑。模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术,没有关联关系。因此,在模板方法模式的类结构图中,只有继承关系。
2023-04-08 17:09:29
1014
1
原创 java设计模式之策略模式
策略模式是一种行为模式,它将对象和行为分开,将行为定义为一个行为接口和具体的行为实现,说白了策略模式就是用来解决多个if判断的情况的。
2023-04-02 23:11:01
4606
原创 Redis学习(三)之 分布式锁详解
zookeeper也是一种k-v形式的存储中间件,它内部结构是树形的,zk集群中主节点叫做leader,从节点叫做follower,使用zk就能解决主从同步引起的分布式锁失效问题,这是因为zk保证的是一致性,leader收到请求后会同步数据给follower,收到半数上的follower ack之后leader才会给线程返回ack,即使这个时候leader挂了,已经同步到数据的follower由于数据最新必然会被选为新的leader,因此zk不存在集群分布式锁失效问题。
2022-11-28 00:53:45
3490
原创 Redis学习(二)之 Redis Cluster集群
当客户端向一个错误的节点发出了指令,该节点会发现指令的key所在的槽位并不归自己管,这时它会向客户端发送一个特殊的跳转指令携带目标操作的节点地址,告诉客户端去连接这个节点获取数据。redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用等方面变现一般,特别是在主从切换的瞬间存在。这种方 式下,持有最新数据的slave将会首先发起选举(理论上)。
2022-11-22 23:19:38
3167
原创 Redis学习(一)之 持久化、主从与哨兵架构
jiaruredis持久化在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。比如说, 以下设置会让 Redis 在满足"60秒内有至少有 1000 个键被改动"这一条件时, 自动保存一次关闭RDB只需要将所有的save保存策略注释掉即可。还可以手动执行命令生成RDB快照,进入redis客户端执行命令或。
2022-11-20 21:31:01
203
原创 java中关于接口多个实现如何进行注入总结
注意:点睛之笔就是每个实现类里面都返回了对应的枚举值,这样就可以直接在controller里面注入List,利用枚举值来判断,将不同的开卡类型的请求分别转发到不同的实现类里面。需求:需求就是我一个系统既可以开通工商银行虚拟卡,也可以开通建设银行的虚拟卡,开通之后将开卡数据存储到数据库。step5:定义controller,调用接口来完成不同的开卡请求,打到不同银行开卡实现类里面。step3:定义工商银行开卡实现类。step4:定义建设银行开卡实现类。step5:定义开卡银行枚举类。
2022-11-14 22:43:51
1547
原创 mybatisplus和java8一些常用方法总结
Collections.singletonList()被限定只被分配一个内存空间,也就是只能存放一个元素的内容,所以实际开发中如果有特殊要求只需要List存放一个元素,就可以使用该结构存储。2、select * from user where name='龙翔' and hobby='骑马钓鱼' (只要一条数据)Collections.singletonList()传入什么类型的参数,就返回List 类型数据。4、Collections.singletonList()使用讲解。
2022-11-12 23:25:55
580
原创 docker实战学习2022版本(八)之compose容器编排和轻量级可视化工具Portainer
Docker-Compose 解决了容器与容器之间如何管理编排的问题。compose官网地址:https://docs.docker.com/compose/compose-file/compose-file-v3/安装步骤:https://www.portainer.io/v/ce-2.9/start/install/server/docker/linux。docker-compose ps # 展示当前docker-compose编排过的运行的所有容器。
2022-11-07 00:47:06
1061
原创 docker实战学习2022版本(七)之docker网络学习
代表网卡一,网卡二,网卡三……1 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。通过上述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。
2022-10-31 00:19:49
222
原创 ShardingSphere5入门实战(四)之sharding-jdbc实现水平分片
springboot整合sharding-jdbc进行水平分库分表
2022-10-17 23:47:36
1176
原创 ShardingSphere5入门实战(二)之sharding-jdbc实现读写分离
springboot整合sharding-jdbc实现读写分离
2022-10-16 00:21:00
1698
1
原创 ShardingSphere5入门实战(一)之docker容器搭建mysql一主二从;主从复制
ShardingSphere入门(一)之docker容器上安装mysql一主二从服务器,实现主从复制
2022-10-15 17:30:44
1054
原创 springboot导出下载csv文件
首先效果图如下所示:数据从数据库查询出来之后导出成csv文件csv文件其实就是将数据进行逗号分隔,但是csv文件还支持使用excel/wps 来打开,下面就是我使用excel打开后的数据格式:其实总体实现还是比较简单的,就是将从数据库查询出来的数据写进csv的文件其他就不多说了,下面直接上代码:package com.example.txsmsboot.controller;import com.example.txsmsboot.entity.Teacher;impor..
2022-05-22 22:40:26
1385
原创 springboot整合腾讯云短信服务
本来是打算使用阿里云的,但是发现阿里云短信申请签名的时候现在不允许个人申请了,因此改用腾讯云短信服务首先登录腾讯云官方网站:搜索短信,点击免费试用个人用户申请开通之后可以看到可以免费使用100条短信(学习来说够用了)然后进行短信签名的申请:我选择类型是公众号(因为我真的有公众号),大家以个人需求为准第二步创建正文模板:第三步等待审核:...
2022-03-19 20:46:56
1504
4
原创 springboot整合阿里云oss上传文件(图片或视频)
阿里云oss:是一个分布式的文件服务系统马,可以进行图片的上传和下载首先要有自己的阿里云账号,登录之后搜索对象存储oss这个时候我们需要开通一下oss,开通之后进入oss控制台,然后需要创建Bucket(类似于文件夹,用于存储我们的图片等信息)这个时候bucket列表里面就会有我们刚才创建的bucket:那下面就使用springboot来整合oss,完成图片的上传和下载:注意:调用oss也需要accessKey和secret我们先看下官方提供的接口文档...
2022-03-15 00:31:43
3863
3
原创 springboot整合阿里云短信服务demo
1.登录阿里云搜索短信服务,进来后可以看到主要有以下四个步骤第一步申请签名:注意:阿里云目前不支持个人用户申请未上线业务签名审核通过之后如下图所示:下一步就是申请短信模板:审核通过之后如下图所示:(记住模板code,后面会用到) 由于短信发送是我们调用阿里云的api,那么调用阿里云的api要有访问阿里云api的密钥,也就是AccessKey Secret,因此我们要获取到自己的AccessKey Secret申请之后可以看到相关内容:...
2022-03-13 17:00:33
1825
原创 springboot整合jwt
JWT(Json Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。JWT最重要的作用就是对 token信息的防伪作用。JWT的原理:一个JWT由三个部分组成:公共部分、私有部分、签名部分。最后由这三者组合进行base64编码得到JWT。公共部分主要是该JWT的相关配置参数,比如签名的加密算法、格式类型、过期时间等等。Key=
2022-03-10 00:26:59
1667
原创 springboot项目整合nacos
开始的开始是需要安装一下nacos(windows版本或者linux版本都可,这里不再赘述)比如下面这种,模块与模块之间的调用一般会选择注册中心+feign/openFeign来进行接口之间的调用,今天就说一下nacos作为注册中心来和springboot进行整合1.首先需要引入nacos的依赖<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spri.
2022-03-06 22:05:24
2816
原创 mongodb入门学习(三) 之 springboot整合mongodb
spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够灵活,MongoTemplate正好可以弥补不足。新建一个springboot项目,引入以下依赖:<dependency> <groupId>org.sprin
2022-03-05 01:35:05
957
XItextRender将html文件转为pdf下载deno(解决中文不显示和图片等问题)java demo
2021-11-22
RoyalmobileSelect.rar
2020-03-30
jq22jquerydate9068201905062356.zip日期插件,插件时间格式(2019-09-09 18:09)
2019-05-29
springboot项目整合sharding-jdbd实现一主二从读写分离项目
2022-10-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人