项目地址

问题一

在springboot的2.0.6版本下的controller层,使用@Controller无法通过的到templates模版页面
解决办法

清空本地maven仓库里的.m2下的所有包,重新下载一遍包,出现了包冲突


问题二

在springboot中使用redis并连接使用时,出现java.util.NoSuchElementException: Timeout waiting for idle object的报错

在这块代码

@Bean   //通过这种方式将JedisPool注入到Spring容器中
public JedisPool jedisPoolFactory(){
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxIdle(redisConfig.getMaxIdle());
    jedisPoolConfig.setMaxTotal(redisConfig.getMaxActive());
    jedisPoolConfig.setMaxWaitMillis(redisConfig.getMaxWait()*1000);
    JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisConfig.getHost(), redisConfig.getPort(), redisConfig.getTimeout()*1000,redisConfig.getPassword(),0);
    return jedisPool;
}

如果将这行代码改成jedisPoolConfig.setMaxTotal(8);可获得redis中的,不会出现上述的报错,所以断定是

jedisPoolConfig.setMaxTotal(redisConfig.getMaxActive());这行没有生效,即没有注入

解决办法,每一个变量用@Value注入

@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.jedis.pool.max-active}")
private int maxActive;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.max-wait}")
private int maxWait;

问题三

在项目中,会出现一个用户对一个商品秒杀时,同时请求了两次,导致数据库压力增大,并且库存不会按标准减

解决办法:因为有miaoshaorder表里面有userId和goodsId表示,所以数据库使用联合索引,这样同一个用户对相同商品连续请求两次时,插入数据库失败

问题四

用tomcat部署,将miaosha.war放到tomcat下的webapps文件下面。

开启tomcat,在bin目录下执行

./startop.sh  //开启tomcat

若关闭tomcat,执行

./shutdown.sh     //关闭tomcat

开启后访问主页需要加上miaosha前缀,比如

我原本访问主页是 http://localhost:8080/login/to_login

但是在tomcat下是 http://localhost:8080/miaosha/login/to_login

而且在tomcat这种部署情况下,有些资源加在不出来,因为有些资源访问不需要miaosha这一前缀

解决方法:

打开conf文件下的server.xml文件,在标签中,加入下面这段代码

<Context docBase="miaosha" path="/" debug="0" privileged="true"></Context>

path=”” 为war路径,docBase=””为你的war的文件名