- 博客(50)
- 收藏
- 关注
原创 springboot同时接收json数据和 MultipartFile
【代码】springboot同时接收json数据和 MultipartFile。
2024-03-11 18:16:50 916
原创 设计模式中的设计原则
里氏替换法:在有继承关系的代码开发中,如果需要进行功能的扩展,不要再子类中改变父类中已经实现的方法,而是通过新增方法来扩展父类的功能。接口隔离原则:一个接口之中只做该接口需要的相关的功能,类似单一原则,不使代码臃肿。单一职责原则:一个类只干好一方面,专心做好一件事,不使代码臃肿。开闭原则:扩展新的功能但不改变原有的程序设计。依赖倒置法:我们定义类的成员遍历。
2023-12-21 21:13:05 585
原创 定制@ResponseBody
ResultBody使用该类声明使用定制的@ResponseBody。IgnoreResult该类用于忽略不使用@ResponseBody。Result该类为响应返回时alibaba规范式的返回值。配置自定义的ResponseBodyAdvice。
2023-12-20 20:46:00 811
原创 常用的建表但范式、反规范化
在上表中有俩个主键,复合主键,中部门地址只需要依赖部门名称即可,不需要依赖姓名,没有完全依赖全部主键,这种情况我们可以给部门单独分为部门表。上表中我们想知道各个职位相关的薪资,职位和薪资存在依赖关系,无法和工号直接产生依赖关系。一个表存在传递依赖,不符合第三范式。规范化是用于数据库设计的一系列原理和技术,它可以减少表中数据的冗余,增加数据完整性和一致性。首先需要满足第一范式,非主键字段必须完全依赖于主键字段,不能只依赖于主键的一部分。首先需要满足第二范式,非主键字段不能依赖于其他非主键字段。
2023-12-13 20:35:39 468
原创 GC垃圾回收的定义
为了提高GC的效率,一些gc会将内存分为不同的代,每个代中对象具有不同的生命周期,通常会将新分配的对象放到新生代中,新生代使用复制算法进行垃圾回收,老年代中的对象则使用标记清除算法进行垃圾回收,GC通过不同的算法来检测垃圾对象,其中常用的是计数算法和标记清除算法,引用计数算法会维护每个对象的引用计数,当某个对象的引用计数为0时,就可以视为垃圾并回收。标记清除算法则会从程序的根对象出发,标记所有可以访问到的对象,然后清除未被标记的对象。会标记所有可以访问到的对象,然后清除未被标记的对象。
2023-12-13 18:47:07 598
原创 死锁是什么?
占有等待:自己本身占有的锁不进行释放或还没释放,又去拿别人占有的锁,然后进入恶性等待。线程之间互相等待,互不释放锁,一种无意义的循环就是死锁。不可剥夺:除了自己可以释放锁外,不能通过其他方式释放锁。redis的锁可以设置过期时间。循环等待:线程之间互相等待。mysql自己有死锁检测。设置锁最大的等待时机。
2023-12-05 21:53:10 375
原创 redis雪崩、穿透、击穿
解决:我们可以判断redis中有没有数据,没有的话在去数据库查询前加锁,只让一个线程来查找,当查询的数据返回到redis后,所有用户就可以通过访问redis来获取数据,但是在分布式业务中,多进程环境里存在问题。雪崩:大量的redis缓存数据同时间全部失效,直接穿过了redis到数据库。设置缓存时,随机设置redis缓存的失效时间,让他们不在同一时间失效。穿透:redis和数据库都没有这个数据,形成缓存穿透,通常是恶意访问。击穿:在redis中没有用户要的热点数据,直接访问到数据库中查找。
2023-12-05 21:46:50 343
原创 hash冲突如何产生,hashmap如何解决hash冲突
hashMap采用了链式寻址法,存进去的key,hashMap会把这些key组成一个单向链表,然后采用尾插法,把这些key保存到链表的尾部,避免链表过长查询效率低下,在数组长度大于等于64的时候hashmap会把链表转为红黑树,减小链表查询的时间复杂度,提高从查询效率。hash算法会根据key的hash值进行取模运算,最后把值存入道数组指定的位置,两个不同的hash值的key最终取模后会落到同一个数组下标下,就形成冲突。建立公共溢出区,也就是把存在冲突的key同意放到一个公共溢出区里。
2023-11-28 20:29:03 572
原创 html+css+javascript+jQuery简述
使用link标签:必写参数:rel="stylesheet",stylesheet代表引入外部样式,href=“外部css样式的地址”。multipart/form-data:文件上传所需要的格式。伪类选择器 :hover 鼠标移入的事件例:mouseover,mouseout。button :普通按钮,实际开发中都是绑定事件。submit :提交按钮,在form表单中生效。reset :重制按钮,在form表单中生效。disabled :禁用,按钮也可以使用。action:表单数据提交到后台的位置。
2023-11-22 20:47:40 463
原创 feign.FeignException$InternalServerError: [500] during [GET]
多参时参数加@RequestParam。
2023-11-09 19:49:13 2338
原创 SpringBoot整合Security利用oauth2完成第三方验证登录
登录访问出问题或者二次登录不显示以上页面,二次登录需清除Token,清除后需要等待一段时间才可访问。另外令牌Token存在即使启动在多次springboot也不会出现以上页面,有登录缓存,不需要在二次登录。配置application.properties,配置第三方登录需要的配置,springboot服务端口默认端口为:8080,可配可不配,访问服务的Security默认登录地址:http://localhost:8080/login,点击下面小的gitee登录。//开启oauth2第三方登录。
2023-11-02 17:27:55 581
原创 org.springframework.security.authentication.InternalAuthenticationServiceException: Invalid bound st
建议在自定义的方法上使用@Select注解,把在mapper中写好的sql语句粘贴过来,就可以使用。mybatis找到不自定义在接口中的方法。目前没有其他办法解决。
2023-10-27 21:23:22 409
原创 java.lang.ClassCastException: com.baizhi.entity.User cannot be cast to org.springframework.security.
改回正常实体类路径即可。
2023-10-25 20:15:28 172
原创 springboot中security+mysql整合登录账号和密码:未完成
编写一个service实现Security包下的UserDetailsService,覆盖loadUserByUsername方法。配置application.propertiesapplication.properties。利用user和role的关系表user_role,表连接role身份表获取该用户所有身份。--mybatisplus 依赖-->--数据库引用数据池-->--lombok简化实体类代码-->--mysql依赖-->User实体类实现UserDetails。-- 用户角色关系表。
2023-10-25 20:13:10 94
原创 springboot整合springSecurity认证示例
启动springboot,访问local host:8080/aaa,成功拦截后跳转到login页面。--引入spring security依赖-->自定义securtiy的过滤器。编写简易controller。
2023-10-25 19:26:47 58
原创 分布式事务seata
TC(Transactiion Coordinator)- 事务协调者:维护全局和分支事务的状态,驱动全局事务的提交和回滚。在分布式系统下,一个业务跨越多个服务和数据源,每个服务都是一个分支事务,要保证每个服务最终一致,这就是分布式事务。同时提交,同时回滚,达成强一致,但是事务在等待过程中,处于弱可用状态。AT模式:最终一致的分阶段事务模式,无业务入侵,也是seata的模式模式。XA模式:强一致性分阶段事务模式,牺牲一定的可用性,无业务入侵。TCC模式:最终一致的分阶段事务模式,有业务入侵。
2023-10-24 21:27:38 39
原创 springcloud整合和下载seata
服务的application.properties中写入服务发现和注册服务到nacos。解压安装后修改/seata/conf下的application.properties。添加@GlobalTransactional到业务的入口,实现seata的XA策略。
2023-10-23 21:02:10 94
原创 springcloud项目 集成openfeign远程调用
GetMappering("项目地址");找到对应服务中controller的业务。子项目导入openfeign依赖和cloud负载均衡依赖。@FeignClient("服务名"):找到对应的服务。启动类添加feign注解。编写需要的Feign接口。
2023-10-20 14:43:32 41
原创 docker 常用命令
例:docker run --name mysql -p 3306:3306 -d mysql:5.7。docker run --name 容器名 -p 暴露端口号:容器内端口号 -d 镜像名。docker run --name mysql -d --network 网络名 mysql。docker network create -d bridge(默认网络) 网络名称、docker network connect 网络名 容器名。docker logs -f 容器名。
2023-10-17 21:26:09 35
原创 Docker-comepose的下载和基础使用,docker-comepose.yml的配置内容
dockers-compose up 启动yml配置的容器,必须得在docker-compose.yml所在的文件夹下运行。把下载好的docker-compose放到/usr/local/bin目录。docker-compose配置全局使用。
2023-10-17 15:32:28 160
原创 Dockerfile创建一个简易springboot的项目
1.快速创建一个springboot:2.4.17的项目 ,我们以下图的版本来创建项目。2.在pom文件中修改springboot版本号,添加需要的依赖。连接好数据库后,选择对应的库和表后右键mybatisplusx。注意容器的启动顺序,必须先把mysql先启动,后启动自建镜像。把打好springboot的jar添加到创建的空目录下。3.简易的配置好application.yml文件。运行docker bulid ,创建镜像。查看容器是否正常启动,查看启动日志。启动springboor,测试数据。
2023-10-17 09:39:47 56
原创 docker 启动es,出现ERROR: [1] bootstrap checks failed[1]: max virtual memory areas vm.max_map_count 的问题
添加:vm.max_map_count=262144。
2023-10-16 14:11:23 455
原创 docker 运行 rabbitmq容器
1.docker pull rabbitmq:3.8和docker pull rabbitmq :3.8-management后者有显现页面。
2023-10-16 14:04:37 50
原创 Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom:2.7.1.RELEASE in ali
maven的问题:这个镜像网址找不到对应版本的镜像。解决1:maven的镜像配置出问题了,建议换成图下。
2023-10-14 17:47:16 542
原创 docker volume 基本命令
1.查看数据卷docker volume ls2.创建数据卷docker volume create 卷名2.手动数据卷:第一次使用以本地路径下的内容为主,如果路径下没有内容,同样会同步到容器内路径。docker run -v 本地路径:容器内路径3.自动数据卷:不会影响互相的路径下内容,由docker维护docker run -v 卷名:容器内部路径4.查看具体的数据卷信息docker volume inspect 卷名
2023-10-13 15:41:57 297
原创 docker network命令的基本使用
1.docker 中的网桥类型:bridge, host ,none2.创建网络docker network create -d bridge(默认) 网络名称3.查看网络docker network ls4.查看一个网络具体细节docker network inspect 网络名称5.删除一个网络docker network rm 网络名docker network prune 删除所有未被使用的网络6.启动容器指定网络a.docker run -d --
2023-10-13 15:16:55 64
原创 创建springCloud项目流程之父子项目基础环境搭建
添加springcloud的全局管理,springcloud的依赖从alibaba的maven库寻找比较困难,所以建议去官方springcloud库寻找,此全局管理依赖并不是具体依赖,而是用来定义管理springcloud相关的依赖。7.获取定义的springcloud版本${spring-cloud.version}或${spring.cloud.version},和上图定义的标签保持一致。3.勾选Spring Web 选择相近与2.2.5版本的springboot的版本。
2023-10-12 11:51:50 426
原创 idea快速创建项目,常见问题-Error: Request failed with status code 500
idea快速创建项目,常见问题-Error: Request failed with status code 500
2023-10-11 19:51:54 1869
原创 idea如何引入子项目到父项目中
2.此时我们发现该子项目并未完全导入还和其他子项目有字体上的区别的。5.刷新maven项目,子项目就成功添加了。1.解压子项目并复制子项目到父项目目录下。4.在父项目的pom文件中添加子项目 id。3.在子项目的pom文件中找到项目id。
2023-05-08 20:50:10 1311
原创 如何拉取Nacos配置中心中的服务配置文件
在项目中的resources目录下编写bootstrap.yml文件来配置nacos的服务地址和配置文件地址,用于获取配置文件。在启动类中添加@EnableDiscoveryClient注解用于服务的注册和拉去。Data ID这里必须和bootstrap.yml中配置的服务名称保持一致。选择文件格式得和bootstrap.yml中配置的文件格式保持一致。打开naocs的配置中心,在配置列表的右上角点击+
2023-04-29 18:32:47 1177
原创 Sentinel流量控制组件的安装
3)启动并访问配置好的服务,sentinel才能检测的该服务,不可忽视的一步,然后再访问Sentinel的控制台页面即可。1.将下载好的jar包放到任意非中文的目录下,在目录框输入cmd回车,再执行以下命令。Sentinel是阿里巴巴开源的一款微服务流量控制组件。1)在服务中引入sentinel依赖。3.访问sentinel的页面。,端口和自己设定的一致即可。
2023-04-24 15:22:01 262
原创 服务雪崩的解决方案
服务键调用关系复杂,服务之间业务互相影响,如果a业务发生故障堵塞则依赖于服务a的b业务也会发生堵塞,此时不依赖a业务的其他业务似乎不受影响。限制业务访问的QPS,避免服务因流量的突增而故障。但是依赖a业务的服务请求被堵塞后,用户得不到响应,则tomcat的这个线程就得不到释放,越来越多的线程会堵塞。结果就是依赖于当前服务的其他服务随着时间的推移,最终也都会变的不可用,形成级联失败,雪崩就发生了。当发现访问服务的请求异常比例过高时,认为服务有导致雪崩的风险,会拦截访问服务的一切请求,形成熔断。
2023-04-24 14:43:54 160
原创 es如何使用拼音分词器
"search_analyzer": "ik_smart": 搜索时使用的分词器,如果不设置会使用“analyzer”设置的分词 器,都没设置则使用默认分词器。"analyzer": "i_analyzer": 使用自定义分词器,如果未设置会使用默认分词器。注意在创建索引时使用拼音分词器,而在搜索时使用其他分词器,避免在搜索时发生同音不同字的搜索结果。filter 分词后的处理 用拼音分词处理。在创建索引库时,在settings中设置三部分。把下载到的拼音分词器放到es的配置目录下。
2023-03-14 22:46:42 757
原创 利用mybatis-puls中@TableField实现在添加和修改字段时进行自动填充数据,可以在不同类中相同的字段使用,在其添加和修改时不设置此字段,减少大量冗余
updateFill()在修改时利用setValue()方法加入修改时需要自动填充的字段,参数一为字段名,参数二为填充值。inserFill()在添加时利用setValue()方法加入新增时需要自动填充的字段,参数一为字段名,参数二为填充值。利用@Commponent注解把类交给springboot管理,IOC控制反转,可以被多个类中的相同字段使用。记得在启动类中条件@ServletComponentScan注解来扫描自动装配。属性是指定需要在何时自动填充数据。在实体类需要自动填充的字段上加上。
2023-02-22 17:35:12 443
原创 Dto类是什么,怎么把普通实体类中的数据放到Dto中
Dto是普通实体类的扩展,Dto继承普通类,除了继承数据库类表对应的字段外,扩展了包括一对多、多对一的关系类的字段等,只要用于多表查询、修改、新增和表的扩展。
2023-02-22 17:13:15 1691
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人