高并发秒杀系统--junit测试类与SpringIoc容器的整合
1.原理是在Junit启动时加载SpringIoC容器
2.SpringIoC容器要根据Spring的配置文件加载
[示例代码]
package org.azcode.dao; import org.azcode.entity.Seckill;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; import java.util.Date;
import java.util.List; import static org.junit.Assert.*; /**
* IDEA生成测试类的快捷键 Ctrl+Shift+T
* 配置Spring和Junit的整合,Junit启动时加载SpringIoC容器
* Spring-test,junit
* Created by azcod on 2017/4/14.
*/
@RunWith(SpringJUnit4ClassRunner.class)
//告诉junit Spring配置文件的位置
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class SeckillDaoTest { //注入Dao实现类
@Resource
private SeckillDao seckillDao; @Test
public void queryById() throws Exception {
long id = 1000;
Seckill seckill = seckillDao.queryById(id);
System.out.println(seckill.getName());
System.out.println(seckill);
/*
1000元秒杀iphone7s
Seckill{seckillId=1000,
name='1000元秒杀iphone7s',
number=100,
startTime=Fri Apr 14 00:00:00 CST 2017,
endTime=Sat Apr 15 00:00:00 CST 2017,
createTime=Thu Apr 13 21:14:06 CST 2017}
*/
} @Test
public void queryAll() throws Exception {
/**
* Caused by: org.apache.ibatis.binding.BindingException:
* Parameter 'offset' not found. Available parameters are [0, 1, param1, param2]
*/
// java没有保存形参的记录:queryAll(int offset, int limit) -> queryAll(arg1,arg2)
// 解决方式:通过@Param("paramName")注释告诉mybatis sql中对应的参数是哪一个
List<Seckill> seckills = seckillDao.queryAll(0,10);
for(Seckill seckill: seckills){
System.out.println(seckill);
}
} @Test
public void reduceNumber() throws Exception {
/**
09:23:58.681 [main] DEBUG o.m.s.t.SpringManagedTransaction -
JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@4362d7df]
will not be managed by Spring
09:23:58.687 [main] DEBUG o.azcode.dao.SeckillDao.reduceNumber -
==> Preparing: update seckill set number = number -1 where seckill_id = ?
and start_time <= ? and end_time >= ? and number > 0
09:23:58.734 [main] DEBUG o.azcode.dao.SeckillDao.reduceNumber -
==> Parameters: 1000(Long), 2017-04-14 09:23:58.279(Timestamp),
2017-04-14 09:23:58.279(Timestamp)
09:23:58.739 [main] DEBUG o.azcode.dao.SeckillDao.reduceNumber - <==
Updates: 1
09:23:58.740 [main] DEBUG org.mybatis.spring.SqlSessionUtils -
Closing non transactional SqlSession
[org.apache.ibatis.session.defaults.DefaultSqlSession@f713686]
*/
Date killTime = new Date();
int updateCount = seckillDao.reduceNumber(1000L,killTime);
System.out.println(updateCount);
} }
高并发秒杀系统--junit测试类与SpringIoc容器的整合的更多相关文章
- Java高并发秒杀系统API之SSM框架集成swagger与AdminLTE
初衷与整理描述 Java高并发秒杀系统API是来源于网上教程的一个Java项目,也是我接触Java的第一个项目.本来是一枚c#码农,公司计划部分业务转java,于是我利用业务时间自学Java才有了本文 ...
- 【高并发】Redis如何助力高并发秒杀系统,看完这篇我彻底懂了!!
写在前面 之前,我们在<[高并发]高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!>一文中,详细讲解了高并发秒杀系统的架构设计,其中,我们介绍了可以使用Redis存储秒杀商品的库存数量.很 ...
- Java高并发秒杀系统【观后总结】
项目简介 在慕课网上发现了一个JavaWeb项目,内容讲的是高并发秒杀,觉得挺有意思的,就进去学习了一番. 记录在该项目中学到了什么玩意.. 该项目源码对应的gitHub地址(由观看其视频的人编写,并 ...
- 高并发秒杀系统--Service事务管理与继承测试
[Spring IoC的类型及应用场景] [Spring事务使用方式] [Spring事务的特性] [Spring事务回滚的理解] [Service声明式事务的配置] 1.配置事务管理器 2.配置基 ...
- 高并发秒杀系统--Service接口设计与实现
[DAO编写之后的总结] DAO层 --> 接口设计 + SQL编写 DAO拼接等逻辑 --> 统一在Service层完成 [Service层的接口设计] 1.接口 ...
- 高并发秒杀系统--mybatis整合技巧
mybatis实现DAO接口编码技巧 1.XML文件通过namespace命名空间关联接口类 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD ...
- 高并发秒杀系统方案(集成Mybatis和Redis)
1.集成Mybatis 第一步,添加依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> < ...
- 高并发秒杀系统--SpringMVC整合
[SpringMVC运行流程] [Handler注解映射技巧] [请求方法的细节处理] 1.如何处理请求参数和方法参数的绑定? 2.如何限制方法接收的请求方式? 3.如何进行请求转发和重定向? 4.如 ...
- 高并发秒杀系统方案(分布式session)
编程要有一个习惯:做参数校验 所谓的分布式session:就是用redis统一管理session. 我们这里的思路是:把token写入cookie中,客户端在随后的访问中携带cookie,服务端就能根 ...
随机推荐
- Keepalived+Nginx搭建主从高可用并带nginx检测
应用环境:部分时候,WEB访问量一般,或者测试使用,利用Keepalived给Nginx做高可用即可满足要求. 测试环境: 搭建步骤: 1. 安装软件 在Nginx-A和Nginx-B上: ~]# ...
- Spring cloud config 使用gitHub或者gitee连接
1. 创建SpringCloud项目,引入对应的Spring-config-server对应的jar <dependency> <groupId>org.springframe ...
- CodeForces - 589J(DFS)
题目链接:http://codeforces.com/problemset/problem/589/J 题目大意:一个机器人打扫一个密闭的房间,房间由一个矩形构成,'*'表示家具,'.'表示该位置为空 ...
- Arch Linux中使用VMware Workstation不能打开vmmon内核模块
打开VMware Workstation出现错误提示:Could not open /dev/vmmon: No such device.Please make sure that the kerne ...
- snmpwalk
什么是snmpwalk?snmpwalk是一个SNMP小程序,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户. snmpwalk的作用 ...
- bzoj3900 交换茸角
题目链接 思路 看到n比较小,可以状压. 可以先考虑什么情况下会无法平衡.显然就是排完序之后两两相邻的不能满足小于等于c的限制. 状态.用f[i]来表示i集合中的鹿完成交换所需要的次数. 预处理.无法 ...
- react-native中的props
效果图 大多数组件在创建时就可以使用各种参数来进行定制.用于定制的这些参数就称为props(属性). 以常见的基础组件Image为例,在创建一个图片时,可以传入一个名为source的 prop 来指定 ...
- CodeForces121E 线段树上线段果
http://codeforces.com/problemset/problem/121/E 题意: Petya 喜欢幸运数,幸运数只包含 4 和 7 这两个数字.例如 47,744,4 都是幸运数字 ...
- 从LIst集合中安全的删除元素
package cn.rocker.list; import java.util.ArrayList; import java.util.Iterator; import java.util.List ...
- Hadoop端口说明
Hadoop端口说明: 默认端口 设置位置 描述信息 8020 ...