Java
文章平均质量分 63
~Rookie~Newbie~Noob~
这个作者很懒,什么都没留下…
展开
-
docker 运行 tdengine 并且mybatis 连接
指定 hostname,客户端连接的时候会用到。指定 版本,因为后面的安装的客户端和java连接时使用的驱动,需要匹配。原创 2024-02-19 15:36:06 · 703 阅读 · 0 评论 -
Idea 打包java project,并运行
如果提示no main manifest attribute in xxxx。原创 2022-08-01 20:55:19 · 275 阅读 · 0 评论 -
SpringBoot 配置多数据源
1. Maven配置<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.原创 2022-04-20 22:41:03 · 1541 阅读 · 0 评论 -
QueryDSL 关于Q类找不到的问题
先编译代码,如果是在idea中,光标移动到项目上,F4,让后如图操作2. 回到项目中编码,就可以找到Q类了原创 2022-03-10 19:29:28 · 4503 阅读 · 4 评论 -
使用阿里云的身份证实名认证接口
如何使用身份证实名认证接口呢?充钱!充钱!充钱!首先,去阿里云市场购买身份证实名认证服务。购物之后,我们会得到:AppKey,AppSecret,AppCode根据官方提供的实例代码,使用实名认证接口。我这里有一个自己测试过的代码,发生请求,用到的Spring提供的RestTemplate类。 /** * * @param realName 用户的真实姓名 * @param carNum 用户的身份证号码 * @return 验证的结果原创 2022-02-21 21:32:40 · 8383 阅读 · 0 评论 -
前后端分离项目-密码传输
在前端登录或者注册过程中,需要向后端传送密码。密码需要先加密,保证传输过程不被窃取和查看。可以对密码MD5后传输到后端。(前提是密码要足够复杂,这样生成的MD5不容易使用彩虹表破解)后端使用加盐加密算法对MD5值进行处理后存储在数据库中。可以使用SpringSecurity 中的BCryptPasswordEncoder类处理MD5。使用其提供的 matches 方法进行密码比对就可以了。...原创 2022-02-21 11:14:14 · 5369 阅读 · 0 评论 -
更安全的验证方式-极验验证
简介极验验证是一种在计算机领域区分自然人和机器人的,通过简单集成的方式,为开发者提供安全、便捷的云端验证服务,与以往传统验证不同的是,极验通过分析用户完成拼图过程中的行为特征,通过数据分析来判断是人还是机器。注册https://www.geetest.com/Register注册完成后,获取到ID和KEY。相关参考文档文档地址:https://docs.geetest.com/sensebot/start/服务端:https://docs.geetest.com/sensebot/deploy原创 2022-02-20 10:08:37 · 836 阅读 · 0 评论 -
SpringSecurity 学习(一)
SpringSecuritySpringSecurity简介安全框架概述什么是安全框架?解决系统安全问题的框架。如果没有安全框架,我们需要手动处理每个资源的访问控制,非常麻烦。使用安全框架,我们可以通过配置的方式实现对资源的访问限制。常用的安全框架Spring Security:Spring家族中的一员。是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置Bean,充分利用了Spring IoC,DI和AOP功能,原创 2022-02-13 11:51:06 · 421 阅读 · 0 评论 -
使用MyBatisPlus的字段自动填充功能
比如对于用户增加和修改操作,数据库通常需要记录修改时间,更新时间等字段。在Spring IOC容器放入组件 AutoFillHandler, 该组件需要实现MetaObjectHandler并增对数据表中需要填充的字段做设置@Componentpublic class AutoFillHandler implements MetaObjectHandler { /** * 插入元对象字段填充(用于插入时对公共字段的填充) * 新增数据时要添加的为: * 1原创 2022-02-10 12:02:30 · 882 阅读 · 0 评论 -
自定义日志切面
所有的api都作为切面,当有对api的访问时,记录日志。WebLog是一个自定义类:@Data@EqualsAndHashCodepublic class WebLog { /** * 操作描述 */ private String description; /** * 操作用户 */ private String username; /** * 消耗时间 */ private Intege原创 2022-02-08 12:31:58 · 249 阅读 · 0 评论 -
JetCacheConfig的使用
引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- ali's jetcache--><dependency> <groupId>com.alicp...原创 2022-02-08 12:16:21 · 684 阅读 · 0 评论 -
@EnableGlobalMethodSecurity 注解
当我们想要开启spring方法级安全时,只需要在@Configuration实例上使用@EnableGlobalMethodSecurity 注解就能达到此目的。注解参数:@EnableGlobalMethodSecurity(jsr250Enabled = true)@EnableGlobalMethodSecurity(prePostEnabled = true)如果prePostEnabled值为true(默认为false),以下在方法上的四个注解可用:@PreAuthorize原创 2022-02-08 08:47:06 · 816 阅读 · 0 评论 -
maven版本过低,打包时警告:“org.quartz-scheduler:quartz:jar with value ‘*‘ does not match a valid id pattern.“
‘dependencyManagement.dependencies.dependency.exclusions.exclusion.artifactId’ for org.quartz-scheduler:quartz:jar with value ‘’ does not match a valid id pattern. @ org.springframework.boot:spring-boot-dependencies:2.2.5.RELEASE, /home/letcode/.m2/reposit原创 2022-02-07 11:42:28 · 1592 阅读 · 0 评论 -
mapstruct
MapStruct是一个开源的基于Java的代码生成器,用于创建实现Java Bean之间转换的扩展映射器。<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId></dependency><dependency> <groupId>org.mapstruct</原创 2022-02-07 10:19:21 · 810 阅读 · 0 评论 -
swagger 与 springfox的关系
springfox是swagger的一个开源实现,用在以SpringBoot作为后台开发框架中。swagger是一款流行的API管理管理。springfox实现了Swagger UI 和 Swagger-Core。在SpringBoot开发中,可以很方便地使用maven和gradle引入。...原创 2022-02-07 10:11:46 · 647 阅读 · 0 评论 -
Sentinel 流控规则不生效
maven 配置Spring Boot 2.2.5.RELEASE Spring Cloud Hoxton.SR3 Spring Alibaba 2.2.1.RELEASE <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifact原创 2022-01-24 15:48:37 · 5407 阅读 · 0 评论 -
使用阿里云安装基础软件
服务器配置购买一台阿里云ECS连接云服务器放行端口,比如要远程连接,需要放行22端口。使用远程工具MobaXterm,连接服务器安装docker安装 yum -y install docker systemctl enable docker #开机自启动 systemctl start docker # 启动docker配置加速镜像cd /etc/dockerls show below:certs.d daemon.json key.json secco原创 2022-01-21 09:54:06 · 837 阅读 · 0 评论 -
YAPI服务搭建
简介YApi 是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护API,YApi还为用户提供了优秀的交互体验,开发人员只需要利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。特点:基于Json5和Mockjs定义接口返回数据的结构和文档,效率提升多倍扁平化权限设计,即保证了大型企业级项目的管理,又保证了易用性不仅有类似postman的接口调试,还有强大的测试集功能免费开源,内网部署,信息再也不怕泄原创 2022-01-21 09:52:11 · 217 阅读 · 0 评论 -
Java的Transient关键字
Java的两种序列化Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数据保存到磁盘或者传输网络,磁盘或者网络接收者可以在对象的属类的模板上来反序列化类的对象,达到对象持久化的目的实现Serializable接口,会自动序列化。实现Externalizable接口,手动序列化。transient关键字transient修饰的变量不能被序列化。...原创 2021-12-22 07:39:39 · 56 阅读 · 0 评论 -
在idea中打包
在pom文件中加入主类<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration>原创 2021-12-01 17:48:16 · 89 阅读 · 0 评论 -
JSON文件与实体对象转换
读取本地JSON文件为Resource资源对象import org.springframework.beans.factory.annotation.Value;import org.springframework.core.io.Resource;@Value("classpath:/xxxx.json")private Resource jsonFile;将JavaBean中驼峰字段名转换成json时,字段大写变成下划线加小写的形式如字段 userName 对应的json中的字段应该为u原创 2021-11-09 20:51:33 · 384 阅读 · 0 评论 -
Ubuntu 20.04安装gradle并在idea中配置
安装gradleVERSION=6.5.1wget https://services.gradle.org/distributions/gradle-${VERSION}-bin.zipsudo unzip -d /opt/gradle gradle-6.5.1-bin.zip cd /opt/gradle/gradle-6.5.1/sudo ln -s /opt/gradle/gradle-6.5.1 /opt/gradle/latestsudo vim /etc/profile.d/grad原创 2021-09-12 21:53:44 · 895 阅读 · 0 评论 -
数据结构之单链表(增删改查,链表反转,链表逆序遍历,链表合并)
单链表单链表介绍链表是以节点的方式存储的。每个节点包含data域和next域链表的各个节点之间并不是连续的链表分为带头节点的链表和不带头节点的链表单链表的基本操作链表节点的数据结构class HeroNode { public int no; public String name; public String nickname; public HeroNode next; public HeroNode(int no, String nam原创 2021-08-26 20:57:07 · 128 阅读 · 0 评论 -
SpringBoot 单体应用中,关于空 Controller 跳转的两种方式
前提:单体 SpringBoot 应用中,浏览器访问登录页面 login.html 和 注册页面 reg.html,不需要页面处理,只需要进行页面条状。方式1,空 Controller 跳转@Controllerpublic class LoginController { @GetMapping("/login.html") public String loginPage() { return "login"; } @GetMapping("原创 2021-08-04 10:44:06 · 382 阅读 · 0 评论 -
Spring Boot 整合 Spring Cloud 和 Spring Cloud Alibaba (七)【Sleuth + Zipkin 服务链路追踪】
参考为啥要使用链路追踪微服务架构是一个分布式架构,它按照业务单元划分服务单元,一个分布式系统往往有很多服务单元。由于服务单元数量众多,业务复杂,如果出现错误和异常,很难定位。主要体现在一个请求可能调用了很多服务,而内部调用的复杂性,决定了问题难以定位。所以在微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序是什么样子的,从而达到每个请求的步骤清晰可见,出了问题,能够很快定位。Span:基本的工作单元。发送一个远程任务就会产生一个Span,Span是一个64位唯一标识,原创 2021-08-17 19:50:23 · 164 阅读 · 0 评论 -
Spring Boot 整合 Spring Cloud 和 Spring Cloud Alibaba (六)【Sentinel】
参考文档熔断、降级和限流熔断:A服务调用B服务的某个功能,由于网络不稳定问题,或者B服务卡顿,导致功能时间超长。如果这样子的次数太多,我们直接将B断路了(A不再请求B接口),凡是调用B的直接返回降级数据,不必等待B的超长执行。这样B的故障问题,就不会级联影响到A降级:整个网站处于流量高峰期,服务器压力剧增,根据当前业务情况以及流量,对一些服务和页面进行有策略的降级(停止服务,所有调用直接返回降级数据)。以此缓解服务器资源的压力,以保证核心业务的正常运行,同时也保持了客户端和大部分客户得到正确的响应。原创 2021-08-17 15:04:06 · 99 阅读 · 0 评论 -
JSON序列化相关问题
Long类型数据太长,而 Java 序列化成 JSON时候,丢失精度后台数据:1122334455667788991前端收到:1122334455667788900在SpringBoot项目中,可以添加如下代码:@EnableWebMvc@Configurationpublic class WebDataConvertConfig extends WebMvcConfigurerAdapter { public void configureMessageConverters(Li..原创 2021-08-16 11:56:24 · 180 阅读 · 0 评论 -
秒杀业务设计与实现
秒杀特点瞬时流量特别大定时任务参考1. cron 表达式语法:秒 分 时 日 月 周 年说明名称是否必须出现允许的值允许的特殊字符Seconds是0~59, - * /Minutes是0~59, - * /Hours是0~23, - * /Day of month是1-31, - * ? / L WMonth是1~12 or JAN~DEC, - * /Day of week是1~7 or SUN~原创 2021-08-15 20:14:56 · 93 阅读 · 0 评论 -
Spring Boot 整合 alipay
1. 导入依赖<dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.16.2.ALL</version></dependency>2. 将支付做成一个组件,放入 Spring 容器中@ConfigurationProperties(pre原创 2021-08-14 13:24:35 · 849 阅读 · 0 评论 -
网站整合支付宝支付
支付宝支付相关文档登录支付宝在文档中心搜索电脑网站支付参照文档中的接入准备创建应用创建完成的引用,需要通过审核才能测试并上线。为了方便测试,可以使用支付宝的沙箱环境。运行电脑完整支付的 DEMO 做测试查看 java版本的代码/* * *类名:AlipayConfig *功能:基础配置类 *详细:设置帐户有关信息及返回路径 *修改日期:2017-04-05 *说明: *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定原创 2021-08-13 22:31:46 · 248 阅读 · 0 评论 -
如何保证 RabbitMQ中 消息传输的可靠性?
如何保证消息不丢失1. 网络异常导致消息丢失做好方法的容错(try - catch ),发送消息可能会因为网络原因失败,失败后记录到数据库。做好日志记录,每个发出去消息的状态都应该被记录。-- 消息记录表create table mq_message ( message_id char(32) not null, content text, to_exchange varchar(255) default null, routing_key varchar(255) default原创 2021-08-13 17:17:30 · 192 阅读 · 0 评论 -
RabbitMQ 延时队列
消息的TTL(Time To Live)消息的 TTL 就是消息的存活时间。RabbitMQ 可对队列和消息分别设置 TTL。对队列设置TTL,表明消息进入队列的时间超过队列设置的TTL而没有被消费,消息就会被清除。对消息设置TTL,表明消息在队列中存活的最大时间是TTL,超过这个时间会被清除。如果队列设置了TTL而消息也设置了TTL,那么会选取两者之中较小的作为消息的TTL。消息设置TTL用 expiration 字段,队列设置TTL用 x-message-ttl 字段。超过TTL时间没有原创 2021-08-12 22:41:03 · 287 阅读 · 0 评论 -
Spring Boot 整合 Spring Cloud 和 Spring Cloud Alibaba (五)【分布式事务 - Seata】
参考文档相关术语:TC(Transaction Coordinator)事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。TM(Transaction Manager)事务管理器:开始全局事务、提交或回滚全局事务。RM(Resource Manager)资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务的提交和回滚。Seata的使用创建undo_log表,每一个微服务对应的数据库都需要创建该表-- 注意此处0.3.0+ 增加唯一索原创 2021-08-12 11:22:41 · 101 阅读 · 0 评论 -
本地事务与分布式事务
分布式事务案例库存服务锁定成功,但是在通知订单服务的过程中,网络出现异常,怎么处理?库存服务锁定失败,通知订单服务,回滚数据。库存服务锁定库存成功,用户服务扣减积分失败,怎么回滚?如何保证微服务之间事务的一致性?本地事务事务的基本性质数据库事务的几个特性:原子性(Atomicity)、一致性(Consistency)、隔离性或独立性(Isolation)和持久性(Durability),简称ACID。原子性:一系列的操作整体不可拆分,要不同时成功,要么同时失败。一致性:数据在事务原创 2021-08-11 23:58:06 · 90 阅读 · 0 评论 -
Feign 远程调用丢失请求头问题
远程调用丢失请求头问题远程调用,首先执行 this.dispatch.get(method)).invoke(args) 方法public class ReflectiveFeign extends Feign public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (!"equals".equals(method.getName())) { i原创 2021-08-11 10:10:30 · 189 阅读 · 0 评论 -
RabbitMQ安装以及使用
Docker 安装 RabbitMQ参考文档docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 \-p 25672:25672 -p 15671:15671 -p 15672:15672 \rabbitmq:management4369、25672(Erlang发现&集群端口)5672、5671(AMQP端口)15672(web管理后台端口)61613、61614(STOMP协议端口)1883原创 2021-08-09 23:58:50 · 387 阅读 · 0 评论 -
消息队列 RabbitMQ 工作流程
消息队列概述大多数应用中,可以通过消息中间件来提升系统的异步通信以及应用解耦的能力。当消息发送者发送消息以后,将由消息代理接管,保证消息传递到指定目的地。消息队列主要有两种类型的目的地:队列和主题。队列用于点对点通信模式中,而主题用于发布/订阅模式中。点对点模式:a. 消息发送者将消息发送给消息代理,消息代理将其放入一个队列。消息接收者从队列中获取消息后,消息被移除队列。b. 一条消息只有唯一的发送者和接收者,但并不意味着只能有一个接收者。发布/订阅模式:发送者(消息发布者)发送消息到主题,原创 2021-08-08 23:48:17 · 366 阅读 · 0 评论 -
消息队列适用的三个场景
场景一,异步处理从两幅图对比,同样的业务,加入消息MQ后,第二种的处理速度让用户感觉快了一点(45ms)。适用消息队列,只要将任务写入消息队列,就可以立即返回,因此缩短响应时间。而发送邮件和发送短信的业务,都可以订阅消息队列中的消息,读取到消息后,可以在后台慢慢处理。场景二,应用解耦原来系统之间的调用,可以通过消息队列得到解耦。现在订单系统只需要将消息写入消息队列即可。而库存系统只需要订阅消息队列中的消息。场景三,流量控制如秒杀业务,在短时间内,可以有大量请求过来。此时,可以将大量的用户请原创 2021-08-08 14:24:50 · 366 阅读 · 0 评论 -
将商品添加到购物车【小技巧】
假如 http://www.cart.mall.com/addToCart api 这样写@Controllerpublic class CartController { @GetMapping("/addToCart") public String addToCart(@RequestParam("skuId") Long skuId, @RequestParam("num") Integer num, RedirectAttributes ra).原创 2021-08-07 21:25:25 · 1013 阅读 · 0 评论 -
Spring 拦截器
ThreadLocalThreadLocal 是一个 Map<Thread, Object> 这样的结果,利用ThreadLocal可以在同一个线程中共享数据。而 Spring 中,一次请求的执行,会经过拦截器、过滤器、最终到达Controller、接着业务处理层Service和数据持久层Dao,这些操作的执行都是在同一个线程中完成的。如果想要共享数据,如用户登录状态数据,就可以用ThreadLocal这个数据结构来完成。项目中使用 拦截器定义拦截器,需要实现 HandlerInte原创 2021-08-07 18:39:46 · 110 阅读 · 0 评论