自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 使用Percona xtrabackup对已在使用的MySQL做主从备份

主库配置首先要配置主库服务器的相关主从备份的配置,比如配置启用binlog日志等,涉及到配置修改如下,修改my.conf文件[mysqld]## 设置server_id,一般设置为IP,注意要唯一server_id=100## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)binlog-ignore-db=mysql## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)log-bin=mysql-bin## 为每个session 分配的内存,在事务过程中用来存

2021-06-24 17:34:02 279

原创 Springcloud+Seata+nacos 分布式事务项目搭建 AT模式

前言本文要求对Springcloud有一定了解,对分布式事务本身有一定认知,如果不了解微服务,建议先看看Spring Cloud的基本认识和使用Spring Cloud的基本教程,再回头学习本文为什么会出现分布式事务开发过程中,随着项目模块的增加以及分库分表的出现,传统事务已经无法满足业务需求,如分库,由于有多个数据源,而数据库事务又是基于数据库层,所以如果只用数据库原生事务,会导致数据库A成功提交,数据库B回滚,导致数据不一致,又比如多模块下,常见的订单流程,订单服务成功提交订单,调用库存服务扣减库

2021-02-26 10:47:42 1066

原创 Springboot Druid 自定义加密数据库密码

前言开发过程中,配置的数据库密码通常是明文形式,这样首先第一个安全性不好(相对来说),不符合一个开发规范(如项目中不能出现明文账号密码),其实就是当出现特殊需求时,比如要对非运维人员开方服务器部分权限,但是又涉及项目部署的目录时,容易泄漏数据库密码,虽然一般生产环境中,数据库往往放入内网,访问只能通过内网访问,但是不管怎么说账号密码直接让人知道总归不好,甚至有些项目需要部署到客户环境中,但是可能共用一个公共数据库(数据库只向指定服务器开放外网端口或组建内网环境),这样的情况下,如果数据库密码再以明文形式存

2020-12-21 16:25:45 1745

原创 Java 浮点型(Double,Float)精度丢失解决方案

前言最近公司某小伙子做了一个商城的微信支付相关的接口,其中包含退款,在测试过程中发现部分单据没有退款,微信支付提示退款金额跟支付金额不匹配(大于支付金额),检查数据库和调试过程中,发现商品的单价和手工计算出来的总价是跟订单金额匹配的,实在无法确认问题原因最终bug转向我来排查,于是有了此文排查由于手工计算出来的金额跟实际支付的金额是能匹配上的,所以一开始我以为是订单已经进行了部分退款,再次全部退款的话肯定会被微信阻止,因为这样的话就会出现超退。第一步:是否已经部分退款去微信支付平台排查是否有退款,

2020-07-11 16:01:17 421

原创 一次抢购的负载优化

前言由于这次令人讨厌的疫情,导致口罩一罩难求,虽然各大厂商都在努力生产,但是毕竟僧多粥少,也幸好疫情快要结束了,也希望早点结束。因为口罩实在难以购买,所以很多地方的口罩采用统一调配,但是如何把口罩发放到大众手里,也成为了一个问题,所以预约购买成了最为安全的购买方式,购买后可以邮寄到家或者根据选择的时间段到店自提,但是由于购买人数过多,也带来了一个新的问题,服务器并发的问题,至少我在二月份参与了很...

2020-03-23 16:36:22 220

原创 基于IDEA热部署更新服务器Tomcat类,服务器Tomcat热更新

前言在开发过程中,如果我们是使用的IDEA,就会知道IDEA有一个热更新的功能,何为热更新?就是在不重启Tomcat的情况下让服务器中的代码变更为最新的。这样既能快速的更新代码,又不用担心Tomcat重启session过期的问题,如同更新jsp一般的方便,当然IDEA里面的热更新还是没有更新jsp那么方便,具体限制本文后面有提(只是我目前了解到的限制)。如果说本地更新还算快捷,那么服务器更新就更...

2019-12-12 17:34:49 1394

原创 Springboot Druid 使用Slf4j输出可执行SQL

前言在开发中,为了数据安全,所有SQL语句肯定是用占位符的,但是在实际开发中,为了方便追踪问题,经常需要查看具体执行的SQL语句内容,而用了占位符之后,每次真实执行的语句只能靠自己根据参数拼接出来,耗时耗力,所以需要一个方法输出每次执行的SQL语句,并且还是有参数的(替换了占位符),而Druid就支持此功能(Druid的主要功能可不是这个),所以此文主要讲Springboot环境下使用Druid...

2019-06-29 09:44:20 8786 7

原创 SpringMVC,SpringBoot快速验证参数是否完整 基于@Valid注解

前言在接口开发中,经常是需要对传入参数完整性进行验证的,或者对手机号格式进行验证等,而一般不了解@Valid注解之前,都是通过自己封装方法来验证,都是一堆if else集合,这样判断对于代码结构很不友好,开发效率也不高,使用@Valid注解可以快速的对参数进行验证,并且可以通过抓取全局异常,从而实现统一返回引用@Valid是使用hibernate validation的时候使用,其中java...

2019-05-08 09:22:46 1633

原创 centos7搭建EFK日志分析系统

前言EFK可能都不熟悉,实际上EFK是大名鼎鼎的日志系统ELK的一个变种在没有分布式日志的时候,每次出问题了需要查询日志的时候,需要登录到Linux服务器,使用命令cat -n xxxx|grep xxxx 搜索出日志在哪一行,然后cat -n xxx|tail -n +n行|head -n 显示多少行,这样不仅效率低下,而且对于程序异常也不方便查询,日志少还好,一旦整合出来的日志达到几个...

2018-09-17 09:37:53 956 1

原创 记一次MySQL迁移并从MySQL5.6升级到5.7后查询慢了几十倍的问题

起因因为生产环境数据量越来越大,客户越来越多,项目功能也越来越多,项目本身也越来越多,导致之前的服务器内存、硬盘都已经渐渐的不够用了,当时出现了2种解决方案,增加服务器配置和新购服务器,但是就算是新增硬盘,也需要对数据库进行迁移,所以就采用了新购服务器的方案,并且因为之前是高效云盘,出现过IO占满的情况,所以对于新购的服务器采用了SSD硬盘,理论上速度会飞起来了,实际上我在新服务器上安装MyS...

2018-09-14 10:22:57 3275 1

原创 使用monit监控服务进程和硬盘以及自动重启进程

需求需要服务器运行的程序在被意外杀死时,能自动重启,同时提醒我程序发生过重启。在服务器硬盘使用量达到一定比例的时候,提醒迁移数据或者清理无用的日志文件,所以需要一个服务器的守护程序(能在centos上运行),要求轻量简单占用少,根据上面的需求,找到了supervisor和monit2款软件supervisor 和 monit的对比因为主要是要满足以上我们的需求,所以我们根据实际需求...

2018-07-24 09:17:07 1386

原创 记一次ajax的JSESSIONID 变化解决、非跨域变化

前言某一天测试提了一个bug,系统进入到某个页面中后,出现登录失效,不管怎么样,只要进入这个页面再点击其他链接就会去到登录页面,测试环境没有问题。开始解决第一步:怀疑代码问题因为测试环境没有任何问题,所以怀疑是代码本身的问题,于是在本地测试,发现本地没有问题,于是重新打包部署到正式服务器测试,发现还是出现异常。第二步:确认为何会登录失效因为代码和测试环境与本地都...

2018-07-07 14:34:48 4057

原创 通过Maven profile实现环境切换,快速部署到正式环境

前言在开发工作中存在多个环境:开发环境、测试环境、正式环境(生产环境),而每个环境的MySQL、Redis、Rabbitmq、ElasticSearch等配置各不相同,所以每次开发完成部署或者更新都需要手动改变配置文件,尤其是当使用jenkins等相关自动化编译部署的工具的时候,必须要先修改配置文件再上传代码,否则更新就容易出错。解决这个问题常用的方法有:一是通过Git分支,不同环境不同分支,...

2018-06-27 09:22:25 481

原创 ElasticSearch优化会员列表搜索

ElasticSearch简介ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便,维基百科、Stack Overflow、G...

2018-06-23 13:53:48 296

原创 Rabbitmq延迟队列实现定时任务

场景开发中经常需要用到定时任务,对于商城来说,定时任务尤其多,比如优惠券定时过期、订单定时关闭、微信支付2小时未支付关闭订单等等,都需要用到定时任务,但是定时任务本身有一个问题,一般来说我们都是通过定时轮询查询数据库来判断是否有任务需要执行,也就是说不管怎么样,我们需要先查询数据库,而且有些任务对时间准确要求比较高的,需要每秒查询一次,对于系统小倒是无所谓,如果系统本身就大而且数据也多的情况下...

2018-05-22 10:00:41 35090 7

原创 MySQL读写分离基于Mycat实现

为什么需要读写分离至于为什么需要读写分离,在我之前的文章有介绍过了,相信看到这篇文章的人也知道为什么需要读写分离了,当然如果你也需要了解一下,那么欢迎查看我之前的文章SpringBoot Mybatis 读写分离配置,顺便也可以了解一下怎么通过代码进行读写分离的MySQL主从复制主从复制是读写分离的关键,不管通过什么方式进行读写分离,前提就是MySQL有主从复制,当前双机主从也行,但是关键的关键,是

2018-03-16 09:15:23 794 1

原创 Springboot Mybatis MySQL读写分离及事物配置

为什么需要读写分离当项目越来越大和并发越来大的情况下,单个数据库服务器的压力肯定也是越来越大,最终演变成数据库成为性能的瓶颈,而且当数据越来越多时,查询也更加耗费时间,当然数据库数据过大时,可以采用数据库分库分表,同时数据库压力过大时,也可以采用Redis等缓存技术来降低压力,但是任何一种技术都不是万金油,很多时候都是通过多种技术搭配使用,而本文主要就是介绍通过读写分离来加快数据库读取速度

2018-02-05 09:17:12 6180 3

原创 Spring Cloud的基本认识和使用Spring Cloud的基本教程

认识Spring CloudSpring Cloud简单来说就是一个微服务相关的框架,至于什么是微服务,简单来说就是一个整体项目由多个单独运行的小项目构成,每个小项目负责一个或多个功能,每个小项目有1个或者1个以上运行实例,项目之间可以相互调用。如果有接触Dubbo,那么就可以很容易理解,Dubbo是一个提供不同项目相互调用的框架,同时Dubbo需要依赖于Zookeeper,所以说Spring Cl

2017-06-27 09:54:50 9674 2

原创 Spring boot 集成Dubbox

前言因为工作原因,需要在项目中集成dubbo,所以去查询dubbo相关文档,发现dubbo目前已经不更新了,所以把目光投向了dubbox,dubbox是当当网基于dubbo二次开发的一个项目,dubbox,因为公司项目中一个是基于spring mvc 3.0的,一个是基于spring boot的,而spring boot相对来说文档少一点,所以此文记录下spring boot下如何继承dubbox一

2017-05-26 13:51:43 2791 2

原创 Java配置maven+jenkins+git(svn)+tomcat自动编译和部署(持续集成)

提交代码到版本控制器master分支,Jenkins自动编译打包并部署到Tomcat

2017-05-20 15:13:14 4553 1

原创 简易的后台管理权限设计

前言因为想做一个快速的后台开发模板框架(方便以后直接开发功能而不用纠结环境和页面框架搭建的选择),当时在权限控制方面纠结于spring security和shiro,但是由于对这2个框架理解都不深,只是停留在基础的使用上面,而且一般的后台管理也用不了那么多的功能,所以思前想后还是决定自己做一套权限系统设计,第一方便扩展,第二自己做的也更熟悉,更方便做特定功能的定制。看本文之前可以先看看我做的简易开发

2017-04-26 13:42:39 20060

原创 MySQL主从复制搭建,基于日志(binlog)

什么是MySQL主从复制简单来说就是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过这种方式来保证数据的一致性,就是主从复制MySQL主从能解决什么问题一、高可用因为数据都是相同的,所以当Master挂掉后,可以指定一台Slave充当Master继续保证服务运行,因为数据是一致性的

2017-04-17 13:57:13 3348 1

原创 Spring boot集成RabbitMQ

RabbitMQ简介RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是

2017-01-12 16:04:08 5296

原创 Swagger环境搭建之非依赖代码法

前言Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。好吧,以上是官方的说法,我直接复制的,在我看来swagger就是一个接口文档管理器,以前我们写接

2016-10-08 10:04:47 6582 9

原创 自定义控件之重写ScrollView实现图片下拉放大

前言因为公司项目要实现一个效果,在ScrollView没有向下滚动时,下拉(未重写前下拉是没有任何效果的)放大顶部的图片,当时去网上找了,记得以前见过很多这样的控件的,现在却找半天也很难找到一个,好不容易找到了2个,发现效果都和需求上面的效果有偏差,最后没有办法只能是自己写了,花费了半天时间研究出来了,同时为了记录实现思路,所以就有了此文章效果实现思路拦截ScrollView的触摸滑动事件(ACTI

2016-06-19 08:46:05 981

原创 Android APP架构心得

前言从JavaEE转到Android开发也2年多了,开发的项目也有4,5个了(公司项目),其中有3个项目前期都是自己独立开发,从一开始的毫无架构到现在对如何架构也有一点心得,所以在此分享出来,大家一起交流什么是架构在我看来,软件架构绝对不只是框架的堆砌,看我看来,架构是为了方便软件维护、扩展、安全性、切入性(我也不知道有没有人提出过这个关键字,因为的确很少看见,简单来说我这里说的切入性就是指一个以前

2016-06-14 10:37:06 3768 1

转载 EventBus3.0的入门和使用

前因因为公司项目中使用EventBus,所以需要进行了解,本来还以为EventBus会很难理解,但是网上查了一下,发现上手很快,而且也没有什么特别难懂的地方,这篇文章记录我对EventBus的一些理解使用场景经常会遇到,有时候发生了一个事件,需要在别的activity或者Fragment或者其他类中进行处理,以前我们是通过广播去实现,但是当一个Activity需要处理很多种事件时,广播管理起来就会麻

2016-05-07 10:02:17 387

原创 Android Studio Gradle 导出JavaDocJar提示编码GBK的字符无法映射解决办法

最近因为要把PreIOC放入jcenter中,百度找了很多方法,终于有点眉头了,但是却卡在了生成JavaDocJar,因为要放入jcenter中必须要上传生成的jar、sourcejar、和JavaDocJar,刚开始百度了很久,都是说下面2种方法第一种:修改项目和IDE的编码格式:file->setting-file Encodings第二种:修改

2015-11-11 11:15:16 1371

原创 基于maven的SpringMVC,Spring,MyBatis的全注解配置

首先创建maven项目1.maven添加各种依赖包 c3p0 c3p0 0.9.1.2 org.mybatis mybatis-spring 1.2.2 org.mybatis mybatis 3.2.2 org.springframework spring-

2015-04-17 11:29:33 4048 1

原创 Java 线程学习笔记

java 线程学习笔记一1.线程的实现方法a.继承Thread类 (创建对象new MyThread();)b.实现Runnable接口(创建对象 new Thread(new MyRunnable());)2.开始执行线程执行Thread.start()的方法能运行线程,线程从run方法开始执行,如同main方法一样,执行完成线程就停止运行3.终止线程运行由于线程的生

2014-10-23 16:33:19 557

原创 MVC设计中DAO模式实现的目标

1.数据存储逻辑的分离通过对数据访问的逻辑进行抽象,为上层结构提供抽象化数据库访问的接口,业务层不用关心具体的数据操作,只负责调用方法,这样可以避免业务代码中混杂JDBC调用语句,使得业务逻辑更加清晰,另一方面,也使得开发人员的专业划分2.数据库访问底层现实的分离DAO模式通过将数据访问划分为抽象层和实现层,从而分离了数据使用和数据访问的底层实现细节,我们可以保持上层结构不变的情况下,

2013-11-08 17:11:34 1099

原创 DWR中获取Session,Request,Response等信息

在DWR中,因为访问的是普通的java类而不是Servlet,所以想要访问Session看起来就非常困难,不过DWR貌似早就想到了这一点,所以要访问HttpServletRequest,HttpServletResponse,HttpSession,ServletContext,ServletConfig. 等对象时,只需要在方法中加入此参数,而在调用时选择忽略,因为这个参数是DWR自动填充的,在

2013-10-11 10:13:16 850

原创 Java 简单的Socket通讯的客户端实现

前面发了服务器端的代码,这里发客户端的,服务器类连接有2个类,因为用了多线程,要实现Runnable接口主类代码/** * 这是测试类 * @author WantnRun * 2013年6月24日 11:10:19 */public class Test { /** * @param args */ public static void main(String

2013-06-24 11:14:09 911 1

原创 Java 简单的Socket通讯的服务器端实现

最近学安卓开发,看到书上这个Socket通讯的实例,按照书上打的时候客户端一直连接不上,可能是网络问题或者虚拟机连接问题,所以就用控制台实现的客户端,这里是服务器端的。话不多说,直接贴代码import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.In

2013-06-24 11:08:20 806

原创 Oracle和sql server的常用T-SQL语句

创建用户create用户名newUser identified by密码例子:create user newUseridentified by newUserpwd给用户赋权Grant 权限名 to用户名grant connect,resource to newUser创建表Create table表名(列名 数据类型 其

2013-06-21 16:39:08 713

转载 android布局属性大全

Xml代码  FrameLayout —— 里面只可以有一个控件,并且不能设计这个控件的位置,控件会放到左上角  LinearLayout —— 里面可以放多个控件,但是一行只能放一个控件  TableLayout —— 这个要和TableRow配合使用,很像html里面的table  AbsoluteLayout —— 里面可以放多个控件,并且可以自己定义控件的x

2013-06-16 18:43:05 551

原创 C++学习笔记(七)函数探幽

与普通函数调用区别:普通函数调用:在调用时,先储存当前指令的地址,并将参数保存到堆栈(内存块),再跳到函数标记的起点,执行函数代码,然后跳回到标记点.来回跳跃位置意味着使用函数需要一定的开销.内联函数:内联函数相当于把函数内容复制到被调用的地方,这样就可以不用跳跃位置,因为内联函数比普通函数执行的速度要快,但是代价是要更多的内存,比如要调用10次,就要复制10个代码拷贝.所以应该有

2013-04-11 17:14:32 524

原创 C++学习笔记(六)函数

C++除了使用库函数,还可以自定义函数来完成一些功能。函数可以分为有返回值的函数和无返回值的函数,没有返回值的通用格式void函数名(参数列表){//函数体}有参数的返回值类型 函数名(参数列表){//函数体}对于有返回值的函数,函数体内必须返回一个值给调用者,返回语句return value;函数在执行return语句后结束,也就是说当有多

2013-04-08 15:33:03 616

原创 C++学习笔记(五)分支语句和逻辑操作符

当程序决定运行什么命令的时候,就需要根据条件进行判断,这时间就需要分支语句.If-else的使用方法If(条件){语句块1}else{语句块2}当条件成立时则执行语句块1,不成立时执行语句块2。当然else语句可以不要,这样就只有条件成立时才执行语句,既然else可以不要,那么也可以多加else,比如当有多个条件时,这需要用到多个else,语法如下:If

2013-04-06 10:36:43 1025

原创 C++学习笔记(四)循环和关系表达式

for循环由:1.设置初始值2.执行测试3.执行循环操作4.更新用于测试的值组成如for(int i=0/*初始值*/;i执行测试*/;i++/*更新测试值*/){//循环操作}当条件i时,则继续执行循环操作,否则跳出循环.组合赋值符:+=、-=、*=、/=他们的意思都是差不多的,比如i+=b;就是i=i+b的简写。关系表达式小于,小

2013-04-01 11:14:11 558

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除