Spring、Spring Boot和TestNG测试指南 - 测试Spring MVC

2017-08-23
阅读 3 分钟
7.7k
Github地址 Spring Testing Framework提供了Spring MVC Test Framework,能够很方便的来测试Controller。同时Spring Boot也提供了Auto-configured Spring MVC tests更进一步简化了测试需要的配置工作。 本章节将分别举例说明在不使用Spring Boot和使用Spring Boot下如何对Spring MVC进行测试。 例子1:Spring 测试Spring...

Spring、Spring Boot和TestNG测试指南 - 测试关系型数据库

2017-08-22
阅读 6 分钟
5.6k
同时Spring Boot提供了和Flyway的集成支持,能够方便的管理开发过程中产生的SQL文件,配合Spring已经提供的工具能够更方便地在测试之前初始化数据库以及测试之后清空数据库。

Spring、Spring Boot和TestNG测试指南 - 使用Mockito

2017-07-23
阅读 5 分钟
12.3k
Mock测试技术能够避免你为了测试一个方法,却需要自行构建整个依赖关系的工作,并且能够让你专注于当前被测试对象的逻辑,而不是其依赖的其他对象的逻辑。

Spring、Spring Boot和TestNG测试指南 - 使用Spring Testing工具

2017-07-21
阅读 2 分钟
6.8k
既然我们现在开发的是一个Spring项目,那么肯定会用到Spring Framework的各种特性,这些特性实在是太好用了,它能够大大提高我们的开发效率。那么自然而然,你会想在测试代码里也能够利用Spring Framework提供的特性,来提高测试代码的开发效率。这部分我们会讲如何使用Spring提供的测试工具来做测试。

Spring Boot & Spring MVC 异常处理的N种方法

2017-07-05
阅读 12 分钟
20.8k
github:[链接] 参考文档: Spring Boot 1.5.4.RELEASE Documentation Spring framework 4.3.9.RELEASE Documentation Exception Handling in Spring MVC 默认行为 根据Spring Boot官方文档的说法: For machine clients it will produce a JSON response with details of the error, the HTTP status and the exception...

Web项目如何防止客户端重复发送请求

2017-06-09
阅读 2 分钟
18.9k
在Web项目中,有一些请求或操作会对数据产生影响(比如新增、删除、更新),针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱。

设计缓存架构时的一些注意事项

2017-05-27
阅读 2 分钟
3.4k
数据还未缓存,大量并发请求 在数据还未缓存的情况下,大量并发请求过来的话,如果处理不好,很容易就打到DB。 解决思路(1):预先缓存 如果可以事先知道需要缓存哪些数据,那么就预先将这些数据缓存起来。处理方式可以是: 程序启动时 人工在后台触发 解决思路(2):排队 把映射到同一个缓存key的请求排队,挨个处理...

Jmeter使用陷阱

2017-05-25
阅读 1 分钟
4.1k
在利用压力测试工具benchmark的时候,切忌不要让脚本只跑一次,只跑一次的意思是,比如用jmeter创建300个线程,去跑若干个Sampler,只跑一次。

Mybatis处理一对多关系时的性能考虑

2017-05-19
阅读 1 分钟
5.7k
Mybatis对于处理一对多的情况有三种解决方案: 查询的时候join子表,然后交由mybatis拼装 查询的时候不join子表,另外发起select去抓取子表数据 和第二种类似,只不过利用fetchType=lazy来延缓抓取的时机 这三种方案各有问题: 第一种方案有两个缺陷:1) 做分页查询的时候不准,2) 如果关联子表多,笛卡尔积会非常大 第二...

Tomcat调优笔记

2017-05-07
阅读 2 分钟
5.2k
本文是在Tomcat调优过程中得到的心得(会持续更新),相关环境: java version "1.8.0_131" Tomcat 8.5.14 Jmeter 3.1 Jmeter参数: 300线程 1000循环 URL:[链接] Tomcat server.xml参数: protocol="org.apache.coyote.http11.Http11Nio2Protocol" acceptCount="5000" maxConnections="20000" Tomcat JVM参数:-server...

简解Spring的BeanWrapper、DataBinder、ConversionService、Formatter

2017-04-04
阅读 3 分钟
7.8k
Spring官方文档有专门一个章节阐述了BeanWrapper、DataBinder、ConversionService、Formatter。 同时也有相关章节阐述了Spring MVC中对其的运用: Section 22.16.3, “Conversion and Formatting” Customizing data binding with @InitBinder 不过很遗憾,官方文档对于如何在Standalone app和Spring MVC中应用这些东西讲...

Mybatis Local Cache陷阱

2017-02-10
阅读 1 分钟
11.9k
最近发现一个问题,当使用Spring Transaction的时候,发现对同一个sequence多次调用nextval返回的结果相同。经过一番搜索发现此问题和mybatis local cache有关。

Spring Transaction详解 - Transaction Isolation

2017-02-08
阅读 1 分钟
5.7k
Transaction Isolation 参考文档: Ask Tom: On Transaction Isolation Levels wiki isolation level JDBC transaction 相关代码:github 数据库并发访问读取时的现象 先来了解一下当数据库并发读取时会出现的现象,因为所谓的事务隔离级别是针对这些现象而提出的: Dirty read(wiki):A事务在读取某一行数据的时候,能...

Spring Transaction详解 - Transaction Propagation模式

2017-02-06
阅读 11 分钟
6k
相关文档:Spring官方文档,Javadoc 相关代码:github 在Spring官方文档中只对三种Transaction Propagation模式做了说明: Required RequiresNew Nested 并没有对另外四种做说明: SUPPORTS MANDATORY NOT_SUPPORTED NEVER 此外也没有对不同的Transaction Propagation嵌套组合的行为作一个详细说明,因此本文将会补全这...

Spring Transaction详解 - 手动回滚事务

2017-01-25
阅读 1 分钟
11.7k
在前面的文章异常发生时的回滚机制里讲到,当发生checked exception时将处理权交给了调用方。在这里介绍一种逼不得已,不推荐使用的手动回滚事务的方法:

Spring Transaction详解 - 异常发生时的事务回滚机制

2017-01-23
阅读 1 分钟
6.8k
在Spring官方文档中说到,当Transaction内发生unchecked exception的时候,会自动rollback,但是当Transaction内发生checked exception时,是不会自动rollback的。

Spring Boot启动过程及回调接口汇总

2016-09-16
阅读 13 分钟
21.1k
相关代码在: [链接] 注:本文基于spring-boot 1.4.1.RELEASE, spring 4.3.3.RELEASE撰写。 启动顺序 Spring boot的启动代码一般是这样的: {代码...} 初始化SpringApplication SpringApplication#run(Object source, String... args)#L1174 SpringApplication#L1186 -> SpringApplication(sources)#L236 SpringAppli...

三种东西不要放在数据库

2016-08-17
阅读 1 分钟
2.3k
图片,文件,二进制数据 对数据库的读/写的速度永远都赶不上文件系统处理的速度 数据库备份变的巨大,越来越耗时间 对文件的访问需要穿越你的应用层和数据库层 这后两个是真正的杀手。把图片缩略图存到数据库里?很好,那你就不能使用nginx或其它类型的轻量级服务器来处理它们了。 给自己行个方便吧,在数据库里只简单的...

CSS Selector覆盖顺序

2016-08-17
阅读 1 分钟
3.1k
我们都知道CSS的定义是可以被覆盖的,但是覆盖的顺序可能并不清楚,本文的目的就在于介绍CSS的覆盖顺序。 三种类型CSS的优先级顺序 CSS有三种类型: inline style:以style属性的形式直接写在标签上的 embedded style:写在html文件的<style></style>里的 external stylesheet:引用的外部css文件 这三种类型...

分析JVM GC及内存情况的方法

2016-08-11
阅读 2 分钟
6.5k
当JVM响应变慢或者停滞的时候,我们往往需要对GC和其内存情况是进行分析,下面列举一些常用的分析方法和工具: 获得GC信息的方法 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps 详细解释可以看JAVA SE 6 GC调优笔记 -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStopped -XX:+ PrintGCAppl...

JAVA SE 6 GC调优笔记

2016-08-11
阅读 16 分钟
5.3k
typically, 每次minor collection都会有一些surviving objects转移到tenured generation

Ajax局部页面刷新和History API结合的陷阱

2016-08-11
阅读 4 分钟
4.5k
ajax在现代网站已经得到非常普遍地应用,主要的好处大家都知道(异步加载数据,不用刷新整个浏览器,更小的数据传输尺寸)。对于那些老网站或者老项目来说全盘改造成ajax并不现实,于是就有了“局部页面刷新”这个解决方案。如果不知道“局部页面刷新”是何物请看这里,这里和这里。

反向代理使用https协议,后台tomcat使用http,redirect时使用错误协议的解决办法

2016-08-08
阅读 4 分钟
13.7k
问题描述 今天遇到一个奇怪的现象,原先部署在外网访问的应用某些功能出现了异常错误,用chrome开发者工具调试后发现一个奇怪的错误: 意思基本上就是当前页面是https协议加载的,但是这个页面发起了一个http的ajax请求,这种做法是非法的。 现象 进一步分析后发现以下三个现象: 在排查代码之后并没有发现代码里有任何...

MongoDB string字段索引策略

2016-08-08
阅读 2 分钟
5.1k
在研究MongoDB的索引是发现一个奇怪的问题,给一个string类型的field设置text索引,但是在查询的时候并没有使用索引。比如: {代码...} 从explain()的结果可以发现,在查询的时候只用了BasicCursor,也就是说没有使用索引。 后发现只有当使用$text查询的时候才会用到text索引: {代码...} 只不过这样的话,就没有办法针对...

oracle外键反查套件

2016-08-07
阅读 6 分钟
2.3k
经常和oracle打交道的人都应该遇到会遇到过这么一类需求: 哪些表引用了这个表 这条数据被引用了几次 这张表引用了哪些表,引用的字段是什么 本人也经常遇到这些问题,特别是当删除一条数据总是被告知被引用的时候。于是写了以下外键反查套件: 注: 本套件只支持表中主键列名为ID,ID为NUMBER类型,如果不符合你的需求...

Git Flow简介

2016-08-07
阅读 3 分钟
13.2k
Git Flow是什么? Git Flow是一套基于git的工作流程,这个工作流程围绕着project的发布(release)定义了一个严格的如何建立分支的模型。 Git建分支是非常cheap的,我们可以任意建立分支,对任意分支再分支,分支开发完后再合并。 比较推荐、多见的做法是特性驱动(Feature Driven)的建立分支法(Feature Branch Workflow)。 ...

如何在gerrit中修改已提交的change

2016-08-06
阅读 2 分钟
19k
在gerrit审核中,经常会遇到开发人员提交的代码审核不通过的情况。 那么开发人员这时有两个选择: 按照要求修改代码,然后重新提交一次代码 修改原来的Change 第一种方法会产生多次commit,而这些commit实际上是没有太多意义的,所以不推荐使用。 所以推荐第二种方法。下面讲解如何做: 安装 commit-msg hook 安装gerrit...

SQL NULL值比较陷阱

2016-08-06
阅读 1 分钟
10.2k
数据库里null值的比较是一件非常坑爹事情,一不小心就会掉到陷阱里去。以一个非常常见的场景为例: {代码...} 看上去没什么问题吧。错了!如果field1、field2中有一个值为null,那么结果就会变得很神奇。 下面列出各种情况,你可以先不看答案,看看你能猜对几个 SQL 结果 select 1 from dual where null=null 什么都没有...

git的reset和checkout的区别

2016-08-05
阅读 4 分钟
56.3k
在讲git的reset和checkout的区别之前,不得不说说HEAD、Index、Working Directory三个区域。 HEAD、Index、Working Directory Git里有三个区域很重要 HEAD 指向最近一次commit里的所有snapshot Index 缓存区域,只有Index区域里的东西才可以被commit Working Directory 用户操作区域 下图解释了这三个区域的状态的变化过...

ubuntu中安装oracle 11g

2016-08-05
阅读 3 分钟
4.2k
准备工作基本和Ubuntu X86_64安装oracle 11gR2 XE相同。 首先,将系统更新到最新 {代码...} 安装依赖包 {代码...} 创建用户 {代码...} 给oracle用户设置登录密码 {代码...} 内核参数 执行: {代码...} 把以下内容粘帖进去: {代码...} 内核参数的配置和这篇文章是一样的:CentOS 6.4 x86_64安装oracle 11gR2 加载内核参...