qq_BANG主_0
spring-dao.xml这里面应该写错了,贴下代码
qq_可乐_55
countDown()函数中嵌套了handleSeckill()函数,而handleSeckill()函数中又嵌套了ountDown()函数,可能进入死循环
qq_慕田峪8583027
应该是你的电话号码写入cookie那没写对
qq_宝慕林3535468
我也是这个问题,问一些最后怎么解决的
qq_浊雨落沧桑_0
请把countDown完整代码贴出来
ArChLiNux
查看下你的cookie,前后端是否一致
慕圣6698645
请问楼主这个问题你最后怎么解决 的呢?
撈猴子的月亮
解决了... js文件路径写错了
梦是无声的醒
不用再判断时间的话,那个区seckill对象,就没必要了吧(那缓存更没有必要了)
鲨鱼尖椒
解决了,,少些一个双引号
qq_雾霭晨曦_0
好吧,又解决了,
这里掉了一个反括号,眼神不好
幻夜明
你需要把你的检测手机号码的那段代码检查一下
慕粉1543407295
是不是Controller里的execute方法少了@Responsebody
BeStrong
我也遇到这个问题了,还没有找到怎么解决
__Rover

LuMaRen
87行就抄错了
攻城狮Flion
真是疏忽啊,确实是少了一个/
东北虎Boy
一样遇到过。
精慕门9839799
死循环的话估计是这里的问题,时间是对的上的,可是exposed是false的话就会造成死循环,控制台输出检查一下,可能是seckillId没有获取到正确的值
我大概成仙了
success为false应该是自己给的吧,不是说获取数据失败返回false,后面老师不是有改false为true吗
try {
SeckillExecution execution =seckillService.excuteSeckill(seckillId, phone, md5);
return new SeckillResult<SeckillExecution>(true, execution);
} catch (RepeatKillException e) {
SeckillExecution execution = new SeckillExecution(seckillId, SeckillStateEnum.REPEAT_KILL);
return new SeckillResult<SeckillExecution>(true, execution);
} catch (SeckillCloseException e) {
SeckillExecution execution = new SeckillExecution(seckillId, SeckillStateEnum.END);
return new SeckillResult<SeckillExecution>(true, execution);
} catch (Exception e) {
SeckillExecution execution = new SeckillExecution(seckillId, SeckillStateEnum.INNER_ERROR);
return new SeckillResult<SeckillExecution>(true, execution);
}
赵码农
在controller代码的method改成
method = {RequestMethod.POST,RequestMethod.GET},
饺子不要馅
检查一下事务有没有配好,看看有没有加注解,细心检查
Yoooshiki
可能是前端的问题 我也遇到了 后台接口自测没问题
慕粉1554334067
更正一下,是405,get请求不支持错误
东方明月
修改一下,SeckillController 类中的 加粗的位置即可
@ResponseBody
@RequestMapping(value = "/{seckillId}/{md5}/execution", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public SeckillResult<SeckillExecution> execute(@PathVariable("seckillId") Long seckillId,
@PathVariable("md5") String md5,
@CookieValue(value = "killPhone", required = false) Long phone) {
if (phone == null){
return new SeckillResult<SeckillExecution>(false,"未注册登录的用户");
}
try {
SeckillExecution seckillExecution = seckillService.executeSeckill(seckillId, phone, md5);
return new SeckillResult<SeckillExecution>(true,seckillExecution);
}catch (RepeatKillException e){
SeckillExecution execution = new SeckillExecution(seckillId, SeckillStateEnum.REPEAT_KILL);
return new SeckillResult<SeckillExecution>(true,execution);
}catch (SeckillCloseException e){
SeckillExecution execution = new SeckillExecution(seckillId, SeckillStateEnum.END);
return new SeckillResult<SeckillExecution>(true,execution);
}catch (Exception e){
logger.error(e.getMessage(),e);
SeckillExecution execution = new SeckillExecution(seckillId, SeckillStateEnum.INNER_ERROR);
return new SeckillResult<SeckillExecution>(true,execution);
}
}
慕九州2923858
上次容器未正常关闭,或者本级已经正在运行服务端口被占用
残阳星陨
url 不正确,你Controller写的是excution,js 上写的是execution,多了个e
天空属于蓝色
给大家一个详细的步骤。。
修改了数据库里seckill表的start_time的属性就好了,
把DEFAULT CURRENT_TIMESTAMP ON UPDATE,改为 DEFAULT '0000-00-00 00:00:00'
不知道为什么当时sql创建完后start_time的属性是 CURRENT_TIMESTAMP ON UPDATE。。。
老师当时:

修改后:

原因:
timestamp如果设置成CURRENT_TIMESTAMP ,当执行insert操作的时候,会插入当前系统时间。
如果是ON UPDATE CURRENT_TIMESTAMP,当执行update操作的时候,会跟着更新为当前UPDATE操作时的时间。
我们项目里在执行减库存的时候,执行的是update语句:
update
seckill
set
number = number -1
where seckill_id=#{seckillId}
and start_time <![CDATA[ <= ]]> #{killTime}
and end_time>=#{killTime}
and number>0;
所以会随着这个秒杀减库存的操作改变start_time的值。
Leon_Ma
$.get('/seckill/time/now',{},function(result)
==》$.get('/seckill-alpha/seckill/time/now',{},function(result);
把项目名加上去试试..
Bruce_Vae
在seckill.js里按住ctrl点击post,没法跳转到该方法,但是get就没有问题。在jquery.min.js中也找不到这个方法。见了鬼了