日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

秒杀项目(1)项目环境搭建

發布時間:2024/8/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 秒杀项目(1)项目环境搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、 配置thymeleaf
  • 二、 集成mybatis
  • 三、 集成redis
    • 3.1 修改redis配置文件
    • 3.2 添加依賴
    • 3.3 設置redis密碼
    • 3.4 redis配置文件
    • 3.5 redis配置類
    • 3.6 redisService類
    • 3.7 JedisFactory類
    • 3.8 業務處理層
    • 3.9 主要問題

一、 配置thymeleaf

二、 集成mybatis

測試事務:

@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();}

表示事務測試成功,測試之前一定要加@transaction注解,去掉注解,發現雖然出錯,但是還是插進去數據了。

三、 集成redis

3.1 修改redis配置文件

bind 0.0.0.0 #使任意服務器都可以訪問redisdaemonize yes #允許后臺執行requirepass 123 #設置密碼auth 123 #使用密碼登錄

先開啟service端,再開啟redis-cli.exe

3.2 添加依賴

  • Fastjson序列化成json格式,可讀,谷歌的那個序列化后是二進制文件,不可讀
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.1.0</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.59</version></dependency>

3.3 設置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 配置服務器等信息 redis.host=127.0.0.1 redis.port=6379 redis.timeout=10 redis.password=123 #最大連接數 redis.poolMaxTotal=1000 #最大空閑 redis.poolMaxldle=500 #最大等待 redis.poolMaxWait=500

3.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數據庫的get,set方法的分裝,以及beanToString和stringToBean兩個方法。

@Service public class RedisService {@AutowiredJedisPool jedisPool;@AutowiredRedisConfig redisConfig;//獲取數據的方法public <T>T get(String key,Class<T> tClass){Jedis jedis = null;//連接池,用完記得釋放try {jedis = jedisPool.getResource();//默認得到的是一個String類型的數據,但是我們需要的是一個T類型的數據String data = jedis.get(key);T finaData = stringToBean(data,tClass);return finaData;}finally {closePool(jedis);}}//設置數據的方法public <T>Boolean set(String key,T value){Jedis jedis = null;//連接池,用完記得釋放try {jedis = jedisPool.getResource();//必須先將T類型的數據轉換為String類型String finaData = beanToString(value);//如果為空則直接返回falseif(finaData == null || finaData.length() < 0){return false;}jedis.set(key, finaData);return true;}finally {closePool(jedis);}}//任意類型的數據轉換為字符串,首先需要將Integer類型,String類型,Long類型區別開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);}//字符串轉換為指定類型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);}}//關閉jedis的方法public void closePool(Jedis jedis){if(jedis != null){//看close()源碼里并不是真正的關閉jedis.close();}}//@Bean//在這里,JedisPool在redisService中創建,而edisService又引用了JedisPool,形成循環引用,需要把JedisPool拿出去/* public JedisPool JedisPoolFactory(){JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPoolConfig.setMaxIdle(redisConfig.getPoolMaxldle());jedisPoolConfig.setMaxTotal(redisConfig.getPoolMaxTotal());//我們是用秒配置的,這里是用的毫秒。jedisPoolConfig.setMaxWaitMillis(redisConfig.getPoolMaxWait()*1000);//TimeOut參數最終是設置socket的connectTimeout和soTimeout。單位是:millionsecond//redis服務器默認支持16個庫,默認從0開始JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisConfig.getHost(), redisConfig.getPort(), redisConfig.getTimeout()*1000,redisConfig.getPassword(),0);return jedisPool;}*/ }

3.7 JedisFactory類

在jedisService類中會發生循環引用,所以需要單獨拿出來

@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參數最終是設置socket的connectTimeout和soTimeout。單位是:millionsecond//redis服務器默認支持16個庫,默認從0開始JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisConfig.getHost(), redisConfig.getPort(), redisConfig.getTimeout() * 1000, redisConfig.getPassword(), 0);return jedisPool;} }

3.8 業務處理層

@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 主要問題

  • 循環引用,JedisPool在redisService中創建,而jedisService又引用了JedisPool,形成循環引用,需要把JedisPool拿出去
  • 密碼設置失敗,導致在JedisPool取密碼時出錯。

總結

以上是生活随笔為你收集整理的秒杀项目(1)项目环境搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。