TypechoJoeTheme

香草物语

统计
登录
用户名
密码
/
注册
用户名
邮箱
输入密码
确认密码
搜索到 206 篇与 的结果
2024-03-26

深度解析:如何在若依系统中集成阿里云OSS实现高效文件存储

深度解析:如何在若依系统中集成阿里云OSS实现高效文件存储
零、引言随着信息化技术的快速发展,企业级应用对于海量文件存储的需求日益增长。而阿里云对象存储服务(OSS)以其高可用、高可靠、低成本的特点成为众多企业的首选解决方案。本文将以流行的开源后台管理系统——若依系统为例,详细阐述如何将其与阿里云OSS无缝集成,以实现文件资源的安全、高效存储。壹、若依系统上传文件的现状若依系统基于ElementUI的el-upload组件,对于我们的业务来讲,目前存在两个需要改进的地方(1)文件选择后会自动上传,这个在前面的文章有过介绍若依系统上传图片压缩 - 香草物语 (xiangcaowuyu.net)(2)若依系统上传文件是上传到应用服务器的,我们需要实现的是上传到阿里云OSS,同时可以将OSS内容,通过内网下载到ECS,方便备份文件,减少OSS存储费用。叁、开通并配置阿里云OSS首先,您需要在阿里云官网注册并登录账号,然后开通OSS服务。在控制台中创建一个新的Bucket,为您的项目设定专属的存储空间,并根据业务需求设置合适的访问权限和地域属性。获取Bucket的相关信息,包括Endpoint、AccessKey ID 和 AccessKey S...
Laughing
2024-03-26

Java

188 阅读
0 评论
2024年03月26日
188 阅读
0 评论
2024-03-24

Spring Boot Controller调用某个方法报Service注入为null

Spring Boot Controller调用某个方法报Service注入为null
最近为了部署方便,尝试将项目的依赖与配置文件分开进行打包,可以参考Spring Boot分开打包依赖及配置文件 - 香草物语 (xiangcaowuyu.net)项目部署之后,试了一下,没有报错,但是后面在用的时候,有一个接口始终报空指针,通过日志分析,是服务层没有注入导致的。接口通过@Resource注入的 @Resource private ICarQuotationPriceHistoryService carQuotationPriceHistoryService;首先,既然别的接口都不存在问题,那么可以断定出现问题不是我们分打开打包依赖导致的。其次,在Idea中直接运行时,接口也不报错,说明方法本身不存在问题(姑且这么说吧),检查了配置、包名等地方,都没有发现问题。既然问题出现在这个方法,那说明肯定是这个方法出现了问题,检查了方法的注解、参数等,也都没发现问题,就在检查方法属性的时候,突然发现问题了,这个方法没有public,其他方法都是有pubic的,方法加上public后,问题解决其实这个地方,只是粗心大意了,忘记写public了。我们都知道,当一个方法没有修饰符...
Laughing
2024-03-24

Java

193 阅读
0 评论
2024年03月24日
193 阅读
0 评论
2024-03-24

Spring Boot分开打包依赖及配置文件

Spring Boot分开打包依赖及配置文件
壹、为何要分开打包依赖Spring Boot默认会将依赖全部打包到一个jar中,这样导致的问题就是我们的一个jar往往很大。加之平时我们分模块开发,往往修改很小的一个部分,就需要打包整个jar包,上传整个jar到服务器。比如我用阿里云服务器,3M的带宽,如果我不拆分开依赖,仅仅是上传jar都需要耗时接近1分钟的时间。当然这样也有一些其他问题,比如我这种多模块的项目,如果我们修改了其他模块(非启动类所在模块),那么我们需要记得将打包的jar要放到依赖对应的文件夹中。贰、为何要分开打包配置文件相对于分开打包依赖,其实配置文件才是更有必要打包的。Spring Boot配置文件默认包裹在jar包中的形式,一方面容易造成配置文件的覆盖,另一方面修改配置文件也相对比较麻烦。叁、如何拆分打包依赖及配置文件Spring Boot分开打包依赖及配置文件的方法也比较简单,我们只需要修改pom.xml文件即可。只需要注意一点就是,如果我们是多模块的项目,需要修改主工程的pom.xml文件。添加一些配置属性,方便修改 <properties> <!--依赖输出目录...
Laughing
2024-03-24

Java

202 阅读
0 评论
2024年03月24日
202 阅读
0 评论
2023-03-05

SprintBoot切面+Redis防止前端重复提交

SprintBoot切面+Redis防止前端重复提交
最近项目上遇到重复提交的情况,虽然前端对按钮进行了禁用,但是不知道是什么原因,后端仍然接收到了多个请求,因为是分布式系统,所以不能简单的使用lock,最终考虑决定使用redis实现。一、环境准备MySql:测试数据库Redis:使用Redis实现Another Redis Desktop Manager:跟踪Redis信息ApiFox:模拟请求,单线程循环及多线程循环Spring Boot:2.7.4二、准备测试数据及接口2.1、创建表创建一个最简单的用户表,只包含id、name两列create table User ( id int null, name varchar(200) null );2.2、创建接口2.2.1、配置依赖及数据库、Redis连接信息项目依赖<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&...
Laughing
2023-03-05

Java

596 阅读
1 评论
2023年03月05日
596 阅读
1 评论
2022-11-24

Spring Cloud Alibaba笔记修订版-第三章Nacos Discovery--服务治理

Spring Cloud Alibaba笔记修订版-第三章Nacos Discovery--服务治理
一、什么是服务治理服务治理是微服务架构中最核心最基本的模块,用于实现各个微服务的自动化注册与发现。服务注册:在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务的详细信息。并在注册中心形成一张服务清单,服务注册中心需要以心跳的方式去监测清单中的服务是否可用,若不可用,需要再服务清单中剔除不可用的服务。服务发现:服务调用方向服务注册中心咨询服务,保宁获取所有服务的实例清单,实现对具体服务实例的访问。通过上面的图会发现,除了微服务,还有一个组件是服务注册中心,它是微服务架构中非常重要的一个组件,在微服务架构里起到了一个协调者的作用。注册中心一般包含以下几个功能:服务发现服务注册:保存服务提供者和服务调用者信息服务订阅:服务调用者订阅服务提供者的信息,注册中心向订阅者推送提供者信息服务配置配置订阅:服务提供者和服务调用者订阅微服务相关配置配置下发:主动将配置推送给服务提供者和服务调用者服务健康检测检测服务提供者的健康状况,如果发现异常,执行服务剔除常见的服务注册中心包括:Zookeeper、Eureka、Consul、Nacos。Nacos是Spring C...
Laughing
2022-11-24

Java

551 阅读
0 评论
2022年11月24日
551 阅读
0 评论
2022-11-23

Spring Cloud Alibaba笔记修订版-第二章微服务环境搭建

Spring Cloud Alibaba笔记修订版-第二章微服务环境搭建
因为第一章都是一些概念性的东西,包括系统架构的演变、微服务架构的介绍(服务调度、服务治理、服务容错、链路追踪等等),大家感兴趣的可以阅读原文,我们这里直接从第二章微服务环境搭建开始。本次使用的电商项目中的商品、订单、用户为案例进行讲解。一、技术选型JDK :1.8maven :3.8.6数据库 :MySQL 8.0.31持久层 :SpringData Jpa其他 :Spring Cloud Alibaba 2021.0.4.0,截止到目前最新版本开发工具 :IntelliJ idea 2022.2# 二、模块设计springcloud-alibaba:父工程shop-common:公共模块【实体类】shop-user:用户微服务【端口:807x】shop-product:商品微服务【端口:808x】`shop-order:订单微服务【端口:809x】2.1、创建父工程打开idea,创建maven工程,选择【New Project】,输入Name、GroupId、ArtifactId,选择存储目录,JDK选择本机安装的1.8版本。点击CREATE完成项目创建。springcloud...
Laughing
2022-11-23

Java

642 阅读
0 评论
2022年11月23日
642 阅读
0 评论
2022-11-22

Spring Cloud Alibaba笔记修订版-序言

Spring Cloud Alibaba笔记修订版-序言
一、为什么会有Spring Cloud Alibaba笔记修订版一系列的文章1、加强个人学习很无意间看到的“一本书”,之所以打上双引号,是一位这不是完整意义上的一本书,其实如标题说的一样,是一本笔记。【笔记】其实更像是个人学习的一个总结,所以书中内容可能会针对个人有深有浅,对于旁人来说,就是左一榔头、有一棒槌,云里雾里,不知所踪。为了个人的学习加深,也为了将别人的东西消化成自己的东西,因此在阅读这本书的时候,有意的做一下记录,形成一套完整的适合大多数人学习的Spring Cloud Alibaba笔记。2、完善代码书中错误【马虎】的代码比较多其实从一开始阅读,我就发发现笔记中有不少“错误”或者说是马虎的粘贴导致的错误,比如用户的微服务叫service-product,其实这是商品的微服务。笔记内代码相对比较古老,好多依赖都已经存在已知的漏洞笔记中版本比较古老Spring Cloud Alibaba笔记写的比较早,所以使用的Spring Cloud Alibaba还是比较早的版本,这并不是说是啥问题,只是随着时间的发展,新的版本替代老的版本是必然的趋势,因此我在阅读这个笔记的时候,...
Laughing
2022-11-22

Java

686 阅读
0 评论
2022年11月22日
686 阅读
0 评论
2022-11-11

去掉IDEA 警告:Raw use of parameterized class ‘xxx’

去掉IDEA 警告:Raw use of parameterized class ‘xxx’
作为一个精致的代码主义者,是绝对不允许IDE里面出现各种屎黄色的警告信息的。比如Raw use of parameterized class xxx,当然出现这种警告有两种可能,一种是我们没有正确使用泛型,这种就比较好解决了正确使用即可,另外一种就比较膈应人,可能是调用别人的方法。一、对象带上具体的泛型 (推荐)这种就比较好理解了,好比我们相面New一个Map,我们只需要正确使用泛型即可。二、在方法上加注解这种就属于比较隔应的了,如果是调用别人的方法,要么强制转换,要么直接用,结果就是出现屎黄色的波浪线。这种方法就只能退而求其次,屏蔽到IDEA的提示,我们可以在方法上下面的注解 @SuppressWarnings({"rawtypes"})
Laughing
2022-11-11

Java

2,375 阅读
0 评论
2022年11月11日
2,375 阅读
0 评论
2022-11-06

Jackson反序列化时忽略某些属性的方法

Jackson反序列化时忽略某些属性的方法
在开发接口时,出于某些目的(比如有些字段我要设置默认值,不能受入参的影响),我们在入参字符串序列化成实体时,可能需要忽略某些属性。我们要达到的目的非常简单,一个用户类User.java,我们要达到的目的有两个:(1)控制序列化时,忽略name属性。(2)控制反序列化是,忽略name属性。一、@JsonIgnore注解当我们想控制是一个实体在序列化时,忽略某些属性,我们第一个想到的也许就是@JsonIgnore注解了,@JsonIgnore注解能控制实体在序列化时,忽略某些属性,但是无法控制实体在反序列化时忽略的属性。先来看一下我们测试用的User.java类。public class User implements Serializable { private String code; @JsonIgnore private String name; public String getCode() { return code; } public void setCode(String code) { ...
Laughing
2022-11-06

Java

1,148 阅读
0 评论
2022年11月06日
1,148 阅读
0 评论
2022-10-23

使用CompletableFuture<T>实现异步接口

使用CompletableFuture<T>实现异步接口
【同步API】同步API是我们传统方法,调用方法在被调用方法运行的过程中会一直等待,直到被调用方法返回。此时的调用过程,是阻塞式的调用。【异步API】与同步API相反,异步API会直接返回,或者至少在被调用方计算完成之前,将它剩余的计算任务交给另外一个线程去做,该线程和调用方是异步的,是非阻塞式调用。来看一下【同步API】与【异步API】的区别 public class Shop { public double getPrice(String product) { return calculatePrice(product); } public Future<Double> getPriceAsync(String product) { CompletableFuture<Double> futurePrice = new CompletableFuture<>(); new Thread(() -> { double price = ca...
Laughing
2022-10-23

Java

523 阅读
0 评论
2022年10月23日
523 阅读
0 评论
2022-10-12

Java BigDecimal Non-terminating decimal expansion; no exact representable decimal result

Java BigDecimal Non-terminating decimal expansion; no exact representable decimal result
在日常开发中,我们基本上都是用BigDecimal类型来处理金额,防止精度丢失。使用BigDecimal做除法时,如果出现除不尽的情况,系统就会报错之所以出现这个问题,是因为除法除不尽时,BigDecimal不知道如何处理了,因此,使用BigDecimal做除法时,我们需要指定结果的精度及四舍五入的方式。BigDecimal bigDecimalThree = new BigDecimal("3"); BigDecimal newBigDecimal = BigDecimal.ONE.divide(bigDecimalThree, 1, RoundingMode.HALF_EVEN); System.out.println(newBigDecimal);
Laughing
2022-10-12

Java

541 阅读
0 评论
2022年10月12日
541 阅读
0 评论
2022-10-03

java8函数式接口注解FunctionalInterface

java8函数式接口注解FunctionalInterface
函数式接口就是为Java 8的Lambda表达式准备的,Java 8允许使用Lambda表达式创建函数式接口的实例,因此Java 8 专门增加了@FunctionalInterface。什么是函数式接口我们提到如果接口中只有一个抽象方法(可以包含多个默认方法或多个 static 方法),那么该接口就是函数式接口。FunctionalInterface作用@FunctionalInterface就是用来指定某个接口必须是函数式接口,所以@FunInterface只能修饰接口,不能修饰其它程序元素。看下一下面的方法@FunctionalInterface public interface BufferedReaderProcessor { /** * 静态方法 */ static void process() { System.out.println("process"); } /** * 抽象方法 * * @param bufferedReader *...
Laughing
2022-10-03

Java

848 阅读
0 评论
2022年10月03日
848 阅读
0 评论