![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java开发技巧集锦
文章平均质量分 70
宏辉
这个作者很懒,什么都没留下…
展开
-
【亲测有效】idea部署jrebel插件
JRebel是一套JavaEE开发工具。Jrebel 可快速实现热部署,节省了大量重启时间,提高了个人开发效率。原创 2023-05-26 20:00:00 · 1107 阅读 · 0 评论 -
前端加下拉框和显示文字
前端加下拉框和显示文字已经近一个月没写博客了,不得不吐槽一下自己,说好的日更都不知去哪了,今天应小可爱之邀写一篇博客,主要内容是处理一些前端的下拉框和在界面中显示一段文字。为了让看的人选择多样性,我用了0.5s想了想,还是写两个版本吧。一个探索版,一个瓜瓜版,任君选择。1. 探索版此处就贴上我之前写过的代码,不花精力去写了。前端下拉框之前写了一个聊天室,直接拿过来做demo<div class="send"> <textarea type="text" id原创 2021-05-17 20:51:04 · 2433 阅读 · 3 评论 -
有状态认证及无状态认证
有状态认证及无状态认证1)什么是有状态认证?有状态认证,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力服务端保存用户状态,无法进行水平扩展客户端请原创 2021-04-13 23:32:36 · 723 阅读 · 0 评论 -
netty+websocket+quartz实现消息定时推送
netty+websocket+quartz实现消息定时推送在讲功能实现之前,我们先来捋一下底层的原理,后面附上工程结构及代码1.NIONIO主要包含三大核心部分:缓冲区(Buffer)、通道(Channel)、选择器(Selector)。下图是NIO通信的结构图。NIO之所以是NIO,背后有SelectorSelector可以实现: 一个 I/O 线程可以并发处理 N 个客户端连接和读写操作,这从根本上解决了传统同步阻塞 I/O 一连接一线程模型,架构的性能、弹性伸缩能力和可靠性都得到了极大的原创 2021-04-06 09:09:49 · 1230 阅读 · 5 评论 -
秒杀方案
秒杀方案秒杀高并发高可用高并发分布式服务、负载均衡、集群保证单个服务的QPS足够高必须尽可能减少单个业务执行时间秒杀页面使用Thymeleaf实现页面静态化(存在本地服务器),不用频繁请求数据库得到商品数据,通过视图解析器对数据的渲染返回到用户,减轻服务器的压力。平常10台服务器 能稳定运行,可是一个秒杀活动出现后会在短时间内接收大量的请求,最普遍的做法是横向拓展增加服务器的数量。可是这有一个弊端,请求数量不确定,无法确定要增加多少台服务器才能支持秒杀活动。使用nginx进行限流原创 2021-03-27 11:16:57 · 340 阅读 · 0 评论 -
分布式锁
文章目录分布式锁分布式锁特点超卖现象描述1.分布式锁解决方案(一)——数据库2.分布式锁解决方案(二)——zookeeper3.分布式锁解决方案(三)——redis3.1 reids实现分布式锁版本一3) 搭建分布式锁demo工程4) 导入jar包5) 提供配置文件6) 启动类代码实现执行结果3.2 redis实现分布式锁版本二1)释放锁的问题2)流程图3)代码实现3.3 redis 分布式锁版本三重入锁2)流程图3)实现分析Lua脚本实现Redis分布式锁1)Redis脚本命令2)lua脚本语法4.Red原创 2021-03-26 21:00:06 · 321 阅读 · 0 评论 -
Web整合微信支付
08、微信支付:扫码支付流程1)介绍微信支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/index.html然后选中v2版本我们选择开发文档,而后进入选择页面:https://pay.weixin.qq.com/wiki/doc/api/index.html选择native支付,就是扫码支付:此处我们使用模式二来开发:2)开发流程模式二与模式一相比,流程更为简单,不依赖设置的回调支付URL。商户后台系统先调用微信支付的统一下单接口,微信原创 2021-03-25 17:56:58 · 3229 阅读 · 3 评论 -
seats解决分布式事务问题
seats解决分布式事务问题15、分布式事务:Seata简介分布式事务框架很多:tcc-transaction、Hmily、ByteTCC、myth、EasyTransaction、tx-lcn、seata等等框架,这里有一篇关于这些框架压测的测试报告【不包括seata】:http://springcloud.cn/view/374 ,可以了解下 。这里我们采用seata来实现分布式事务。2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commi原创 2021-03-24 17:48:42 · 1049 阅读 · 0 评论 -
分布式事务:CAP定理和BASE理论
分布式事务:CAP定理和BASE理论1) CAP定理CAP定理是在 1998年加州大学的计算机科学家 Eric Brewer (埃里克.布鲁尔)提出,分布式系统有三个指标Consistency 一致性Availability 可用性Partition tolerance 分区容错(容错性)它们的第一个字母分别是 C、A、P。Eric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。一般要求P必须要成立,A和C只能顾及一个,也就是说,我们只能满足A原创 2021-03-22 18:09:56 · 302 阅读 · 0 评论 -
分布式事务:本地事务与分布式事务
分布式事务:本地事务与分布式事务我们编写的扣减库存与保存订单是在两个服务中存在的。因为扣减库存后出现某些原因导致整一个下单流程出现错误,此刻会出现这样的状况:保存订单的本地事务(加了@Transactional注解)进行回滚,而扣减库存的事务(在其他微服务中)commit后无法回滚。这样就会造成数据不一致的情况,这其实就是我们所说的分布式事务的问题,接下来我们来学习分布式事务的解决方案。1)事务数据库事务(简称:事务,Transaction)是指数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序原创 2021-03-22 14:35:38 · 1049 阅读 · 0 评论 -
Java动态加盐加密
Java动态加盐加密md5+固定盐注册: md5+邮箱号(盐)+ 123456 = 数据库密码登录: md5+邮箱号(盐)+ 123456 = 密码此部分之前已经写过博客,需要进一步了解md5加盐加密的童鞋请点击以下链接java对密码实现加密(md5、加盐加密)hash+随机盐注册: hash + 随机值(盐)+ 123456= 密码 + 刚才的盐值 (可逆加密)= 数据库密码登录: hash + 从数据库解码出盐+ 123456= 密码在用户登录时候,系统会从数据库中查询对应用户的原创 2021-03-15 20:14:19 · 930 阅读 · 0 评论 -
测试类的启动方式
2. 测试类2.1 原始版本junit依赖public class Demo{@Testpublic void test(){}}2.2 Spring+Junit(XML版本)spring-test依赖@RunWith(SpringRunner.class/SpringJunit4ClassRunner.class)@ContextConfiguration(“classpath:applicationContext.xml”)public class Demo{@Testpubl原创 2021-03-15 17:41:39 · 581 阅读 · 0 评论 -
Spring的声明式事务的使用
Spring的声明式事务的使用1.1 XML版本<bean id="DataSourceTransactionManager" class="xxx.DataSourceTransactionManager"/><tx:advice transaction-manager="DataSourceTransactionManager"/><aop:config> xxxxxxx</aop:config>1.2 XML+ 注解版本类原创 2021-03-15 17:25:58 · 75 阅读 · 0 评论 -
Thymeleaf页面使用vuejs渲染数据
Thymeleaf页面使用vuejs渲染数据model已经有数据了item.html1)使用js模板获取数据,赋值给js变量const user = /*[[${user}]]*/ {};2)把第一步的js变量声明到vuejs中在vue的data中声明即可data:{user}3)在vuejs中使用js变量展示特有规格参数取出当前商品的特殊规格参数 及 该分类下的所有特殊规格参数值,并放入Vue的data中<script th:inline="javascript">原创 2021-03-14 20:53:12 · 2947 阅读 · 2 评论 -
使用Thymeleaf生成静态页面
使用Thymeleaf生成静态页面生成静态页面 = 静态模板(item.html) + 动态数据1)创建Context上下文对象(读取模板文件需要的动态数据)2)定义静态模板((item.html)3)使用模板引擎对象读取静态目标,把动态数据写入模板,使用IO输出流生成一个静态文件本次课程我们采用Thymeleaf来实现页面静态化。1)概念先说下Thymeleaf中的几个概念:Context:运行上下文TemplateResolver:模板解析器TemplateEngine:模板引擎原创 2021-03-14 20:39:16 · 1642 阅读 · 0 评论 -
Quartz介绍及入门案例
Quartz介绍及入门案例1. Quartz 任务调度框架概述在实际项目开发中,除了Web应用、SOA服务外,还有一类不可缺少的,那就是定时任务调度。定时任务的场景可以说非常广泛:某些网站会定时发送优惠邮件。银行系统还款日信用卡催收款。 某些应用的生日祝福短信等。完成这些功能都需要用到定时任务调度。那究竟何为定时任务调度,一句话概括就是:基于给定的时间点、给定的时间间隔、给定的执行次数自动执行的任务JDK的Timer (定时任务只能执行一次,) , Quartz 、 Sprin原创 2021-03-06 22:52:03 · 253 阅读 · 0 评论 -
spring整合redisTemplate
spring整合redisTemplate今天玩了一下redisTemplat,在这里说一下心得。总共耗时7h。其中配环境耗时5h+!!!首先送上参考博客:Spring技术栈-整合Redis,使用RedisTemplate实现数据缓存实战这篇博客讲解配置很详细,一看就会,但是maven配置依赖时候请注意!!!说一下我遇到的问题我按照博主的步骤将环境搭好,运行tomcat部署项目时候报错java.lang.NoSuchMethodError查阅绝大部份博客得出结论:引进的jedis和spri原创 2021-03-06 22:51:23 · 488 阅读 · 1 评论 -
getQueryParams获取url参数
getQueryParams获取url参数方法getQueryParams 获取 GET 提交数据getBodyParams 获取 POST 提交数据示例代码/** 自定义全局过滤器 */@Componentpublic class MyGlobalFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, Gat原创 2021-03-06 22:49:49 · 4686 阅读 · 1 评论 -
jsp 日期格式转换
jsp 日期格式转换1.导入fmt包<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>2.日期格式转换代码<td>${item.createTime }</td><td><fmt:formatDate value="${item.createTime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>3.效果对比原创 2021-03-06 22:47:38 · 639 阅读 · 0 评论 -
webpack dependeces的作用
webpack dependecies和devDependencies的作用今天使用npm初始化项目的时候生成了package.json文件,里面包含“dependecies”和“devDependencies”两个键。下面说一下两个键的用处。1.dependencies的作用dependencies依赖的包不仅开发环境能使用,生产环境也能使用。2.devDependencies的作用devDependencies是只会在开发环境下依赖的模块,生产环境不会被打入包内。通俗理解就是开发环境需要,原创 2021-03-06 22:46:57 · 435 阅读 · 0 评论 -
跨域问题及解决方法
跨域问题及解决方法13、跨域问题:什么是跨域及解决方案1)跨域简介跨域是指跨域名的访问,以下情况都属于跨域:跨域原因说明示例域名不同www.jd.com 与 www.taobao.com域名相同,端口不同www.jd.com:8080 与 www.jd.com:8081二级域名不同item.jd.com 与 miaosha.jd.com如果域名和端口都相同,但是请求路径不同,不属于跨域,如:www.jd.com/itemwww.jd.com/goods原创 2021-03-06 22:44:00 · 1798 阅读 · 0 评论 -
后端controller接收前端参数的方法
后端controller接收前端参数的方法1. 使用对象接收的情况Brand类/** * 品牌 */@Data@TableName("tb_brand")public class Brand { @TableId(type = IdType.AUTO) private Long id; private String name; private String image; private String letter; private Date原创 2021-03-06 22:42:56 · 2123 阅读 · 1 评论 -
Mybatis如何在插入数据时获取数据库自增值
MyBatis如何在插入数据时获取数据库自增值方式一:使用useGenerateKey="true"<insert id="save" useGenerateKey="true"> insert into tb_brand .......</insert>用useGenerateKeys="true"后,不用再在写一句关于select的SQL(降低数据库的压力)而直接能够得到刚刚插进去的那个主键,需要注意的是这个属性只能用在主键能自增长的数据库,比如MySQL原创 2021-03-06 22:42:12 · 419 阅读 · 2 评论 -
Web开发整合百度地图
Web开发整合百度地图百度地图开放平台申请Baidu map AK示例中心接下开的开发大家可以参照百度地图示例中心给出的demo进行拓展原创 2021-02-21 21:50:42 · 689 阅读 · 0 评论 -
MyBatis分页插件PageHelper的使用
MyBatis分页插件PageHelper的使用介绍PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,例如mysql、 oracle、mariaDB、 DB2、 SQLite、Hsqldb等。本项目在github的项目地址:PageHelper入门案例第一步:在pxm.xml文件中添加依赖<dependency> <groupId>com.github.pagehelper</groupId>原创 2021-01-12 13:09:29 · 298 阅读 · 0 评论 -
在idea中使用git上传文件到gitee
文章目录使用idea上传文件到gitee1. 创建远程仓库并设置个人公钥2.Idea配置git3.将文件添加到缓存区4.第一次连接有可能报错“empty ident name (for <>) not allowed”5.commit提交文件到本地仓库6. push本地仓库文件到远程仓库使用idea上传文件到gitee1. 创建远程仓库并设置个人公钥2.Idea配置git进入配置页面IntelliJ IDEA -> Preferences选择Version Con原创 2021-01-10 19:55:12 · 1012 阅读 · 0 评论 -
idea自定义live template提高开发效率
每次做SpringMVC的项目都要待见搭建环境,写配置文件,写多了发现配置文件中的内容来来去去都是那几样,所以为了提高开发效率,这里提供了自定义live template方法。1. 找到live template,新建模版组2. 新建模版3. 定义模版内容4.选择模版内容在哪些文件中起效补充一点 :$END$可以指定使用Template后光标的停留处以jabc.properties文件为例,上图设置光标停留的地方可以方便开发时候填写要连接的数据库。关于自定义idea Templa原创 2021-01-09 22:08:44 · 173 阅读 · 0 评论