openfeign远程调用
不患人之不己知,患不知人也。——孔子《论语》
书接上文,我们配置了nacos,实现了服务注册与发现
我们再配置一台
spring: cloud: nacos: config: server-addr: 127.0.0.1:8848 application: name: ruben-consumerserver: port: 8081
在配好的这台ruben-consumer中随便写个接口
package com.ruben.rubenproducerdemo.controller;import com.ruben.rubenproducerdemo.pojo.dto.PageDTO;import com.ruben.rubenproducerdemo.utils.AjaxJson;import org.springframework.web.bind.annotation.*;@RestController@RequestMapping("study")public class StudyController ...
nacos服务注册与发现
人生就象弈棋, 一步失误, 全盘皆输,这是令人悲哀之事;而且人生还不如弈棋,不可能再来一局,也不能悔棋。—— 弗洛伊德
下载
找到zip下载解压即可
进入bin目录
# 单机启动startup.cmd -m standalone
然后我们可以引入java的SDK
使用maven的GAV
<dependencies> <!-- alibaba cloud --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.5.RELEASE</version> <type>pom</type> <scope>import</sc ...
docker安装
一切的美德都包含在自我信赖里。——爱默森
朋友找我要装好docker的虚拟机,于是就装了一个啦
yum install docker
提示Y/N我们一直输入y然后回车就行了
最后看到Complete即可
我们可以输入
docker -v
查看版本
然后是保存快照
导出的话
管理->导出虚拟电脑
javaFaker
得之,我幸;不得,我命。——徐志摩
如果我们需要造一些假数据,例如随机姓名之类的,可以使用javaFaker
首先是GAV
<!-- javaFaker --><dependency> <groupId>com.github.javafaker</groupId> <artifactId>javafaker</artifactId> <version>1.0.2</version></dependency>
然后我们可以往数据库放入200条数据,这里用我们的Faker.instance(Locale.ENGLISH).name().lastName()生成用户名
@Resourceprivate MpUserService mpUserService;@Testpublic void insert() { AtomicInteger index = new AtomicInteger(5); List<UserPO& ...
避免list中remove导致ConcurrentModificationException
凡不是就着泪水吃过面包的人是不懂得人生之味的人——歌德
我们在list循环中调用remove函数删除自身元素可能会导致java.util.ConcurrentModificationException
例如
// 构造从0到20的listList<Integer> list = Stream.iterate(0, i -> ++i).limit(20).collect(Collectors.toList());// 删除list.forEach(list::remove);
首先我们可以使用removeIf代替
list.removeIf(i -> i.equals(i));
其次我们可以使用迭代器
我们可以看到removeIf的源码正是使用了迭代器
如下
Iterator<Integer> iterator = list.iterator();while (iterator.hasNext()) { Integer nowNumber = iterator.next(); iterator.remove(); ...
springboot文件大小限制
繁枝容易纷纷落,嫩蕊商量细细开。——唐•杜甫
springboot文件大小限制
首先是可以在配置文件中进行配置
spring: servlet: multipart: # 单个文件 max-file-size: 1GB # 一次请求 max-request-size: 1GB
还有,我们也可以在代码中进行配置
@Beanpublic MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); // 单个数据大小 factory.setMaxFileSize(DataSize.of(1, DataUnit.GIGABYTES)); // 总上传数据大小 factory.setMaxRequestSize(DataSize.of(1, DataUnit.GIGABYTES)); return factory.createMult ...
移动云存储上传文件
生命很快就过去了,一个时机从不会出现两次。必须当机立断,不然就永远别要。——罗曼·罗兰
首先打开官方文档
下载下方的开发包
期间我们可以去注册并配置,注意需要配置实名认证。。。
下面的步骤可以看快速入门
然后根据这篇博客把jar包引入maven项目
最后是代码
package com.ruben.utils;import com.amazonaws.ClientConfiguration;import com.amazonaws.auth.AWSCredentials;import com.amazonaws.auth.BasicAWSCredentials;import com.amazonaws.services.s3.AmazonS3Client;import com.amazonaws.services.s3.model.CannedAccessControlList;import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;import com.amazonaws.services.s3.mo ...
职场心得
职场二字,究竟是什么呢?我作为一名入职快一年的java程序员表示,职场就是——在尊重他人的情况下把自己该干的活干的漂亮!职场中最重要的品质就是尊重,因为在团队协作中,如果不尊重他人,就会给他人带来困扰,或者犯一些不应该犯的错误。在我还是小孩的时候,就曾憧憬于上班的白领:早上拿着咖啡走进办公室对大家道一声:早安,打工人!然后坐在办公椅上,像蜜蜂一样辛勤工作,下班后踩着路灯照亮的人行道回家。
对于工作的目的,老板说:工作就是为了让我过上更好的生活;在疫情中战斗的医护人员说:工作就是让患者康复,挽救更多的生命;城市环卫工人说:工作就是让城市变得干干净净的;对我来说:工作的目的其实很简单,养活自己,不要让父母操心。父母养育我这么多年,我现在要做的是尽量减轻他们的负担。
经常有人问我,学java学到什么地步可以找到第一份工作?我的回答始终只有一个:别问了,去学习!迷惘的时候,提升自己无疑是最正确的选择。我这个人,每天的生活非常丰富,但也非常规律。我不抽烟,酒仅止于浅尝。晚上12点睡,每天要睡足8个小时。睡前,我一定写一篇技术博客,然后做50个仰卧起坐,上了床,马上熟睡。一觉到天亮,决不把疲劳和压 ...
引入本地jar包
不管努力的目标是什么,不管他干什么,他单枪匹马总是没有力量的。合群永远是一切善良的人的最高需要。——歌德
对于本地jar包,如何让它加入我们的项目并使用maven的GAV管理起来呢
其实很简单
需要在当前项目根路径(在pom.xml的那层)使用
mvn install:install-file -Dfile=[本地jar包路径] -DgroupId=[自定义groupId] -DartifactId=[自定义artifactId] -Dversion=[自定义version] -Dpackaging=jar
例如
mvn install:install-file -Dfile=D:\file\files\Onest-S3-java-SDK.jar -DgroupId=com.move -DartifactId=moveOss -Dversion=1.0 -Dpackaging=jar
再使用我们定义的GAV引入,这样就可以使用我们本地jar了
<!-- 移动云对象存储 --><dependency> <groupId>co ...
reduce补充
先发制人,后发制于人。——《汉书》
关于stream中的reduce这里做个补充
我们使用reduce常用的其实有两种方式
System.out.println("求和:" + random.ints().limit(10).boxed().reduce(Integer::sum).orElseThrow(() -> new RuntimeException("求和失败"))); System.out.println("求和2:" + random.ints().limit(10).boxed().reduce(0, Integer::sum));
这里求和2中我们传入参数0,表示后面返回的是和参数0同类型的返回值
但如果使用第一种,返回的则是Optional
这里其实还有第三种重载方法,但这种方法我们使用场景较少
System.out.println("求和3:" + random.ints().limit(10).boxed().reduce(0, (i1, i2) -> ...