- 博客(28)
- 收藏
- 关注
原创 springboot实现分库分表时动态切换数据库(源)
在分库分表中,当主库挂了,需要将新插入的数据插入到从库中,可以通过动态地切换数据源来实现。在Spring Boot中,可以使用AbstractRoutingDataSource实现动态数据源切换。以上就是在主库挂了时,动态地切换数据源的实现方法。需要注意的是,具体的切换方法。
2023-02-14 10:22:38
1626
原创 以Springboot为例,如何连接多个数据库(源)
在Spring Boot中连接多个数据库,可以通过配置多个数据源来实现。可以在配置文件中定义多个数据源的配置,每个数据源有一个唯一的名称和对应的数据源属性。然后,通过在需要访问特定数据源的地方,使用对应的数据源名称来访问该数据源。
2023-02-14 10:14:02
5685
原创 解决在使用 Elasticsearch(ES)多线程批量操作时导致并发一致性的问题!!
现在就用一个在开发中的实际例子来说一下ES中多线程的情况下如何避免不一致性的问题。这里我使用了批量更新数据的一个例子;前端发送任务后,将ES中所有符合条件的数据的某一个字段全部更新一遍。由于数据量太大,所以准备使用多线程的方式去执行。例如前端发送了两个任务,这就代表我需要去更新两次。但是如果使用多线程就会导致最后一次更新完的数据可能将第一次更新的部分数据覆盖。在多线程情况下,更新 Elasticsearch 数据库可能会导致并发一致性问题。
2022-12-16 17:32:16
2823
原创 EasyExcel轻松读取Excel文件!
EasyExcel是一个Java库,用于快速、简单地读写Excel文件。要使用EasyExcel,您首先需要将其添加为项目的依赖:一下几种方式读取文件。
2022-12-09 11:58:58
25348
原创 SpringRetry(spring的重试机制)——只需一个注解
SpringRetry(spring的自动重试机制),SpringRetry是基于AOP实现的,在应用程序中,由于一些网络等不可预知的问题,我们的程序或者接口会失败,比如调用一个第三方的接口获取数据失败了,这时就需要重试机制,比如延时3S后重试、间隔不断增加重试等。都可以使用SpringRetry来实现。
2022-11-25 18:02:10
2922
原创 docker与虚拟机的区别,为什么Docker比虚拟机快?
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qOMDpYnz-1666946403773)(…/picture/image-20221028162632962.png)]虚拟机:虚拟机在安装一层硬件之后,安装一层虚拟机管理系统,然后需要虚拟出一个镜像Guest OS,如果想要多跑一个就需要多虚拟一个虚拟机,相当与每个应用都在一个虚拟机中运行,相对较慢。Docker:利用的是宿主机的内核,直接在主机上安装Docker这个服务,每个应用运行在一个个相对隔离的容器中;
2022-10-28 16:43:02
772
原创 LINUX环境下配置环境变量导致命令失效!!!
第三步:使用绝对命令vi,强制打开profile文件,然后将其中编写错误的语段进行修改,保存。在/etc/profile配置Java环境变量的时候;电脑按住Ctrl+Alt+F5键打开终端;我们直接在虚拟机的命令行中输入下列命令。虚拟机中显示一直 需要重复登陆;
2022-10-27 16:05:39
1659
原创 多字段模糊查询,数据库concat()函数用法。
1、关于数据库中concat()函数,刚开始使用MySQl测试的时候发现,里面的字段即使有一个为空返回的结果居然不为空,但是在使用clinkhouse测试的时候,发现里面只要有一个字段时空的就会返回空值。在遇到null的情况下,concat_ws不返回null,会自动忽略任何null的情况,继续拼接,但是这个函数clinkhouse不支持。②可以在concat中,使用ifnull函数,如concat(ifnull(colnum1,‘null’),ifnull(colnum2,‘null’))...
2022-07-25 10:46:14
1690
原创 代理模式之动态代理
method所述方法对应于调用代理实例上的接口方法实例,方法对象的声明类将是该方法声明的接口,它可以是代理类继承该方法的代理接口的超级接口。args包含的方法调用传递代理实例的参数值的对象阵列,或null如果接口方法设有参数,原始类型的参数包含在适当的原始包装器类的实例中。动态代理和静态代理的区别,动态代理的代理对象是在需要的时候可以传入需要代理的对象后自动生成的,而静态代理则是一对一的固定写好的。创建一个动态代理的类,主要用于在使用的时候去生成代理对象(也就是该实例中的中介)...
2022-07-19 14:40:55
255
原创 设计模式之静态代理
以房東租房为例,客户想要租到房东的房子的话。2、可以通过中介向房东租房(代理模式);添加一个房东()实现租房接口。1、可以直接向房东租房;
2022-07-19 10:29:33
163
原创 设计模式之桥接模式
桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立地变化,他是一种对象结构型模式又称为接口模式。如果在之前我们都需要将两者对应定义之后再取出,但是现在可以通过需要什么自动匹配。如电脑品牌和台式机笔记本这种类型之间的匹配。以一个品牌和样式的例子。2、创建两个真正的品牌。...
2022-07-18 18:03:41
168
原创 设计模式之原型模式
原型模式(PrototypePattern)使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。原型模式就像复印技术,根据原对象复印出一个新对象,并根据需求对新对象进行微调。
2022-07-18 16:04:07
160
原创 Mybatis中<include refid=“**“ >的使用。
include refid="**"标签在mybatis中经常出现。其实他的作用就相当于平时查询中的“*”。在经常对某些字段进行操作的时候,可以将所有需要的字段包装到refid中。
2022-07-14 10:36:11
6467
1
原创 抽象工厂模式
抽象工厂模式:创建工厂的工厂。抽象工厂模式提供了一个创建一系列相关或者相互依赖的对象接口,不需要指定他们具体的类。适用场景:优点:缺点:规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,增加了系统抽象性和理解难度。UML类图以手机产品抽象为例:直接上代码:1、XiaoMiPhone2、HuaWeiPhone3、XiaoMiRouter4、HuaWeiRouter5、IProductFactory创建总的抽象工厂6、IphoneProduct7、IRouterProduct8、HuaW
2022-07-13 16:37:11
162
原创 工厂模式【简单工厂模式&工厂方法模式】
创建者和调用者分离:实例化对象不使用new关键字,使用工厂方法去代替。1、简单工厂模式直接上代码。1.1新建一个Car接口:1.2再2创建两个实现类去实现car接口传统使用上述两个实现类的方式是直接New关键字创建一个对象。利用普通工厂模式去实现在原有的基础上创建一个工厂类CarFactory注意以上简单工厂模式存在问题当我i们需要新建一个实现类的时候就需要再CarFactory里面修改原有的类,违反了开放闭合原则。可以通过工厂方法模式来解决改问题;工厂方法模式将原有的CarFactory改
2022-07-13 14:54:39
242
原创 如何安全的实现单例模式!
注:只要是单例模式就必须要构造器私有 。1、饿汉单例模式这个在 启动的时候会把所有的对象创建出来,然而我们还没有使用,但是全部都创建好了。比较浪费空间。2、懒汉模式多线程下不能使用。解决:但是也存在相应的一些问题:上述代码种 lasyMan=new LasyMan();他不是原子性的。不安全容易导致指令重排。需要在如下图的地方加上volatile但以上的单例都是不安全的,可以通过反射机制去破坏单例。以上的所有情况可以通过枚举来解决。枚举自带单例模式。枚举类型的源码虽然是一个无参构造,但2最终反编译
2022-07-12 20:32:29
295
原创 函数式接口
只有一个抽象方法的接口我们称之为函数接口。 JDK的函数式接口都加上了**@FunctionalInterface** 注解进行标识。但是无论是否加上该注解只要接口中只有一个抽象方法,都是函数式接口。 Consumer 消费接口根据其中抽象方法的参数列表和返回值类型知道,我们可以在方法中对传入的参数进行消费。 Function 计算转换接口根据其中抽象方法的参数列表和返回值类型知道,我们可以在方法中对传入的参数计算或转换,把结果返回 Predicate 判断接口根据其中抽象方法的参数列表和返回值
2022-07-12 13:22:53
131
原创 JSONObject详解
1、JSONObject只是一种数据结构,可以理解为JSON格式的数据结构(key-value 结构),可以使用put方法给json对象添加元素。JSONObject可以很方便的转换成字符串,也可以很方便的把其他对象转换成JSONObject对象。2、JSON(JavaScript Object Notation的首字母缩写)是一种轻量级数据交换格式,最常用于客户端 - 服务器通信。它既易于读/写,又与语言无关。JSON值可以是另一个JSON 对象,数组,数字,字符串,布尔值(true / false)
2022-07-12 13:18:15
54926
原创 LIst接口的使用
特点:有序(添加的顺序与便利的顺序一致)、有下标、元素可重复有下标,在遍历的时候可以利用普普通for循环方法:1.list接口不仅包含了collection的所有方法,而且还有自己的一系列方法。void add (int index,Object o)——在index位置插入oBoolean addAll(int index,Collection c)——将一个集合中的元素添加到此集合中的index位置。Object get(int index)——返回集合中指定位置的元素List subLi
2022-03-24 12:06:44
443
原创 如何用Java将二维矩阵转换为稀疏数组,再将稀疏数组还原为二维矩阵?
package com.liang.array;public class ArrayDemo07 { public static void main(String[] args) { //1.创建一个二维数组11*11 int[][]array1=new int[11][11]; array1[1][2]=1; array1[2][3]=2; System.out.println("输出原始数组");
2022-03-14 17:04:22
388
原创 Scanner对象实现交互
用户交互Scanner建立scanner对象;scanner对象包含两种方法;①next()方法;以空格为结束输入符;next()方法不能有空格,空格之前的可以接收到,空格之后的会被自动去掉//使用next()方法接收 public static void main(String[] args) { //创建一个扫描器的对象,用于接收键盘数据 Scanner scanner = new Scanner(System.in); System.out.pr
2022-03-10 12:09:41
71
原创 在nodepad++中编译一个Java文件
1.在nodepad++中编译一个Java文件1.1新建文件并将后缀改为 .Java在nodepad++中编写代码public class hello{ //类名是hello。 public static void main(String[] arg){ //main主方法,后面String[] arg为参数。 System.out.print("Hello,wrold!"); //输出。 }}1.2在控制台编译运行在所建Java文件的文件目录前输入c
2022-01-25 12:05:01
149
原创 常用DOS命令及JDK的安装
1.DOS命令在CMD中执行DOS命令打开CMD的方式(1)开始+系统+命令提示符(2)Win键+R 输入cmd打开控制台(3)在任意文件夹下面,按住shift键+鼠标右键点击,在此窗口打开命令行窗口(4)资源管理器的地址栏前面加上cmd路径管理员方式运行:选择以管理员方式运行DOS命令 #盘符切换:输入D:+回车就可以切换到D盘 #查看当前文件下的所有目录:dir #切换目录:cd+要切换到的目录;cd..为返回上一级 #清屏:cls #推出终端:e
2022-01-23 23:15:15
1099
1
原创 Typora编辑器常用Markdown语法学习
常用Markdown语法学习以typora编辑器为例1.标题:#+空格 +标题名字----一级标题##+空格+标题名字----二级标题###+空格+标题名字----三级标题(前面加几个“#”号就代表几级标题,最高到六级)2.字体:例如:“Hello,world!”加粗(Hello,world!)----在Hello,world!的前后各加两个“*”。斜体(Hello,world!)----在Hello,world!的前后各加一个“*”。加粗斜体(***Hello,world!**)--
2022-01-15 15:02:29
119
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人