| DriverOKTravel/guns-admin/pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/config/RedissonConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
DriverOKTravel/guns-admin/pom.xml
@@ -189,6 +189,13 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- redisson分布式锁 --> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.5.7</version> </dependency> </dependencies> <build> DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/config/RedissonConfig.java
New file @@ -0,0 +1,33 @@ package com.stylefeng.guns.config; import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RedissonConfig { @Value("${spring.redis.host:127.0.0.1}") private String host; @Value("${spring.redis.port:6379}") private String port; @Value("${spring.redis.password:}") private String password; @Bean(destroyMethod = "shutdown") public RedissonClient redissonClient() { Config config = new Config(); String addr = "redis://" + host + ":" + port; config.useSingleServer() .setAddress(addr) .setPassword(password.isEmpty() ? null : password) .setConnectionMinimumIdleSize(5) .setConnectionPoolSize(10); return Redisson.create(config); } } DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -14,6 +14,8 @@ import com.stylefeng.guns.modular.taxi.dao.OrderTaxiMapper; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -53,7 +55,7 @@ private RedisUtil redisUtil; @Autowired private RedisTemplate redisTemplate; private RedissonClient redissonClient; @Autowired private IOrderPositionService orderPositionService; @@ -155,11 +157,10 @@ */ @Override public ResultUtil grabOrder(Integer orderId, Integer uid) throws Exception { Boolean lock = redisTemplate.hasKey("grabOrder:" + orderId); if (lock) { RLock lock = redissonClient.getLock("grabOrder:" + orderId); if (!lock.tryLock(10, 10, TimeUnit.SECONDS)) { return ResultUtil.error("抢单失败"); } redisTemplate.opsForValue().set("grabOrder:" + orderId, System.currentTimeMillis(), 10, TimeUnit.SECONDS); try { OrderTaxi orderTaxi = this.selectById(orderId); //处理摆渡车的情况 @@ -313,7 +314,7 @@ } catch (Exception e) { return ResultUtil.error("抢单失败"); } finally { redisTemplate.delete("grabOrder:" + orderId); lock.unlock(); } return ResultUtil.success(); }