自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis 分布式锁

https://redis.io/topics/distlockhttp://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html

2018-10-09 21:56:53 315

原创 Spring bean 的初始化和销毁回调

有时想让 Spring Bean 在创建或者销毁时执行某些特定方法,有三种方式使用注解 @PostConstruct 和 @PreDestroy实现 InitializingBean 和 DisposableBeanXML 配置中指定 init-method 和 destroy-methodSpring 官方推荐第一种方式,使用注解 @PostConstruct 和 @PreDes...

2018-09-05 20:44:25 1354

原创 @Inherited 的作用

在注解上使用@Inherited 表示该注解会被子类继承,注意,仅针对类,成员属性、方法并不受此注释的影响。对于类来说,子类要继承父类的注解需要该注解被 @Inherited 标识。 对于成员属性和方法来说,非重写的都会保持和父类一样的注解,而被实现的抽象方法,被重写的方法都不会有父类的注解。 Indicates that an annotation type is automati...

2018-08-27 21:55:10 10132 1

原创 Spring 中使用 Redis

引入Maven<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId&a

2018-08-05 14:08:19 549

原创 Spring Web 中时间日期格式化

通常我们习惯使用 2018-07-07 12:00:00 这样的日期格式,那么在 Spring 中需要配置自己的转换器SpringMVC @Configuration@EnableWebMvcpublic class WebConfiguration implements WebMvcConfigurer { @Override public void configu...

2018-07-07 13:45:46 1643

原创 MySQL 设置字符集

查看当前字符集show variables like '%character%' 设置字符集,修改配置文件 /etc/my.cnf[mysqld]character-set-server=utf8 [client]default-character-set=utf8 [mysql]default-character-set=utf8对于新建的数据库和表会使用新的字符...

2018-06-17 17:54:10 287

原创 MySQL 事务隔离级别

MySQL 的 InnoDB 引擎支持四种事务隔离级别READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE默认隔离级别是 REPEATABLE READ要修改隔离级别,可使用 SET TRANSACTION 命令在某次连接上修改,要设置服务器的隔离级别,可使用 --transaction-isolation 选项或...

2018-06-11 16:22:26 165

原创 js 箭头函数 this

普通的函数决定 this 指向的规则如果使用 new 创建对象,那么 this 指向这个刚创建的对象:var bar = new foo()如果函数使用了 call 或者 apply 调用,this 指向指定的对象:var bar = foo.call(obj2)如果函数被某个对象显示调用,this 指向这个对象:var bar = obj1.foo()否则,this 指向全局对象,比...

2018-05-19 11:24:41 2253

原创 nginx location 配置

uri 匹配规则语法:location [ = | ~ | ~* | ^~ ] uri { ... }uri 有四种修饰符= 精确匹配~ 正则匹配(大小写敏感)~* 正则匹配 (大小写不敏感)^~ 优先前缀匹配,忽略接下来的正则匹配行为一个 location 可以有两种定义正则表达式:以 ~(大小写敏感) 或者 ~*(大小写不敏感) 修饰前缀字符串匹配顺序...

2018-05-13 10:36:01 171

原创 Spring MVC 异常处理

Spring MVC 提供了多种异常处理方式,总的来说,有四种方式:@ResponseStatus@ExceptionHandler@ControllerAdviceHandlerExceptionResolver@ResponseStatus通常用于自定义异常上,并会产生合适的 HTTP 状态码@ResponseStatus(value=HttpStatus.NOT...

2018-04-24 21:56:18 247

原创 POST 请求中 multipart/form-data、 application/x-www-form-urlencoded 的区别

以 Postman 为工具来看一下这两个编码类型的数据格式,假设我们需要传输的数据为{ "name": "test", "age": 18}multipart/form-data 我们上传文件的时候通常会选择这个格式,可以看到 Content-Type 一行有个 boundary,这个 boundary 是一个分隔符,可以把它看成 get 请求中的 &amp...

2018-04-22 21:59:42 8429

原创 SpringMVC 处理 multipart/form-data 请求

用 postman 做测试时,发现用 multipart/form-data 的格式发送请求,要么是接收不到数据,要么就是 415 错误。出现这些问题通常是因为没有配置好 Multipart resolver 引起的。SpringMVC 的 Multipart resolver 有两种实现基于 Apache Commons FileUpload基于 Servlet 3.0 的 mu...

2018-04-10 11:21:42 4306

原创 字符集与编码

乱码,无疑是开发人员都会经历的痛。虽然每次我们都能够通过搜索引擎解决乱码的问题,但对于产生乱码的原因,还有对字符集和编码的理解,大多都是懵懵懂懂。其实编码所涉及的技术并不复杂,关键是要准确理解其概念。字符集和编码字符集,顾名思义,就是字符的集合,比如常见的 UNICODE、GB2312、ASCII 字符集等。字符集有两个概念:使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。...

2018-04-02 22:34:58 339

原创 Maven profiles

Maven 中的 profiles,大致上可以想象成 Spring 中的 profile,都是用来管理不同环境下的配置。概述举一个简单的例子,我们有开发环境和测试环境,开发环境用的内存型数据库,测试环境用的测试用的 MySQL 数据库,数据库连接信息写在了 db.properties 文件中,如果每次构建都要手动修改连接信息肯定是很不方便的,这时候 profiles 就很有用了。比...

2018-03-24 10:53:41 837

原创 [Java] Class.getResource 和 ClassLoader.getResource 的区别

获取项目中的文件时,通常可以使用 Class 或者 ClassLoader 的 getResource 方法。对于 Class 的 getResource 方法,有两种路径写法以 / 开头:以 classpath 为相对目录不以 / 开头:以当前类所在的包路径为相对路径 而 ClassLoader 的 getResource 方法总是从 classpath 开始搜寻。本质上 ...

2018-03-08 16:45:32 395

原创 Linux 命令行练习(三)系统相关

使用的系统:Ubuntu 16.04(1) 网络相关 一些相关命令:ip 、ifconfig 、nmcli nmcli 是一个功能强大的网络管理工具查看网络信息,如 ip 地址 ifconfig ip address nmcli connection [连接名](2)日期时间相关显示当前时间信息 date 显示当前日期 timedatectl 还显示时区等详...

2018-03-04 17:12:08 235

原创 Linux 命令行练习(二)文件管理

使用的系统:Ubuntu 16.04档案的创建与移动进入某个目录 cd dir 一些特殊目录: . 代表当前目录 .. 代表上一层目录 - 代表前一个目录 ~ 代表『目前使用者身份』所在的 home 目录显示当前目录 pwd列出当前目录的文件的详细信息 ls -al创建一个目录 “temp” mkdir temp删除一个目录 ...

2018-02-28 21:00:18 1015

原创 Linux 命令行练习(一)账号管理

使用的系统:Ubuntu 16.04与账号、群组相关的文件 /etc/passwd :存放账号信息 /etc/shadow :存放账号密码 /etc/group :存放群组信息查看系统的所有用户 查看 /etc/passwd 文件,cat /etc/passwd查看系统的所有群组 查看 /etc/group 文件,cat /etc/group新增一个用户 “tempus...

2018-02-27 14:53:06 355

原创 File 类的 getPath()、getAbsolutePath()、getCanonicalPath() 的区别

考虑一下几种路径:C:\temp\file.txt - 绝对路径,也是规范路径.\file.txt - 相对路径C:\temp\myapp\bin\..\..\file.txt 这是一个绝对路径,但不是规范路径关于什么是规范路径可参考 What’s a “canonical path”? 粗略的认为规范路径就是不包含相对路径如 ..\ 或者 .\ 的绝对路径看一个例子:...

2018-02-24 20:57:53 22641 1

原创 计算机网络

OSI 模型 开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化组织(ISO)提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。定义于ISO/IEC 7498-1。 — 维基百科上图中,从左往右分别是 五层协议、T...

2018-02-10 15:41:17 1943

翻译 Node.js 中 __dirname 和 ./ 的区别

stackoverflow 地址概要Node.js 中,__dirname 总是指向被执行 js 文件的绝对路径,所以当你在 /d1/d2/myscript.js 文件中写了 __dirname, 它的值就是 /d1/d2 。相反,./ 会返回你执行 node 命令的路径,例如你的工作路径。有一个特殊情况是在 require() 中使用 ./ 时,这时的路径就会是含有 requi

2018-01-18 12:47:32 117562 1

原创 [Spring] 基于 Java 的配置

在对 Spring 进行显示配置的时候,有两种可选方案:Java 和 XML。Java 配置是更好的选择,因为它更强大,类型安全且对重构友好。因为它就是 Java 代码,就像程序中的其他 Java 代码一样。同时,JavaConfig与其他的Java代码又有所区别,尽管它与其他的组件一样都使用相同的语言进行表述,但JavaConfig是 配置代码。这意味着它不应该包含任何业务逻辑,JavaConf

2017-12-23 11:29:42 1313

翻译 JavaScript 中的继承

原文 不像其它语言,js 没有类的概念。它使用原型和原型链来实现继承。如果你不知道什么是原型,请先看这篇文章。原型链原型链指的是一个对象的 __proto__ 指向另一个对象,而不是指向构造函数。如果这另一个对象的 proto 又继续指向另一个对象,这就会产生一个链式关系,这就是原型链。下面实现一个原型链//SuperType constructor functionfunction Supe

2017-12-09 11:42:46 679

原创 [Spring]Cannot enhance @Configuration bean definition....

在 Spring 中使用基于 Java 的配置时,配置 Mybatis 的 mapperScannerConfigurer 如@BeanMapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigure

2017-12-04 21:53:03 10369

原创 关于 SAXParseException Content is not allowed in Prolog (前言中不允许有内容)

解析 XML 文件的时候,如 Mybatis 的 Mapper 文件,有时会出现 org.xml.sax.SAXParseException 前言中不允许有内容 的异常,英文就是 Content is not allowed in Prolog 。导致这个问题通常是两个原因XML 文件开头出现了空白符或其它字符,比如 <?xml version="1.0" 这种开头有空格或者是 .<?xml ve

2017-12-03 21:20:54 17379

翻译 JavaScript 中的 prototype

原文在 js 中创建对象,其中一个方式是使用构造函数,请看下面的一个例子function Human(firstName, lastName) { this.firstName = firstName, this.lastName = lastName, this.fullName = function() { return this.firstName +

2017-11-30 22:10:42 776

原创 Spring Test 中重置自增字段

在集成测试中,对于保存数据到数据库的方法,我们需要验证是否数据被正确地保存到数据库中。对于使用 Spring 的项目,可以使用 Spring Test DbUnit 和 DbUnit 进行测试。然而,在数据对比的时候,自增的字段就成了一个障碍,因为自增字段是自动生成的,在测试的时候,我们无法确定下一个插入数据的自增字段的值。

2017-11-16 23:53:38 1750

原创 Spring + DbUnit 测试

Spring dbunitspring-test-dbunit 提供了 Spring 与 DbUnit 的集成,在 Spring 中我们可以使用注解来进行数据的准备和清理。配置为了使用 DbUnit 的注解,我们需要使用 DbUnitTestExecutionListener 类,下面是典型的使用 JUnit 4 的注解@RunWith(SpringJUnit4ClassRunner.class)

2017-11-11 11:51:55 5508 2

翻译 理解 Gradle Wrapper

原文地址绝大多数使用 Gradle 的开发者都会使用 Gradle Wrapper。这是很正确的选择因为这意味着该项目的开发人员不需要操心于 Gradle 的安装上。正因为 wrapper 无处不在,因此我们需要理解它可以做什么。如果你还没使用 wrapper如果你还没开始使用 wrapper,是时候尝试一下了。使用 wrapper 保证了团队中每一个开发者都使用同样版本的 Gradle,并能够使用

2017-11-04 14:46:44 2971

原创 SVN 分支与合并(branch、merge)

使用命令行进行 svn 分支的创建和合并

2017-11-01 23:06:26 1450

原创 Spring + Mybatis 单元测试 (DAO)

Spring + Mybatis 的 dao 层的单元测试内存数据库DbSetup

2017-10-22 17:55:24 13359 1

原创 java.lang.OutOfMemoryError: PermGen space

出现问题的运行环境: JDK 1.7,Tomcat 7Tomcat 运行的时候,或热部署时偶尔会出现 java.lang.OutOfMemoryError: PermGen space 的错误。PermGen 指 Permanent Generation,是 Java 内存划分的一个区域,包含了类相关的信息,包括字节码、名字和JIT等信息。出错原因有太多的类或太大的类被加载到 permanent g

2017-10-15 14:19:00 801

原创 解决 MySQL server has gone away

导致 MySQL server has gone away 问题出现的最常见原因是服务超时跟连接已关闭。默认情况下,当没有进行任何操作,MySQL 服务会在 8 小时之后关闭,通过在启动 mysqld 时设置 wait_timeout 变量可以改变这个时间限制,参考 “Server System Variables”。我遇到这个问题是因为执行 sql 文件时,数据量过大的原因。这时候需要增大执行量,

2017-10-09 21:38:54 796

原创 Spring 与 Mybatis 整合

参考官方文档在引入 Spring 和 Mybatis 的包之后,要将两者整合,我们还需要 Spring-Mybatis 的包。使用这个类库中的类, Spring 将会加载必要的 MyBatis 工厂类和 session 类。 这个类库也提供一个简单的方式来注入 MyBatis 数据映射器和 SqlSession 到业务层的 bean 中。安装如果你使用 Maven,那么在 pom.xml 中加入下面

2017-10-06 11:18:57 765

原创 MySQL time_zone

使用的是 MySQL 5.7在使用 SSM 框架时,连接数据库出现错误 The server time zone value ‘xxxxx’(这里乱码了) is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the

2017-10-03 23:16:00 20385

原创 Maven 资源文件(Resources)的打包(package)与过滤(filter)

资源文件,最常见的 XML 、Properties 配置文件,比如使用 Mybatis 时的 Mapper,Spring 的 ApplicationContext 配置。打包(package)根据 Maven 的默认项目结构,资源文件放置在 src/main/resources 中,测试的资源文件在 src/test/resources 中。放置在 src/main/resources 中的资源文

2017-09-24 23:32:36 20367 3

原创 更改 Tomcat 使用的 JDK 版本

如果 Tomcat 使用的 JDK 版本跟所部署的项目使用的 JDK 版本不一致,可能会导致部署失败。 我使用的 Tomcat 版本为 7 跟 8,修改 JDK 版本方式如下进入 Tomcat 根目录,修改 \bin\setclasspath.bat 文件,rem 开头的语句为注释,在前面增加 set JAVA_HOME=jdk路径set JAVA_JRE=jre路径注意等号两边不能有空格

2017-09-19 21:25:15 2809

原创 Maven 中使用本地 jar 包

如果引用了在 Maven 远程仓库中没有的 jar 包,比如自己组使用的类包,或者是一些历史遗留的包,在使用 Maven 构建过程中就容易遇到找不到类之类的问题。比如我遇到过的问题就有:编译时找不到 xxx 类进行测试时找不到 xxx 类针对这两个问题的一些解决方法编译 只针对编译的时候可以通过配置插件来设置扩展(即本地 jar)的位置,假设我们的 jar 包放在 lib 文件...

2017-09-10 18:38:39 2023

原创 Maven POM文件中依赖与插件的配置

POM(Project Object Model)是 Maven 工程的工作基础,以 pom.xml 的形式存在于项目中,在这里配置构建工程的详细信息。它为大多数项目都预先配置了一些默认值,如构建目录 build,源码目录 src/main/java,测试源码目录 src/test/java 等等。这里对如何进行最常用的依赖与插件的配置作简单的记录。官方文档Super POM(顶层 POM)Supe

2017-08-27 23:21:51 35218 2

翻译 Maven 构建生命周期

Maven 的一个核心概念,Build Lifecycle,构建生命周期,明确地定义了一个项目构建跟发布的过程Maven 有三个内建的构建生命周期:default,clean 和 site。default:项目部署的处理clean:项目清理的处理site:项目站点文档创建的处理构建生命周期都由不同的阶段(Phase)构成。例如,default 生命周期由以下阶段构成,需要查看完整列表,参考这

2017-08-19 14:21:08 1059

空空如也

空空如也

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

TA关注的人

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