自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (1)
  • 收藏
  • 关注

转载 springboot实现定时任务,异步操作,统一结果返回,全局异常处理,拦截器及事务处理

本文都是springboot的常用和实用功能,话不多说开始吧定时任务1.启动类开启注解@EnableScheduling //开启基于注解的定时任务@MapperScan("com.pdzx.dao")@SpringBootApplicationpublic class VideoApplication { public static void main(String[] args) { SpringApplication.run(VideoApplicatio

2020-08-26 20:22:41 1700

原创 如何避免创建不必要的对象

在保证程序清晰性和简洁性的基础下,重用具有相同功能的对象,避免创建新的对象当该对象的状态是不变化的,新创建的对象具有的功能与原来对象相同的,那么就避免创建新的对象,直接使用原来的对象。除了重用不可变的对象之外,也可以重用那些已知不会修改的可变对象。如果代码中发现这种情况,就做出调整,调整为使用一个对象,避免使用新的对象。1、通过使用静态工厂方法,可以避免创建不需要的对象对于同时提供了静态工厂方法和构造器的不可变类,通常可以使用静态工厂方法而不是构造器,以避免创建不必要的对象。例如,静态工

2020-08-31 21:15:14 422

转载 代码重构

这段时间一直在做系统重构的工作,记录下重构的思想和感悟。什么是代码重构?这里引用维基百科的话:“对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果”。重构既不修正错误,又不增加新的功能性。反而它是用于提高代码的可读性或者改变代码内部结构与设计,并且移除死代码,使其在将来更容易被维护。重构代码可以是结构层面或是语意层面,不同的重构手段施行时,可能是结构的调整或是语意的转换,但前提是不影响代码在转换前后的行为。特别是,在现有的程序的结构下,给一个程序增加一个新的行为可能会非常困难,因此开发

2020-08-30 22:22:54 306

转载 SQL查询语句执行顺序详解

查询操作是关系数据库中使用最为频繁的操作,也是构成其他SQL语句(如DELETE、UPDATE)的基础。当要删除或更新某些记录时,首先要查询出这些记录,然后再对其进行相应的SQL操作。因此基于SELECT的查询操作就显得非常重要。对于查询处理,可将其分为逻辑查询处理及物理查询处理。逻辑查询处理表示执行查询应该产生什么样的结果,而物理查询代表MySQL数据库是如何得到该结果的。两种查询的方法可能完全不同,但是得到的结果必定是相同的逻辑查询处理SQL语言不同于其他编程语言(如C、C++、Java、Pyt

2020-08-30 20:26:26 1597

转载 MySQL 如何优化

优化总结做索引 使用 EXPLAIN 分析,type至少要达到range级别,杜绝出现all级别 最左前缀原则 不要使用 select * 尽量用union all代替union 使用合理的分页方式以提高分页的效率, 如加索引字段作为查询条件 不建议使用%前缀模糊查询 避免在 where 子句中对字段进行 null 值判断(会导致索引失效) 当只需要一条数据的时候,使用limit 1, EXPLAIN中type列达到const类型 如果排序字段没有用到索引,就尽量少排序 如果限制条件

2020-08-30 20:06:42 232

转载 用 Java 实现人脸识别功能(附源码)

远程在家办公的第N天,快要闲出屁了,今天突然有个小学弟加我VX说要咨询我点技术问题(终于可以装X了)。 看了他的需求描述,大概是要做一个Java web版本的人脸识别功能,然后存储人物的特征,再扫脸比对。可是我不会啊。。。不过,作为一个宠粉的暖男,别说有困难就是没困难制造困难也要上,既然人家这么真诚的咨询,说明我还是有被需要的价值,不会那就帮着查查资料吧!没想到还有意外的收获~看完他的境遇,忽然想起自己当年做毕设时那无助的样子,是何等的相似。每每看到有这样的咨询,能帮的我都尽自己最大努力帮,毕竟

2020-08-30 20:00:33 5336 13

原创 简洁好用的数据库表结构文档生成工具

简介在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是手写、后期运维开发,需要手动进行维护到文档中,很是繁琐、如果忘记一次维护、就会给以后工作造成很多困扰、无形中制造了很多坑留给自己和后人,于是需要一个插件工具 screw[1]来维护。screw 特点 简洁、轻量、设计良好。不需要 powerdesigner 这种重量的建模工具 多数据库支持 。支持市面常见的数据库类型 MySQL、Oracle、..

2020-08-30 19:36:51 421

转载 Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘

问题描述:intellij idea连接mysql数据库时报错:Server returns invalid timezone. Go to ‘Advanced’ tab and set ‘serverTimezon’问题分析该错误为时区错误,MySQL默认的时区是UTC时区,比北京时间晚8个小时。解决1、解决方法是在连接字符串后加?serverTimezone=Asia/Shanghai,如果前面有别的参数了,问号‘?’要替换为逻辑与‘&’,设置好时区之后即可正常连接。

2020-08-30 18:57:44 1974

转载 Insert into select语句引发的生产事故

前言  Insert into select请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。但xxx觉得这样有点慢,需要耗费大量的网络I/O,决定采取别的方法进行实现。通过在Baidu的海洋里遨游,他发现了可以使用insert into select实现,这样就可以避免使用网络I/O,直接使用SQL依靠数据库I/O完成,这样简直不要太棒了。然后他就被开除了。事故发生的经过。  由于数据数据库中order_today数据量过大,当时好

2020-08-30 11:25:22 411

转载 重构日记

一个老项目,大家往上面堆代码,堆到现在有100+个模块,就是上次减肥的那个项目。最近几个跑来写后端的同事问我,刚clone下来的项目里面一些模块是用来做什么的,为什么叫这些名字。我对项目的小模块不是很喜欢,但是为了让这几位同事对现在要接手的工作有点信心,想了个听起来很合理的理由跟他解释了一下,他们似懂非懂,说出一个“哦”字都能听出勉强,心里很难受。回过头,另一个老员工问我,这个项目里的某个模块为什么叫这个名字,有什么深意。当时的感觉:〃ωo啲吢ぬ痛ぐ直到最近有同事升级了Gradle版本到4.0.1,

2020-08-30 11:22:15 317

转载 Spring Boot应用优化与升级

前言厂里有个21W行Java代码的项目,通过Gradle管理,子项目有104个,编译之后产生3个可启动的应用,初次编译时间要95秒,产生的关键应用的大小在90M左右。上传到生产服务器运行,启动完成需要137秒。整个过程比较漫长,一次Hotfix会耗掉Ops近10分钟时间。上周三一同事回家试验升级Spring Boot 1.4.0和Gradle 3.0,说好像还不错,这个项目还在使用1.2.7版本,可以找时间的时候升级上去。周四下午有了点时间,就着手开始动手做,三个目标,有优先级地开始进行:加

2020-08-30 11:17:35 952

转载 Spring Boot 2.3 优雅停机来了,新特性真香!

什么是优雅停机先来一段简单的代码,如下:@RestControllerpublicclassDemoController{@GetMapping("/demo")publicStringdemo()throwsInterruptedException{//模拟业务耗时处理流程Thread.sleep(20*1000L);return"hello";}}当我们流量请求到此接口执行业务...

2020-08-30 08:41:53 1409

转载 Intellij IDEA单元测试时报Test events were not received

最近用Intellij IDEA 2019.2.3反复跑单元测试的时候,单元测试没有运行,抛出一个Test events were not received的信息,看了一下运行单元测试的命令竟然是gradle :project-name:cleanTest :project-name:test --tests "some.class.some.method"查了一下,Intellij IDEA从2019.2.1版本开始,会将Gradle管理的项目的测试代码,默认使用Gradle来运行,从Preferen

2020-08-28 16:55:10 2241

转载 mybatis中@param的使用与否

DO层:package com.imooc.o2o.entity;import java.util.Date;public class ShopCategory { private Long shopCategoryId; private String shopCategoryName; private String shopCategoryDesc; private String shopCategoryImg; private In...

2020-08-28 16:51:39 467

转载 mybatis使用@param(“xxx“)注解传参和不使用的区别

public interface SystemParameterMapper { int deleteByPrimaryKey(Integer id); int insert(SystemParameterDO record); SystemParameterDO selectByPrimaryKey(Integer id);//不使用注解 List<SystemParameterDO> selectAll(); int updateByPrim.

2020-08-27 20:37:32 965 3

转载 MyBatis数据库字段与实体类属性的映射

在数据库中,由于大多数数据库设置不区分大小写 ,因此下画线方式的命名很常见,如28user_name 、 user_email 。在 Java 中, 一般都使用驼峰式命名,如 userName 、 userEmail 。因为数据库和 Java 中的这两种命名方式很常见,因此 MyBatis 还提供 了 一个全局属性mapUnderscoreToCamelCase ,通过配置这个属性为 true 可以自动将以下画线方式命名的数据库列映射到 Java 对象的驼峰式命名属性中。这个属性默认为 false

2020-08-27 19:49:41 2908

转载 @requestBody 与@requestparam;@requestBody的加与不加的区别。

首先说明:(一)首先说明xia @requestBody与@requestParam的区别spring的RequestParam注解接收的参数是来自于requestHeader中,即请求头。都是用来获取请求路径(url )中的动态参数。也就是在url中,格式为xxx?username=123&password=456。功能与@pathvarible。RequestBody注解接收的参数则是来自于requestBody中,即请求体中。知识点:(二)Content-Type...

2020-08-27 19:44:09 651

转载 MySql UNIX_TIMESTAMP和FROM_UNIXTIME函数讲解

1. unix_timestamp(date)将时间转换为时间戳,如果参数为空,则处理的是当前的时间(返回从'1970-01-01 00:00:00'GMT开始的到当前时间的秒数,不为空则它返回从'1970-01-01 00:00:00' GMT开始的到指定date的秒数值),date可以是一个DATE字符串、一个DATETIME字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。select unix_timestamp();结果:2 from_un

2020-08-27 13:09:32 1328

转载 MySQL 数据库中日期与时间函数 FROM_UNIXTIME(), UNIX_TIME()

这几天写代码,反复用到将日期时间字段转化成数字串和日期格式字符串的情况,感觉自己还处于壹知半解之中,索性花点时间查下相关资料,基本弄明白了 MySQL 中两个常用的日期函数的用法,记录于此,作为笔记供参考。1、FROM_UNIXTIME( unix_timestamp )参数:通常是壹个十位的数字,如:1344887103返回值:有两种,可能是类似 'YYYY-MM-DD HH:MM:SS' 这样的字符串,也有可能是类似于 YYYYMMDDHHMMSS.uuuuuu 这样的数字,具体返回什么取决于该

2020-08-27 11:17:04 3411

转载 mysql中if()函数使用

大概意思:在mysql中if()函数的用法类似于java中的三目表达式,其用处也比较多,具体语法如下:IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。定义:IF函数根据条件的结果为true或false,返回第一个值,或第二个值语法:IF(condition, value_if_true, value_if_false)参数:参数 描述 condition

2020-08-27 10:02:31 721

转载 mysql:对结果字段进行判断的函数

事前准备:实例用的表结构和数据/*Navicat MySQL Data TransferSource Server : workSource Server Version : 50616Source Host : localhost:3306Source Database : souvcTarget Server Type : MYSQLTarget Server Version : 50616File Encoding

2020-08-27 09:52:54 1019

转载 MySQL 常用函数的使用

I. MySQL 常用函数为了简化操作,MySQL 提供了大量的函数给程序员使用。例如,要输入当前时间,可以调用 now() 函数。 函数可以出现的位置:插入语句的 values() 、更新语句、删除语句、查询语句及其子句中。 菜鸟教程:https://www.runoob.com/mysql/mysql-functions.html1. 字符串函数a. 常用函数 函数:CONCAT(s1,s2...sn) 描述:字符串 s1,s2 等多个字符串合并为一个字符串 实例:select

2020-08-27 09:43:10 510

转载 spring boot 全局异常统一拦截处理

经常开发接口的同学肯定知道,接口返回的数据格式必须有固定的格式,方便调用者对于不同的异常我们在实际开发中最好也有统一的处理在spring boot中与默认的异常页面,如果我们要开发rest风格的api,返回的json数据那么异常提示也要是json格式的,返回一个页面的错误异常就不友好了接下来我看怎么统一处理这些异常信息以及自己定义一些常用的异常先定义一个全局的异常类,继承Exception ,里面有code属性,表示请求的响应状态码public class GlobalExcept

2020-08-26 19:42:32 1483

原创 spring 几种获得bean的方法

实现ApplicationContextAwarepublic class SpringContextUtil implements ApplicationContextAware { //Spring应用上下文环境 private static ApplicationContext applicationContext; /** * 实现ApplicationContextAware接口的回调方法,设置上下文环境 * @param applicationConte

2020-08-26 19:19:41 339

转载 lombok @Slf4j注解

前言:@Slf4j是啥,它是干啥的?@Slf4j是用作日志输出的,一般会在项目每个类的开头加入该注解,如果不写下面这段代码,并且想用logprivate final Logger logger = LoggerFactory.getLogger(当前类名.class);就可以用@Slf4来代替;这样就省去这段很长的代码。import ...@Controller@RequestMapping("/abc")@Slf4jpublic class QueryBillCon.

2020-08-26 16:34:32 23863

转载 枚举Enum优化大量if else的又一实例

1. 场景当我需要调用其他其他接口,这个接口某个参数需要根据不同情况来传递不同的固定值如:B接口调用A接口,A接口中需要传递授权码,这个授权码在不同的业务场景不同的手机系统需要传递不同的值,普通的传值方式如下:public void notEnum(Request req) { TestReq testReq = new TestReq();//A接口的请求 if("android".equals(req.getSysType())) { if("a".equa

2020-08-26 15:27:57 686

转载 几个简单实例介绍如何把if-else代码重构成优雅代码

1、使用卫语句重构前:public void doSomething(DomainA a) { if (a != null) { assignAction; if (a.getB() != null) { otherAction; if (a.getB().getC() instanceof DomainC) { doSomethingB(); doSomethingA(); doSomthingC

2020-08-26 15:19:20 290

转载 CTO 写的代码,真是绝了(使用枚举来巧妙干掉if-else,使代码更加优雅)

导读:本文通过一个简单的例子来展示如何通过枚举巧妙地干掉if-else,使代码看起来更佳优雅。场景:当我们接收到一些数据需要对其进行处理时,由于它们来自于不同的渠道(如:腾讯,头条),不同渠道所需的处理方式不同,下面我们写一个简单Demo来实现该的场景。解决思路1、首先构建一个 GeneralChannelRule 基础规则抽象类,定义一个抽象方法process(),不同的渠道都需要实现该抽象方法。public abstract class GeneralChannelRule { .

2020-08-26 13:21:32 385

转载 && || 与或 逻辑运算符的短路运算

关于&&和||的短路运算问题,我们主要关注三个问题:什么是&&和||的短路运算?有什么用?怎么用?问题一:什么是&&和||的短路运算?1、&&和||属于逻辑运算符。关于&&和||的表达式的运算规则是这样的:表达式1 || 表达式2,只要任意表达式为true,则整个表达式的运算结果为true。表达式1 && 表达式2,只有所有表达式都为true,则整个表达式的运算结果才为true。根据集合的补集的思

2020-08-25 16:47:28 1521

原创 深入理解Java枚举类型(enum)

https://www.cnblogs.com/zhanqing/p/11076646.html

2020-08-25 16:05:17 256

转载 通过lombok带你读透Builder构建器

通过lombok带你读透Builder构建器很久之前,我在《effective java》上看过Builder构建器相关的内容,但实际开发中不经常用。后来,在项目中使用了lombok,发现它有一个注解“@Builder”,就是为java bean生成一个构建器。于是,回头重新复习了下相关知识,整理如下。1. lombok使用样例// 创建名为Officer的java bean@Builderpublic class Officer { private final String id

2020-08-25 14:55:14 328

转载 Spring的BeanUtils有坑?可能是你用错了!

之前看到了一篇文章《用Spring的BeanUtils前,建议你先了解这几个坑》,貌似最近还有很多公众号在发这个,今天结合实际操作来说说我的观点.在这篇文章里面,作者最后得到了这几个结论: 1.Spring得BeanUtils得CopyProperties方法需要对应得属性有getter和setter方法; 2.如果存在属性完全相同得内部类,但是不是同一个内部类,即分别属于各自得内部类,则Spring会认为属性不同,不会Copy;(其实此方法属于浅拷贝) 3.泛型只在编译期.

2020-08-25 13:27:03 453

转载 使用springframework中BeanUtils.copyProperties的坑

一、属性无法复制target 必须是 editable 的子类。 source 属性的 get 方法必须是 public 才能复制。 target 属性没有 set 方法的无法复制。 target 的 set 方法不是 public 无法复制。 对于某一个相同属性名的属性: 如果 source 和 target 不同类型,无法复制; source 和 target 类型相同,可以复制; source extends target 可以复制。 特殊的属性 List 类型,如果 List<T

2020-08-25 13:16:27 1152 1

转载 Java获取请求客户端的真实IP地址-详解

Java,获取客户端的IP地址的方法:request.getRemoteAddr()这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了;如果使用了反向代理软件,将http://192.168.1.110:2046 的URL反向代理为http://www.javapeixun.com.cn的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或 192.168.1.110...

2020-08-20 19:18:21 763

原创 Java获取请求客户端的真实IP地址-生产在用

/** * 获取当前网络ip * @param request * @return */public String getIpAddr(HttpServletRequest request) { String ipAddress = request.getHeader("x-forwarded-for"); if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress.

2020-08-20 19:13:20 365

转载 Java获取请求客户端的真实IP地址

springboot 获取访问接口的请求的IP地址获取IP的工具类:import javax.servlet.http.HttpServletRequest;import java.net.InetAddress;import java.net.UnknownHostException;/** * @Author : JCccc * @CreateTime : 2018-11-23 * @Description : * @Point: Keep a good mood **/p

2020-08-20 19:07:55 1569

原创 Java获取远程客户端IP方法

public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } .

2020-08-20 19:03:59 958

转载 JAVA通过身份证号码获取出生年月、年龄及性别

package com.acat.util;import org.apache.commons.lang.StringUtils;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/** * @Description:身份证号的util * @Author: * @Date: Created in 11:26 2019-03-27 * @Modified B.

2020-08-20 18:37:42 4713 1

转载 java通过身份证号码获取出生日期、性别、年龄

身份证号码:15位:6位地址码+6位出生年月日(900101代表1990年1月1日出生)+3位顺序码18位:6位地址码+8位出生年月日(19900101代表1990年1月1日出生)+3位顺序码+1位校验码地区码:1、 第一、二位表示省(自治区、直辖市、特别行政区)。2、 第三、四位表示市(地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码)。其中,01-20,51-70表示省直辖市;21-50表示地区(自治州、盟)。3、 第五、六位表示县(市辖区、县级市、旗)。01-18表示市辖区或地区

2020-08-20 18:32:59 3084

转载 java判断一个字符串是否为数字型

方法一:用JAVA自带的函数(只能判断正整数)public static boolean isNumeric(String str) { for (int i = str.length(); --i >= 0;) { if (!Character.isDigit(str.charAt(i))) { return false; } } return true;}方法二:正则(推荐,速度最快)public static boo.

2020-08-20 18:16:39 432

Java8 新特性.rar

Java8新特性,包含代码实例与技术文档。

2020-03-29

空空如也

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

TA关注的人

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