高并发秒杀系统--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,服务端就能根 ...
随机推荐
- 低电平ViL
低电平 编辑 低电平(Vil)指的是保证逻辑门的输入为低电平时所允许的最大输入低电平,当输入电平低于Vil时,则认为输入电平为低电平. 中文名 低电平 外文名 Vil 主要应用 测量电缆和保护连接 ...
- 20165223 《JAVA程序设计》第六周学习总结
教材学习内容总结 第八章-常用实用类-要点 基础:String类 重点:StringTokenizer类,Scanner类 难点:Class类与Console类,Pattern类与Match类 其他特 ...
- A1064. Complete Binary Search Tree
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
- 加密解密DES之Android、IOS、C#实现
Android实现 package com.sto.express.utils; import java.security.MessageDigest; import java.security.sp ...
- jquery.form.js ajax提交上传文件
项目中最近有用到表单提交,是带有图片上传的表单录入,需要ajax异步提交,网上找了好多例子都是只能提交上传字段一个信息的,这里整理一下.表单里有普通文本信息字段也有图片上传字段. 1.jsp代码--引 ...
- jenkins学习:jenkins+maven
之前配置了jenkins+gitlab,jenkins已经可以从gitlab上面拉取代码了,执行项目构建还要加一个maven. 1.配置全局的maven 系统管理-全局工具配置-配置maven的地址 ...
- 高级组件——分割面板JSplitPane
分割面板:JSplitPane(方向),默认水平分割.JSplitPane.HORIZONTAL_SPLIT,JSplitPane.VERTICAL_SPLITJSplitPane(方向,boolea ...
- lucene的普通搜索(二)
首先得到索引: package com.wp.util; import java.io.File; import java.io.FileReader; import java.nio.file.Pa ...
- JSON语法、对象、遍历数组的区别和基本操作
JSON 语法规则 JSON 语法是 javascript 对象表示语法的子集. 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称/值对 JSON 数据的书写格式是: ...
- RHCE基础环境系统的搭建
RHCE基础环境系统的搭建 安装前提: 安装的时候对系统和硬件的要求: 红帽系统安装队系统的要求:Windows操作系统选择64位的内存至少6GCPU需要支持虚拟化技术在做红帽系统实验的时候,把360 ...