高并发秒杀系统--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,服务端就能根 ...
随机推荐
- Windows下使用Diskpart格式化U盘
步骤 进入Diskpartdiskpart 列出所有的磁盘list disk 选择磁盘select disk 清楚clean 创建主分区creat partition parimary 激活当前分区a ...
- windows蜜汁调音
哈,用的蜂鸣器,我静音了这东西还放. 只能调的很垃圾,但是很好玩. #include<cstdio> #include<windows.h> using namespace s ...
- 64位win8.1系统 运行 32位程序,文件夹路径是中文遇到问题
今天有一位用户向我反应软件使用遇到问题. 用户使用的是64位win8.1系统,之前有很多用户使用64位的win8.1系统没遇到过问题. 远程协助了一下,差不多15分钟我试了几个办法没解决问题. 最后我 ...
- angularjs的一些问题
1.如果页面报不支持写法的错,请查看是否引用了跨js定义的常量.逐步排错. 2.后台返回json要导入如下依赖: <dependency> <groupId>net.sf.js ...
- HTML学习笔记Day6
一.元素类型 1.元素类型分类依据和元素类型分类 根据css显示分类,XHTML元素被分为三种类型:块状元素.内联元素.行内块元素.可变元素 2.块状元素 1)块状元素在网页中就是以块的形式显示,所谓 ...
- Salt初识和安装
Salt Salt是一个配置管理系统,能够根据定义的状态,配置远程节点,比如保证远程节点上指定的安装包安装,运行指定的服务.Salt也是一个分布式远程执行系统,用于在远程节点上执行命令和请求数据,不论 ...
- RabbitMQ 消费者的消息确认机制
消息确认的几点说明: 1. Basic.Ack 发回给 RabbitMQ 以告知,可以将相应 message 从 RabbitMQ 的消息缓存中移除.2. Basic.Ack 未被 consumer ...
- C# 实现身份验证之WCF篇(2)
前面总结了三种方法,今天又将分享三种方法,完成WCF篇. 第四种:SOAP Header验证 首先定义一个WCF服务契约及服务实现类(后面的各种验证均采用该WCF服务),我这里直接采用默认的代码,如下 ...
- python对象初始化
当python对象被创建以后,需要将对象进行初始化.Python有一个构造函数和一个初始化函数: 1.构造函数__new__,只接受一个参数,即类本身(它会在对象被构造之前调用,所以这里也就没有sel ...
- Java概念、语法和变量基础整理
Java概述 J2SE: Java 2 Platform Standard Edition( 2005年之后更名为Java SE ).包含构成Java语言核心的类 J2EE: Java 2 Plat ...