
SpringBoot
文章平均质量分 58
隐形喷火龙
十多年互联网从业经验,一个有创意的全栈程序员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
springboot对接豆包大模型
开通后会有代码示例,看了我上篇对接阿里云大模型的应该知道,这种对接用http库最好,可以兼容所有大模型,如果选择大模型提供的sdk反而麻烦。首先来到模型广场,选取你需要的模型,我这边要做图片理解的应用,所以选用了Doubao-1.5.vision-pro.代码:需要注意的是这个api key不是一开始给你的,而是在示例里面的。点立即体验,进入一个新的页面,可以上传图片,然后输入提示词体验。上面有个api接入,点击可以创建app key。我们还是让他来识别这张图片。原创 2025-04-22 10:22:24 · 616 阅读 · 0 评论 -
springboot对接阿里云大模型
阿里云百炼文档地址: 百炼控制台 首先跟着文档设置账号,新建一个api key文档地址: 百炼控制台你可以使用sdk来对接,但没有必要,因为所有接口对接都是http形式的,直接使用http库来对接就行了,使用http库还有一个好处是所有大模型的调用方式是想通的,你想换一个模型调用会非常方便,这里我使用okhttp库,下面的okhttp-sse库是非必须的,只有使用流式传输的时候需要我们来对接一个最简单的聊天接口,只要按照下图所以发送http请求就行了,其中Authorization放入刚申请的api原创 2025-04-21 15:24:21 · 778 阅读 · 0 评论 -
登录时图形校验
来生成图形验证码,lineCaptcha.getCode方法可以拿到生成的验证码,放入redis中,登录的时候取出来判断下是否一致。我们使用Hutool工具类。原创 2025-03-25 09:38:15 · 179 阅读 · 0 评论 -
SpringBoot2.7集成Swagger3
Swagger2已经在17年停止维护了,取而代之的是 Swagger3(基于openApi3),所以新项目要尽量使用Swagger3.原创 2024-03-18 14:45:09 · 3041 阅读 · 0 评论 -
Spring常用注解
使用注解创建bean@Configuration表示这是一个配置类,在方法上加@Bean注解表示这个方法返回的对象是一个bean,如果不指定@Bean的value值,这个bean的name默认是方法名@Configurationpublic class BeanConfig { @Bean("user1") public User user() { return new User("月清疏", 18); }}接下来打印bean的名字看看第一步原创 2021-11-01 15:27:30 · 4503 阅读 · 0 评论 -
SpringBoot集成邮件
发送邮件常用的有163邮箱,qq邮箱,其中发送邮件的协议叫SMTP,接收邮件的协议叫POP3/IMAP,IMAP协议比POP3更强大,不过我们不需要要关注,因为服务器集成邮件只会涉及到发送邮件,一般不涉及接收邮件。我们已163邮箱为例来讲解,首先要开通允许客户端发送邮件的功能登录进163邮箱后,点击设置选择开启服务,下面两个随便哪个都可以,点击开启后会提示扫码发送短信,发完短信会显示授权码, 这个授权码只会显示一次,要记录下来,后面会用到接下来就是代码阶段了1.引入依赖...原创 2021-10-14 16:37:10 · 5612 阅读 · 0 评论 -
SpringBoot进阶-缓存击穿,缓存穿透,缓存雪崩,集成Redisson(八)
redis很重要的一个应用就是缓存,缓存是提升系统性能的有效手段,今天我们就来聊聊缓存那些事。缓存实现来看一个缓存实现的代码,比较经典了,没啥难度@GetMapping("getById")@ApiOperation(value = "根据id获取用户")public Result<User> getById(int id) { String key = USER_KEY + id; //先从缓存中取 User user = (User) redisTe原创 2021-08-31 13:33:29 · 2565 阅读 · 0 评论 -
SpringBoot进阶-寻找附近的人,Redis实现交友APP(七)
前言现在是移动互联网的时代,几乎人手一个手机,而手机可以很轻松的获取到用户的定位信息,也就是经纬度。而交友APP的基础就是经纬度,它的核心功能一个是寻找附近的人,一个是查看对方与你的直线距离,而这些功能,用redis的新数据类型GEO可以很方便的实现。GEO常用命令存储地址空间位置geoadd key longitude latitude member返回两个位置间的距离geodist key member1 member2 [m|km]返回指定元素周边的元素geo原创 2021-08-27 14:55:53 · 2538 阅读 · 1 评论 -
SpringBoot进阶-Redis亿级流量UV统计解决方案(六)
网站运营数据我们知道对于一个网站而言运营数据很重要,他直接关系到你可以拉到多少投资,以及网站以后的优化方向。常见的运营指标有UV(Qnique Visitor,独立访客),PV(Page View,页面浏览量), DAU(Daily Active User,日活用户量),MAU(Monthly Active User 月活用户量).一般UV是如何统计的呢?主要通过请求ip来计算,一个独立ip算一个访客,需要去重统计。该如何存储呢?mysql?这个可以直接忽略了,很难扛住亿级流量。redi原创 2021-08-27 13:34:33 · 3253 阅读 · 2 评论 -
SpringBoot进阶-Redis亿级流量签到解决方案(五)
新类型一般面试的时候问到redis的数据类型,相信很多同学都能答上来5种,string,hash,set,zset,list.但是新数据类型,估计没几个能答上来。如果你能把bitmap,hyperloglog,geo以及应用场景说出来,肯定能加分不少。位图(bitmap)位图严格意义上来说不算新类型,它底层是用string来实现的,你可以把它理解成一个数组,不过这个数组比较特殊,每个元素只能存0或1.位图占用空间的计算公式为offset/8/1024/1024(MB),由于string单个k原创 2021-08-26 21:53:00 · 3435 阅读 · 0 评论 -
SpringBoot进阶-Redis数据类型及应用场景(四)
有序集合(Zset)zset是有序的,不可重复的集合,每个元素都有一个分数,根据分数从小到大排序。我们来看一个抖音热搜的案例,视频每次被点击分数加1,然后取出分数最高的前十个.//放入热门视频,初始点击量为0Set<ZSetOperations.TypedTuple> set = new HashSet<>();set.add(new DefaultTypedTuple("花木兰", 0d));set.add(new DefaultTypedTuple("我们不一原创 2021-08-26 20:03:31 · 2268 阅读 · 0 评论 -
SpringBoot进阶-Redis数据类型及应用场景(三)
List类型list类型对实现队列类场景很有用,像订阅列表,消息列表。比如我订阅了A,B,C三个人,这三个月只要有文章就可以放入我的订阅列表,方便查询首先把文章放入订阅列表//在列表左侧加入一个元素,返回列表长度redisTemplate.opsForList().leftPush("myList", "文章A");redisTemplate.opsForList().leftPush("myList", "文章B");redisTemplate.opsForList().leftPus原创 2021-08-25 11:39:22 · 2038 阅读 · 0 评论 -
SpringBoot进阶-Redis数据类型及应用场景(二)
key的操作返回匹配的所有key可统计在线用户数量(大数据量下慎用),redis命令:keys user:*java实现://获取所有匹配的keySet<String> keys = redisTemplate.keys("user:*");keys.stream().forEach(System.out::println);设置过期时间给k1设置10秒的过期时间(PS:后面的代码格式都是redis命令再对应java实现)expire k1 10/原创 2021-08-24 12:10:53 · 1971 阅读 · 0 评论 -
SpringBoot进阶-集成Redis(一)
集成第一步,导入依赖<!-- redis支持 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>第二步,支持json,redis默认的序列化反序列化是java序列化,调试不方便,改成jso原创 2021-08-23 17:03:34 · 1669 阅读 · 0 评论 -
ElasticSearch分布式实现原理
我们去拉货车时,不会想着去培养更健壮的马,而是应该考虑多找几匹马来拉车。所有分布式系统也是这个原理,垂直扩展毕竟潜力有限,我们应该多考虑如何水平扩展。ES如何实现海量存储ES是通过分片来实现海量存储的,ES的基本存储单位是索引,而索引可以分片存储。如下图比如一个商品索引,可以分成三个shard分表存储在三台电脑上,那就可以使用三台电脑的硬盘和内存,存储空间大大提升,搜索性能也能提升。ES如何实现高可用说到高可用,第一个应该想到的就是备份,ES确实也是这么实现的,shard分为pri.原创 2021-08-19 14:40:53 · 1404 阅读 · 0 评论 -
SpringBoot进阶-集成ElasticSearch(二)
集成ES,我们使用spring-data-es模块,这块API改动挺大的,以前的方法很多都过时了,我现在使用的spring-boot版本是2.3.2第一步,添加依赖<!-- ElasticSearch支持 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearc原创 2021-08-18 13:22:17 · 1888 阅读 · 0 评论 -
SpringBoot入门-集成ElasticSearch(一)
前言ES是现在流行的搜索引擎,在用ES之前,我们首先要明确一个问题,为什么要用ES?其实ES的很多功能MySQL也能实现,搜索可以用like,数据分析聚合可以用group by,似乎不用ES也行,现实也是如此,很多项目也没用到ES,我认为满足以下某一条的,就要考虑使用ES了。MySQL无法实现的一些功能,像分词搜索,高亮等。比如用小米的手机来搜索小米手机,MySQL是无法实现的,只能通过ES 海量数据存储与搜索,MySQL单表千万级压力就挺大了,ES单个索引存储十几亿的记录很常见,主要是ES可以很原创 2021-08-17 10:22:52 · 1431 阅读 · 0 评论 -
SpringBoot入门-打印请求日志
在日志系统中打印请求信息是很有用的功能,在开发中可以方便调试,在生产中可以快速定位问题,同时这些日志信息可以同步给大数据系统进行数据挖掘与分析。在Spring中实现打印请求日志很简单,直接使用CommonsRequestLoggingFilter就行了,但是这个filter有个问题就是不打印请求method(GET,POST等),像restful风格的接口都是通过method来区分接口的,还有就是无法定制信息,比如想打印用户名什么的也无法实现,这个时候就需要改造下了。看spring源码我们发现这个类原创 2021-08-16 10:12:13 · 4369 阅读 · 0 评论 -
SpringBoot入门-批量操作优化
批量选择处理是很多项目都会用到的常用功能。像人员角色选择,人员部门选择,人员门禁选择等。下图所示,左边是门禁列表,右边是人员列表,选择一个门禁,然后批量选择人员,选中的人员可以出入该门禁。对于这个功能一般怎么实现呢?先看数据库设计,由于是多对多的结构,需要建张中间表接下去删除door_id对应用户delete from user_door where door_id = ?再批量添加记录insert into user_door(?,?,?)如上图选择了两个人,所以这..原创 2021-08-12 10:21:50 · 1986 阅读 · 0 评论 -
SpringBoot入门-分组校验
我们在开发的时候会有这样的需求,当新增时不需要校验id,但当修改时id不能为空,这时就要用到分组校验了。第一步,新增UpdateGroup接口作为更新操作的标识public interface UpdateGroup {}第二步,只有更新操作才需要校验的字段打上这个标识,其他没有这个标识的都是默认分组@NotNull(groups = UpdateGroup.class)private Integer id;@ApiModelProperty(value = "用户名")@No原创 2021-08-11 16:29:22 · 3025 阅读 · 0 评论 -
SpringBoot入门-数据校验
对于数据校验是前端做还是后端做,相信前后端的小伙伴们会为此扯皮很久。其实数据校验前后端都需要做,只是侧重点不一样。前端数据校验主要是提升用户体验,所以需要注重界面展示和提示信息,后端数据校验主要是防止恶意攻击和插入脏数据,同时还有些业务层面的限制只能后端来校验。本章不讲解业务层面的校验,只讲解通用的数据校验。SpringBoot通用数据校验一般使用hibernate validator.第一步引入依赖<!-- 数据校验 --><dependency> <原创 2021-08-11 09:34:48 · 1639 阅读 · 0 评论 -
SpringBoot入门-解决跨域问题
跨域是浏览器的安全策略,浏览器的ajax请求只支持同域名的访问,但是现在普遍都是前后端分离的开发方式,前端域名和后台域名往往不一致,这时就需要后台在响应头里面加个允许跨域的字段。如果在每个controller里面加这个响应头会非常繁琐,所以需要用到过滤器,处理所有请求。这里需要注意一下的是chrome遇到跨域请求时会发送一个option请求,如果这个option请求正常返回才会发送正常请求,遇到这个option请求需要处理下,不然接口会被调用两次@WebFilter(filterName =原创 2021-08-10 16:29:31 · 1405 阅读 · 0 评论 -
SpringBoot入门-文件上传
文件上传是每个项目都会用到的基础功能,这里讲解下实现过程和一些最佳实践接收方式后台如何接收前台传过来的文件呢?其实很简单,用MultipartFile就能接收@PostMapping("file")@ApiOperation(value = "上传文件")public Result uploadFile(@RequestParam("file") MultipartFile file) { return resultOk(uploadService.upload(file));}原创 2021-08-10 13:53:19 · 1701 阅读 · 0 评论 -
SpringBoot入门-统一错误码
有了上篇统一异常处理,接下去就要做统一错误码了,我们在与第三方平台对接时,经常会看到对接文档中有错误码一览,这样你在对接过程中可以快速定位问题,在我们的项目中该怎么实现呢。第一步,定义错误码接口public interface BaseErrorCode { //错误码 int getValue(); //错误描述 String getDesc();}第二步,在自定义异常类ServiceFailException中接收该接口并处理public Serv原创 2021-08-09 14:59:14 · 2707 阅读 · 0 评论 -
SpringBoot入门-统一异常处理
在项目的开发和调试中,错误难免发生。在java中这种程序错误就叫做异常,如果程序出现异常,会是什么样子呢。看下图这种异常展现方式有很多问题,首先对用户很不友好,而且里面包含了栈信息,造成安全隐患,同时对于前端小伙伴对接也会造成不便。通用异常处理java中所有异常的基类是Exception类,处理好这个类就能处理所有异常了SpringBoot为我们提供了@ControllerAdvice注解来处理异常@ControllerAdvicepublic class ExceptionC.原创 2021-08-09 14:07:37 · 1377 阅读 · 0 评论 -
SpringBoot入门-开发环境热部署
我们再开发SpringBoot项目时,经常需要重启才能使新写的代码生效,特别是当项目变大时,一次重启就要一两分钟,相当耗时。有什么办法可以实现热部署呢?其实还是有的。第一步,引入devtools依赖,需要注意的是这个依赖只能放在应用模块,不能放在父模块,否则会有问题<!-- 热部署模块 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId原创 2021-08-09 11:06:35 · 1356 阅读 · 0 评论 -
SpringBoot入门-HelloWorld
SpringBoot介绍JAVA技术栈自我工作以来已经发生了多次大的变化,从一开始的SSH(Struts2,Spring,Hibernate)到SSM(SpringMVC,Spring,Mybatis),再到现在的SpringBoot,现在公司里面开发新项目SpringBoot基本上是标配,所以作为JAVA开发人员肯定要了解SpringBoot相关技术。SpringBoot用来解决哪些痛点呢?版本管理,我们知道开发后台项目往往会用到大量的第三方库,这些库经常会冲突,而SpringBoot通过统一原创 2021-08-04 17:00:31 · 1360 阅读 · 0 评论 -
SpringBoot入门-集成Swagger,统一返回值
集成swaggerswagger名气很大,用来生成接口文档的,相信大家都知道。不过swagger界面不够美观,使用起来不太方便,我这次安利的是一款国人开发的基于swagger二次开发的库-knife4j,用过的都说好!第一步,引入依赖 <!-- swagger --> <dependency> <groupId>com.github.xiaoymin</groupId> <artifa.原创 2021-08-07 15:08:04 · 3409 阅读 · 1 评论 -
SpringBoot入门-自动配置详解
@SpringBootApplication的作用@EnableAutoConfiguration通过查看SpringBootApplication的源码,会发现这是一个组合注解,其中最重要的注解是@EnableAutoConfiguration@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration {先看@AutoC原创 2021-08-06 15:36:56 · 1451 阅读 · 0 评论