Java电商秒杀实战1
搭建springboot项目
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.5</version>
</dependency>
目录结构

集成Mybatis
添加mybatis-spring-boot-starter依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
添加配置
#mybatis mybatis.type-aliases-package=com.imooc.miaosha.domain mybatis.configuration.map-underscore-to-camel-case=true mybatis.configuration.default-fetch-size=100 mybatis.configuration.default-statement-timeout=3000 mybatis.mapperLocations=classpath:com/imooc/miaosha/dao/*.xml
添加druid配置
#druid spring.datasource.url=jdbc:mysql://localhost:3306/miaosha?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.filters=stat spring.datasource.tomcat.max-active=2 spring.datasource.dbcp2.initial-size=1 spring.datasource.tomcat.max-wait=60000 spring.datasource.tomcat.min-idle=1 spring.datasource.tomcat.time-between-eviction-runs-millis=60000 spring.datasource.tomcat.min-evictable-idle-time-millis=300000 spring.datasource.tomcat.validation-query=select 'x' spring.datasource.tomcat.test-on-borrow=true spring.datasource.dbcp2.test-on-borrow=false spring.datasource.dbcp2.test-on-return=false spring.datasource.dbcp2.pool-prepared-statements=true spring.datasource.dbcp2.max-open-prepared-statements=20
添加mysql、druid依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.5</version>
</dependency>
集成redis
首先安装Redis
修改配置文件redis.conf
将bind 127.0.0.1注释掉

修改daemonize为yes

设置密码

redies连接失败:Could not get a resource from the pool] with root cause
解决方法:关闭linux中的防火墙
命令:systemctl stop firewalld
添加Jedis依赖、添加Fastison依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.38</version>
</dependency>
添加redis配置
#redis spring.redis.host=47.97.197.62 spring.redis.port=6379 spring.redis.timeout=3 spring.redis.password=123456 spring.redis.pool-max-total=10 spring.redis.pool.max-idle=10 spring.redis.pool.max-wait=3 spring.redis.pool.max-active=8
RedisConfig
package com.imooc.miaosha.redis; import org.apache.ibatis.annotations.Param; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix ="spring.redis") public class RedisConfig { private String host; private int port; private int timeout; private String password; private int poolMaxTotal; private int poolMaxIdle; private int poolMaxWait; public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public int getTimeout() { return timeout; } public void setTimeout(int timeout) { this.timeout = timeout; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getPoolMaxTotal() { return poolMaxTotal; } public void setPoolMaxTotal(int poolMaxTotal) { this.poolMaxTotal = poolMaxTotal; } public int getPoolMaxIdle() { return poolMaxIdle; } public void setPoolMaxIdle(int poolMaxIdle) { this.poolMaxIdle = poolMaxIdle; } public int getPoolMaxWait() { return poolMaxWait; } public void setPoolMaxWait(int poolMaxWait) { this.poolMaxWait = poolMaxWait; } }
RedisService
package com.imooc.miaosha.redis; import com.alibaba.fastjson.JSON; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; @Service public class RedisService { @Autowired JedisPool jedisPool; /** * 获取单个对象 */ public <T> T get(KeyPrefix prefix,String key, Class<T> clazz) { Jedis jedis=null; try{ jedis=jedisPool.getResource(); //生成真正的key String realKey=prefix.getPrefix()+key; String str= jedis.get(realKey); T t=stringToBean(str,clazz); return t; }finally { returnToPool(jedis); } } /** * 设置对象 */ public <T>boolean set(KeyPrefix prefix, String key, T value) { Jedis jedis=null; try{ jedis=jedisPool.getResource(); String str= beanToString(value); if(str==null||str.length()<=0){ return false; } //生成真正的key String realKey=prefix.getPrefix()+key; int seconds= prefix.expireSeconds(); if(seconds<=0){ jedis.set(realKey,str); }else { jedis.setex(realKey,seconds,str); }; return true; }finally { returnToPool(jedis); } } /** * 判断key是否存在 */ public <T>boolean exists(KeyPrefix prefix, String key) { Jedis jedis=null; try{ jedis=jedisPool.getResource(); //生成真正的key String realKey=prefix.getPrefix()+key; return jedis.exists(realKey); }finally { returnToPool(jedis); } } /** * 增加值 */ public <T>Long incr(KeyPrefix prefix, String key) { Jedis jedis=null; try{ jedis=jedisPool.getResource(); //生成真正的key String realKey=prefix.getPrefix()+key; return jedis.incr(realKey); }finally { returnToPool(jedis); } } /** * 减少值 */ public <T> Long decr(KeyPrefix prefix, String key) { Jedis jedis=null; try{ jedis=jedisPool.getResource(); //生成真正的key String realKey=prefix.getPrefix()+key; return jedis.decr(realKey); }finally { returnToPool(jedis); } } private <T> String beanToString(T value){ if(value==null){ return null; } Class<?> clazz=value.getClass(); if(clazz==int.class||clazz==Integer.class){ return ""+value; }else if(clazz==String.class){ return(String)value; }else if(clazz==long.class||clazz==Long.class){ return ""+value; }else { return JSON.toJSONString(value); } } @SuppressWarnings("unchecked") private <T> T stringToBean(String str,Class<T> clazz){ if(str==null||str.length()<=0||clazz==null){ return null; } if(clazz==int.class||clazz==Integer.class){ return (T)Integer.valueOf(str); }else if(clazz==String.class){ return (T) str; }else if(clazz==long.class||clazz==Long.class){ return (T)Long.valueOf(str); }else { return JSON.toJavaObject(JSON.parseObject(str), clazz); } } private void returnToPool(Jedis jedis){ if(jedis!=null){ jedis.close(); } } }
运行结果



浙公网安备 33010602011771号