
Java
gavin.liao
乐于分享
展开
-
eclipse一个应用运行多个实例配置
eclipse一个应用启动多个实例原创 2023-04-17 21:49:54 · 1408 阅读 · 0 评论 -
AtomicInteger实现并发安全计数器
AtomicInteger实现计数器原创 2023-04-16 18:13:20 · 185 阅读 · 0 评论 -
java响应实体类封装(泛型)
1、定义响应状态码枚举类,枚举类用来定义项目中要使用到的状态码2、定义响应实体类,在这里引用ResponseEnum枚举,定义了响应消息和响应数据对象若干方法3、在controller中使用响应实体类,在controller中展示了响应消息和响应数据的例子使用postman访问以上接口,响应结果如下图所示......原创 2022-06-08 17:16:06 · 4662 阅读 · 4 评论 -
synchronized同步失败问题处理
问题最近做一个好友砍价的功能,好友砍价时需要进行同步处理,避免并发时砍价金额出现异常。原来代码是在service中使用synchronized进行并发控制,代码如下@Override@Transactional(rollbackFor = Exception.class)public BigDecimal help(BargainHistory history) { String intern = String.valueOf(history.getId()).intern(); sync.原创 2021-09-02 14:56:57 · 2997 阅读 · 0 评论 -
计算积分过期时间和剩余天数(一周为周期)
private PointExpire calPointExpire(Date createTime) { Calendar cal = Calendar.getInstance(); // 计算创建时间是星期几 cal.setTime(createTime); int createWeek = cal.get(Calendar.DAY_OF_WEEK)-1; if(createWeek==0) createWeek=7; System.out.println("创建时间是星期" +原创 2021-01-27 13:04:07 · 862 阅读 · 0 评论 -
mysql处理微信表情
mysql5.7以上可以通过base64函数来处理表情插入insert into wx_user (nick_name) values (to_base64('gavin????'));插入结果如下图查询select CONVERT(from_base64(nick_name) , CHAR) as nick_name from wx_user;查询结果如下图...原创 2021-01-27 11:04:39 · 337 阅读 · 0 评论 -
java利用redisson实现分布式锁
最近开发一了个答题抽奖项目,由于部署项目采用了负载均衡策略,分配奖品时必须使用分布式锁,项目开发完成后记录一下利用redisson实现分布式锁的过程一、springboot项目整合redissonredisson pom依赖如下 <!--Redis分布式锁--> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifa.原创 2020-08-26 17:59:55 · 1690 阅读 · 0 评论 -
JAVA多字段排序
使用JDK1.8的stream api可以轻松实现多字段排序首先创建Student类如下/** * @title * @author gavin * @date 2020年8月11日 */public class Student { // 姓名 private String name; // 分数 private int score; // 名次 private int rank; public int getScore() { return score; }.原创 2020-08-11 15:51:25 · 3411 阅读 · 0 评论 -
java响应实体类封装
前后端分离的开发模式中,或者与第三方接口交互,需要规范接口响应,下面是我在开发中的封装的一组响应实体类原创 2020-06-11 10:24:49 · 6286 阅读 · 1 评论 -
JAVA内存分析
Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区(静态区)method area。栈的特点如下栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)栈属于私有线程,不能实现线程间的共享栈的存储特性是“先进后出,后进先出”栈是由系统自动分配...原创 2019-12-11 19:01:35 · 1425 阅读 · 0 评论 -
微信公众号开发 - 环境搭建
微信公众号开发网络交互原理图如下搭建公网服务器原创 2019-11-20 20:46:42 · 776 阅读 · 0 评论 -
微信公众号开发 - 配置表设计以及接入公众号接口开发
微信公众号配置表设计在公众号的开发过程中,很多接口都需要读取配置,如appId、appSecret、菜单配置等,因此在开发之前,配置表的设计尤为重要。创建表名为wx_cfg的配置表,建表语句如下CREATE TABLE `wx_cfg` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键', `type` va...原创 2019-11-25 15:57:58 · 1849 阅读 · 0 评论 -
微信公众号开发 - token获取(保证同一时间段内只请求一次)
创建wx_token表,存放tokenCREATE TABLE `wx_token` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键', `token_type` varchar(20) NOT NULL COMMENT 'token类型,access_token:基础token,jsapi_ticket:j...原创 2019-11-27 16:54:59 · 3332 阅读 · 0 评论 -
微信公众号开发 - 菜单按钮bean封装
完整代码请访问github:https://github.com/liaozq0426/wx.git上篇文章完成了微信公众号token的获取,接下来开始开发微信公众号自定义菜单,在开发自定义菜单前,先完成菜单和按钮bean的封装,因为在开发自定义菜单时需要用到从微信官方文档可以看到,公众号菜单的数据结构如下{ "button":[ { "type...原创 2019-11-28 16:32:23 · 802 阅读 · 0 评论 -
微信公众号开发 - 创建菜单
完整代码请访问github:https://github.com/liaozq0426/wx.git在上篇文章中完成了菜单、按钮bean的封装,现在来实现微信公众号菜单的创建向wx_cfg配置表中插入若干菜单记录INSERT INTO `wx_cfg` (`id`, `type`, `name`, `value`, `parent_id`, `sort`, `platform`, `wx...原创 2019-11-28 18:05:28 · 984 阅读 · 0 评论 -
微信公众号开发 - 事件处理和回复消息
完整代码请访问github:https://github.com/liaozq0426/wx.git上篇文章实现了微信公众号菜单创建,现在实现事件的处理和回复用户消息。微信服务器会将所有的用户事件和消息通过公众号后台配置的服务器地址推送给我们,就是下图红框的URL编写代码因为接收微信消息和返回消息都需要以xml格式数据进行传输,因此我们先封装一个工具类BeanXmlUtil,来实...原创 2019-11-29 14:47:00 · 1525 阅读 · 7 评论 -
微信公众号开发 - 发送Emoji表情
完整代码请访问github:https://github.com/liaozq0426/wx.git上篇文章实现了微信公众事件消息的处理,今天来实现向客户端发送Emoji表情我们实现一个菜单按钮点击时后台回复带Emoji表情的文本消息,Emoji表情需要用Unicode编码转换而来public class TestEmoji { public static void main(Str...原创 2019-12-03 18:25:16 · 3113 阅读 · 0 评论 -
详解设计模式之 - 代理模式
什么是代理模式?代理模式有什么作用?代理模式为真实对象提供一个代理,从而控制对真实对象的访问代理模式的作用通过代理,控制对对象的访问!可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。(即:AOP的微观实现!)我们以客户找周杰伦唱歌的场景来举例说明。在未使用代理模式时,假如有客户要找周杰伦唱歌,则流程如下可以看到,未使用代...原创 2019-07-01 15:16:53 · 2412 阅读 · 3 评论 -
shiro刷新权限
/** * @title 刷新用户权限 * @param principal * @desc principal为用户的认证信息 */ public static void reloadAuthorizing(Object principal) throws Exception{ RealmSecurityManager rsm = (RealmSecurityManag...原创 2019-06-24 09:40:45 · 1723 阅读 · 8 评论 -
nginx域名如何同时映射前端页面和后端接口
有时我们希望nginx的 / 既能映射前端页面,又能同时映射后端项目假设前端项目名为 page, 在nginx中的路径为 html/work/page后端java项目发布在tomcat,端口为8080nginx配置代码为location @routerback { proxy_set_header host $host; proxy_set_header X-forwarded-f...原创 2019-07-08 11:10:58 · 6227 阅读 · 0 评论 -
springboot配置多数据源(整合mybatis)
记录一下springboot配置多数据源的过程,本文完整代码git地址:https://github.com/liaozq0426/springboot-many-datasource.git引入jar包,其中druid-spring-boot-starter为阿里巴巴数据库连接池框架druid<dependencies> <dependency> <g...原创 2019-07-08 15:33:38 · 1917 阅读 · 0 评论 -
mybatis逆向工程
记录一下mybatis逆向工程的使用项目结果如下图所示逆向成功主要用到两个文件generatorConfig.xml,逆向工程的配置信息,包含数据库连接信息、代码生成路径、指定要生成的数据库表等。<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//m...原创 2019-06-24 17:59:51 · 2033 阅读 · 1 评论 -
java解决请求跨域的两种方法
java解决请求跨域问题,有以下两种写法1.使用拦截器,实现javax.servlet.Filter接口import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import ja...原创 2019-07-04 11:20:43 · 16836 阅读 · 6 评论 -
springboot项目部署至tomcat并启用log4j
springboot项目要使用 tomcat 容器部署,有以下几个步骤1.修改pom文件,将项目打包类型改为war<packaging>war</packaging>2.starter 使用spring-boot-starter-web,并且将spring-boot-starter-tomcat依赖设置为部署时不使用,因为tomcat容器已经包含了相关依赖<...原创 2019-07-04 19:24:29 · 3078 阅读 · 0 评论 -
新版Dubbo Admin部署
新版的Dubbo Admin已经升级为springboot项目,项目下载地址也有变化下载项目,github地址为 https://github.com/apache/dubbo-admin.git ,下载完成后,项目结构如下图所示修改dubbo-admin模块的application.properties配置文件,配置文件内容如下#服务端口server.port=7001sprin...原创 2019-08-30 14:04:13 · 214 阅读 · 0 评论 -
超详细springboot整合dubbo
记录一次springboot整合dubbo的过程文章目录项目结构说明项目结构说明项目结构如下图所示springboot-dubbo是一个maven的多模块项目,各个模块的作用如下springboot-dubbo-service 模块为dubbo服务接口项目,之所以将接口单独创建一个项目,是因为dubbo接口既需要被dubbo服务实现类实现,也需要被消费者引用,也就是说dubbo接口项...原创 2019-09-25 14:11:52 · 1327 阅读 · 0 评论 -
Springboot整合quartz框架(附代码)
以前使用springmvc项目时,整合quartz框架多用配置文件的形式,使用springboot后,可以完全用注解来整合quartz。首先创建一个简单的maven项目,然后修改pom配置文件,引入需要用到的依赖<parent> <groupId>org.springframework.boot</groupId> <artifactId>s...原创 2019-07-01 18:21:02 · 2839 阅读 · 0 评论