秒杀项目(1)项目环境搭建
生活随笔
收集整理的這篇文章主要介紹了
秒杀项目(1)项目环境搭建
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 一、 配置thymeleaf
- 二、 集成mybatis
- 三、 集成redis
- 3.1 修改redis配置文件
- 3.2 添加依賴
- 3.3 設(shè)置redis密碼
- 3.4 redis配置文件
- 3.5 redis配置類
- 3.6 redisService類
- 3.7 JedisFactory類
- 3.8 業(yè)務(wù)處理層
- 3.9 主要問題
一、 配置thymeleaf
二、 集成mybatis
測試事務(wù):
@Insert("insert into stu(sname, address,id) values (#{sname}, #{address},#{id})")public void insertWithID(Stu stu); @Transactionalpublic boolean transaction(){Stu stu = new Stu("李四",4,"北京");stuMapper.insertWithID(stu);Stu stu1 = new Stu("王五",1,"天津");stuMapper.insertWithID(stu1);return true;} @RequestMapping("transaction")public void testTransactio(){stuMapper.transaction();}表示事務(wù)測試成功,測試之前一定要加@transaction注解,去掉注解,發(fā)現(xiàn)雖然出錯,但是還是插進去數(shù)據(jù)了。
三、 集成redis
3.1 修改redis配置文件
bind 0.0.0.0 #使任意服務(wù)器都可以訪問redisdaemonize yes #允許后臺執(zhí)行requirepass 123 #設(shè)置密碼auth 123 #使用密碼登錄先開啟service端,再開啟redis-cli.exe
3.2 添加依賴
- Fastjson序列化成json格式,可讀,谷歌的那個序列化后是二進制文件,不可讀
3.3 設(shè)置redis密碼
127.0.0.1:6379> config set requirepass 123 OK 127.0.0.1:6379> config get requirepass (error) NOAUTH Authentication required. 127.0.0.1:6379> auth 123 OK 127.0.0.1:6379> config get requirepass 1) "requirepass" 2) "123"3.4 redis配置文件
#redis 配置服務(wù)器等信息 redis.host=127.0.0.1 redis.port=6379 redis.timeout=10 redis.password=123 #最大連接數(shù) redis.poolMaxTotal=1000 #最大空閑 redis.poolMaxldle=500 #最大等待 redis.poolMaxWait=5003.5 redis配置類
@Component @ConfigurationProperties(prefix = "redis") public class RedisConfig {private String host;private int port;private int timeout;private String password;private int poolMaxTotal;private int poolMaxldle;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 getPoolMaxldle() {return poolMaxldle;}public void setPoolMaxldle(int poolMaxldle) {this.poolMaxldle = poolMaxldle;}public int getPoolMaxWait() {return poolMaxWait;}public void setPoolMaxWait(int poolMaxWait) {this.poolMaxWait = poolMaxWait;} }3.6 redisService類
第一階段主要是從redis數(shù)據(jù)庫的get,set方法的分裝,以及beanToString和stringToBean兩個方法。
@Service public class RedisService {@AutowiredJedisPool jedisPool;@AutowiredRedisConfig redisConfig;//獲取數(shù)據(jù)的方法public <T>T get(String key,Class<T> tClass){Jedis jedis = null;//連接池,用完記得釋放try {jedis = jedisPool.getResource();//默認得到的是一個String類型的數(shù)據(jù),但是我們需要的是一個T類型的數(shù)據(jù)String data = jedis.get(key);T finaData = stringToBean(data,tClass);return finaData;}finally {closePool(jedis);}}//設(shè)置數(shù)據(jù)的方法public <T>Boolean set(String key,T value){Jedis jedis = null;//連接池,用完記得釋放try {jedis = jedisPool.getResource();//必須先將T類型的數(shù)據(jù)轉(zhuǎn)換為String類型String finaData = beanToString(value);//如果為空則直接返回falseif(finaData == null || finaData.length() < 0){return false;}jedis.set(key, finaData);return true;}finally {closePool(jedis);}}//任意類型的數(shù)據(jù)轉(zhuǎn)換為字符串,首先需要將Integer類型,String類型,Long類型區(qū)別開private <T> String beanToString(T value) {if(value == null){return null;}Class<?> aClass = value.getClass();if (aClass == int.class || aClass == Integer.class){return value + "";}else if(aClass == String.class){return (String)value;}else if(aClass == long.class){return value + "";}elsereturn JSON.toJSONString(value);}//字符串轉(zhuǎn)換為指定類型private <T> T stringToBean(String data, Class<T> aClass) {if(data == null || data.length() < 0){return null;}if (aClass == int.class || aClass == Integer.class){return (T)Integer.valueOf(data);}else if(aClass == String.class){return (T)data;}else if(aClass == long.class){return (T)Long.valueOf(data);}else {JSONObject jsonObject = JSON.parseObject(data);return JSON.toJavaObject(jsonObject, aClass);}}//關(guān)閉jedis的方法public void closePool(Jedis jedis){if(jedis != null){//看close()源碼里并不是真正的關(guān)閉jedis.close();}}//@Bean//在這里,JedisPool在redisService中創(chuàng)建,而edisService又引用了JedisPool,形成循環(huán)引用,需要把JedisPool拿出去/* public JedisPool JedisPoolFactory(){JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPoolConfig.setMaxIdle(redisConfig.getPoolMaxldle());jedisPoolConfig.setMaxTotal(redisConfig.getPoolMaxTotal());//我們是用秒配置的,這里是用的毫秒。jedisPoolConfig.setMaxWaitMillis(redisConfig.getPoolMaxWait()*1000);//TimeOut參數(shù)最終是設(shè)置socket的connectTimeout和soTimeout。單位是:millionsecond//redis服務(wù)器默認支持16個庫,默認從0開始JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisConfig.getHost(), redisConfig.getPort(), redisConfig.getTimeout()*1000,redisConfig.getPassword(),0);return jedisPool;}*/ }3.7 JedisFactory類
在jedisService類中會發(fā)生循環(huán)引用,所以需要單獨拿出來
@Service public class JedisFactory {@AutowiredRedisConfig redisConfig;@Beanpublic JedisPool JedisPoolFactory() {JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPoolConfig.setMaxIdle(redisConfig.getPoolMaxldle());jedisPoolConfig.setMaxTotal(redisConfig.getPoolMaxTotal());//我們是用秒配置的,這里是用的毫秒。jedisPoolConfig.setMaxWaitMillis(redisConfig.getPoolMaxWait() * 1000);//TimeOut參數(shù)最終是設(shè)置socket的connectTimeout和soTimeout。單位是:millionsecond//redis服務(wù)器默認支持16個庫,默認從0開始JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisConfig.getHost(), redisConfig.getPort(), redisConfig.getTimeout() * 1000, redisConfig.getPassword(), 0);return jedisPool;} }3.8 業(yè)務(wù)處理層
@Controller public class RedisController {@AutowiredRedisService redisService;@RequestMapping("redis/get")@ResponseBodypublic Long redisGet(){Long hello = redisService.get("hello", Long.class);return hello;}@RequestMapping("redis/set")@ResponseBodypublic String redisSet(){String hello1 = redisService.get("key2", String.class);return hello1;} }3.9 主要問題
- 循環(huán)引用,JedisPool在redisService中創(chuàng)建,而jedisService又引用了JedisPool,形成循環(huán)引用,需要把JedisPool拿出去
- 密碼設(shè)置失敗,導(dǎo)致在JedisPool取密碼時出錯。
總結(jié)
以上是生活随笔為你收集整理的秒杀项目(1)项目环境搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT | 聊聊QT与直播流播放——从QM
- 下一篇: Qt 之播放m3u8视频流