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容器的整合的更多相关文章

  1. Java高并发秒杀系统API之SSM框架集成swagger与AdminLTE

    初衷与整理描述 Java高并发秒杀系统API是来源于网上教程的一个Java项目,也是我接触Java的第一个项目.本来是一枚c#码农,公司计划部分业务转java,于是我利用业务时间自学Java才有了本文 ...

  2. 【高并发】Redis如何助力高并发秒杀系统,看完这篇我彻底懂了!!

    写在前面 之前,我们在<[高并发]高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!>一文中,详细讲解了高并发秒杀系统的架构设计,其中,我们介绍了可以使用Redis存储秒杀商品的库存数量.很 ...

  3. Java高并发秒杀系统【观后总结】

    项目简介 在慕课网上发现了一个JavaWeb项目,内容讲的是高并发秒杀,觉得挺有意思的,就进去学习了一番. 记录在该项目中学到了什么玩意.. 该项目源码对应的gitHub地址(由观看其视频的人编写,并 ...

  4. 高并发秒杀系统--Service事务管理与继承测试

    [Spring IoC的类型及应用场景]  [Spring事务使用方式] [Spring事务的特性] [Spring事务回滚的理解] [Service声明式事务的配置] 1.配置事务管理器 2.配置基 ...

  5. 高并发秒杀系统--Service接口设计与实现

    [DAO编写之后的总结] DAO层    -->    接口设计 + SQL编写 DAO拼接等逻辑    -->    统一在Service层完成 [Service层的接口设计] 1.接口 ...

  6. 高并发秒杀系统--mybatis整合技巧

    mybatis实现DAO接口编码技巧 1.XML文件通过namespace命名空间关联接口类 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD ...

  7. 高并发秒杀系统方案(集成Mybatis和Redis)

    1.集成Mybatis 第一步,添加依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> < ...

  8. 高并发秒杀系统--SpringMVC整合

    [SpringMVC运行流程] [Handler注解映射技巧] [请求方法的细节处理] 1.如何处理请求参数和方法参数的绑定? 2.如何限制方法接收的请求方式? 3.如何进行请求转发和重定向? 4.如 ...

  9. 高并发秒杀系统方案(分布式session)

    编程要有一个习惯:做参数校验 所谓的分布式session:就是用redis统一管理session. 我们这里的思路是:把token写入cookie中,客户端在随后的访问中携带cookie,服务端就能根 ...

随机推荐

  1. prufer序列学习笔记

    prufer序列是一个定义在无根树上的东西. 构造方法是:每次选一个编号最小的叶子结点,把他的父亲的编号加入到序列的最后.然后删掉这个叶节点.直到最后只剩下两个节点,此时得到的序列就是prufer序列 ...

  2. linux(fedora) 第三课

    树形打印所有进程名:pstree pstree | grep pstree -A2 -B2(查看pstree前后两行) NI的值[-20,20) nice(改变NI的值):改变程序优先级 nice - ...

  3. sprintf() 处理 float类型的数字,保留小数位等。

    关于 sprintf()的百科地址: http://baike.baidu.com/view/1295144.htm sprintf(szText, "%[填空字元][宽度][.精度]f&q ...

  4. eclipse+pyDev

    感觉python脚本语言在linux下挺有用的,想入门学习一下 新手入门个人习惯找个好点的IDE帮助完成工作,试了好多,如pycharm,sublime text自己打造 后来发现全扯淡,一点不符合自 ...

  5. 【NOI2013模拟】坑带的树(仙人球的同构+圆方树乱搞+计数+HASH)

    [NOI2013模拟]坑带的树 题意: 求\(n\)个点,\(m\)条边的同构仙人球个数. \(n\le 1000\) 这是一道怎么看怎么不可做的题. 这种题,肯定是圆方树啦~ 好,那么首先转为广义圆 ...

  6. jQuery获取节点和子节点文本的方法

    本节主要介绍了jQuery如何获取节点和子节点文本,下面有个示例,大家可以参考下 对于下面的html片段, ? 1 <div id="text_test">test t ...

  7. 构造方法关键字---this

    this 可以在构造方法之间进行调用 *this在构造方法之间调用 this() this 可以在构造方法之间进行调用 *this在构造方法之间调用 this() package cn.homewor ...

  8. 干货分享:互联网运营 学习SEO从零开始 SEO深度解析学习笔记

    最近在自学SEO,互联网运营,把做的笔记干货分享给大家啊! 希望能帮到大家,如有好的建议可以关注我[磨人的小妖精]或留言,大家一起探讨. 之前还写过一篇文章互联网运营+SEO:推荐必看的5本书籍,学习 ...

  9. Pyhton对象解释

    python的docstring提供了对每一个类.函数.方法的解释,在他们的定义下面可以有一行Python的标准字符串,该行字符串需要和下面的代码一样的缩进. docstring可以用单引号(')或者 ...

  10. go 命令

    go build go build,是我们非常常用的命令,它可以启动编译,把我们的包和相关的依赖编译成一个可执行的文件. go help build 帮助命令 go build go build . ...