puzhibing
2026-04-18 f6d1e9d191aab3542138c77adad2689047507f02
添加分布式锁
1个文件已添加
2个文件已修改
51 ■■■■■ 已修改文件
DriverOKTravel/guns-admin/pom.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/config/RedissonConfig.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | 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();
    }