添加redis缓存支持
This commit is contained in:
parent
fa0af3188c
commit
092bd90257
@ -0,0 +1,34 @@
|
|||||||
|
package com.macro.mall.portal.config;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.web.cors.CorsConfiguration;
|
||||||
|
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
||||||
|
import org.springframework.web.filter.CorsFilter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 全局跨域配置
|
||||||
|
* Created by macro on 2019/7/27.
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
public class GlobalCorsConfig {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 允许跨域调用的过滤器
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public CorsFilter corsFilter() {
|
||||||
|
CorsConfiguration config = new CorsConfiguration();
|
||||||
|
//允许所有域名进行跨域调用
|
||||||
|
config.addAllowedOrigin("*");
|
||||||
|
//允许跨越发送cookie
|
||||||
|
config.setAllowCredentials(true);
|
||||||
|
//放行全部原始头信息
|
||||||
|
config.addAllowedHeader("*");
|
||||||
|
//允许所有请求方法跨域调用
|
||||||
|
config.addAllowedMethod("*");
|
||||||
|
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
|
||||||
|
source.registerCorsConfiguration("/**", config);
|
||||||
|
return new CorsFilter(source);
|
||||||
|
}
|
||||||
|
}
|
@ -1,14 +1,20 @@
|
|||||||
package com.macro.mall.portal.config;
|
package com.macro.mall.portal.config;
|
||||||
|
|
||||||
import com.macro.mall.portal.service.UmsMemberService;
|
import com.macro.mall.portal.service.UmsMemberService;
|
||||||
|
import com.macro.mall.security.component.DynamicSecurityService;
|
||||||
import com.macro.mall.security.config.SecurityConfig;
|
import com.macro.mall.security.config.SecurityConfig;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.security.access.ConfigAttribute;
|
||||||
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
|
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
|
||||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mall-security模块相关配置
|
* mall-security模块相关配置
|
||||||
* Created by macro on 2019/11/5.
|
* Created by macro on 2019/11/5.
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.macro.mall.portal.controller;
|
package com.macro.mall.portal.controller;
|
||||||
|
|
||||||
import com.macro.mall.common.api.CommonResult;
|
import com.macro.mall.common.api.CommonResult;
|
||||||
|
import com.macro.mall.model.UmsMember;
|
||||||
import com.macro.mall.portal.service.UmsMemberService;
|
import com.macro.mall.portal.service.UmsMemberService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam;
|
|||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.security.Principal;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -57,6 +59,17 @@ public class UmsMemberController {
|
|||||||
return CommonResult.success(tokenMap);
|
return CommonResult.success(tokenMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("获取会员信息")
|
||||||
|
@RequestMapping(value = "/info", method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
public CommonResult info(Principal principal) {
|
||||||
|
if(principal==null){
|
||||||
|
return CommonResult.unauthorized(null);
|
||||||
|
}
|
||||||
|
UmsMember member = memberService.getCurrentMember();
|
||||||
|
return CommonResult.success(member);
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation("获取验证码")
|
@ApiOperation("获取验证码")
|
||||||
@RequestMapping(value = "/getAuthCode", method = RequestMethod.GET)
|
@RequestMapping(value = "/getAuthCode", method = RequestMethod.GET)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
package com.macro.mall.portal.service;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* redis操作Service,
|
|
||||||
* 对象和数组都以json形式进行存储
|
|
||||||
* Created by macro on 2018/8/7.
|
|
||||||
*/
|
|
||||||
public interface RedisService {
|
|
||||||
/**
|
|
||||||
* 存储数据
|
|
||||||
*/
|
|
||||||
void set(String key, String value);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取数据
|
|
||||||
*/
|
|
||||||
String get(String key);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置超期时间
|
|
||||||
*/
|
|
||||||
boolean expire(String key, long expire);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除数据
|
|
||||||
*/
|
|
||||||
void remove(String key);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 自增操作
|
|
||||||
* @param delta 自增步长
|
|
||||||
*/
|
|
||||||
Long increment(String key, long delta);
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.macro.mall.portal.service;
|
||||||
|
|
||||||
|
import com.macro.mall.model.UmsMember;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员信息缓存业务类
|
||||||
|
* Created by macro on 2020/3/14.
|
||||||
|
*/
|
||||||
|
public interface UmsMemberCacheService {
|
||||||
|
/**
|
||||||
|
* 删除会员用户缓存
|
||||||
|
*/
|
||||||
|
void delMember(Long memberId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取会员用户缓存
|
||||||
|
*/
|
||||||
|
UmsMember getMember(String username);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置会员用户缓存
|
||||||
|
*/
|
||||||
|
void setMember(UmsMember member);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置验证码
|
||||||
|
*/
|
||||||
|
void setAuthCode(String telephone, String authCode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取验证码
|
||||||
|
*/
|
||||||
|
String getAuthCode(String telephone);
|
||||||
|
}
|
@ -9,6 +9,7 @@ import com.macro.mall.portal.dao.PortalOrderItemDao;
|
|||||||
import com.macro.mall.portal.dao.SmsCouponHistoryDao;
|
import com.macro.mall.portal.dao.SmsCouponHistoryDao;
|
||||||
import com.macro.mall.portal.domain.*;
|
import com.macro.mall.portal.domain.*;
|
||||||
import com.macro.mall.portal.service.*;
|
import com.macro.mall.portal.service.*;
|
||||||
|
import com.macro.mall.security.service.RedisService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -47,8 +48,10 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|||||||
private SmsCouponHistoryMapper couponHistoryMapper;
|
private SmsCouponHistoryMapper couponHistoryMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private RedisService redisService;
|
private RedisService redisService;
|
||||||
@Value("${redis.key.prefix.orderId}")
|
@Value("${redis.key.orderId}")
|
||||||
private String REDIS_KEY_PREFIX_ORDER_ID;
|
private String REDIS_KEY_ORDER_ID;
|
||||||
|
@Value("${redis.database}")
|
||||||
|
private String REDIS_DATABASE;
|
||||||
@Autowired
|
@Autowired
|
||||||
private PortalOrderDao portalOrderDao;
|
private PortalOrderDao portalOrderDao;
|
||||||
@Autowired
|
@Autowired
|
||||||
@ -318,8 +321,8 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|||||||
private String generateOrderSn(OmsOrder order) {
|
private String generateOrderSn(OmsOrder order) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
|
String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
|
||||||
String key = REDIS_KEY_PREFIX_ORDER_ID + date;
|
String key = REDIS_DATABASE+":"+ REDIS_KEY_ORDER_ID + date;
|
||||||
Long increment = redisService.increment(key, 1);
|
Long increment = redisService.incr(key, 1);
|
||||||
sb.append(date);
|
sb.append(date);
|
||||||
sb.append(String.format("%02d", order.getSourceType()));
|
sb.append(String.format("%02d", order.getSourceType()));
|
||||||
sb.append(String.format("%02d", order.getPayType()));
|
sb.append(String.format("%02d", order.getPayType()));
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
package com.macro.mall.portal.service.impl;
|
|
||||||
|
|
||||||
import com.macro.mall.portal.service.RedisService;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* redis操作Service的实现类
|
|
||||||
* Created by macro on 2018/8/7.
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class RedisServiceImpl implements RedisService {
|
|
||||||
@Autowired
|
|
||||||
private StringRedisTemplate stringRedisTemplate;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void set(String key, String value) {
|
|
||||||
stringRedisTemplate.opsForValue().set(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String get(String key) {
|
|
||||||
return stringRedisTemplate.opsForValue().get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean expire(String key, long expire) {
|
|
||||||
return stringRedisTemplate.expire(key, expire, TimeUnit.SECONDS);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove(String key) {
|
|
||||||
stringRedisTemplate.delete(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long increment(String key, long delta) {
|
|
||||||
return stringRedisTemplate.opsForValue().increment(key,delta);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,68 @@
|
|||||||
|
package com.macro.mall.portal.service.impl;
|
||||||
|
|
||||||
|
import com.macro.mall.mapper.UmsMemberMapper;
|
||||||
|
import com.macro.mall.model.UmsMember;
|
||||||
|
import com.macro.mall.portal.service.UmsMemberCacheService;
|
||||||
|
import com.macro.mall.security.annotation.CacheException;
|
||||||
|
import com.macro.mall.security.config.RedisConfig;
|
||||||
|
import com.macro.mall.security.service.RedisService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UmsMemberCacheService实现类
|
||||||
|
* Created by macro on 2020/3/14.
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class UmsMemberCacheServiceImpl implements UmsMemberCacheService {
|
||||||
|
@Autowired
|
||||||
|
private RedisService redisService;
|
||||||
|
@Autowired
|
||||||
|
private UmsMemberMapper memberMapper;
|
||||||
|
@Value("${redis.database}")
|
||||||
|
private String REDIS_DATABASE;
|
||||||
|
@Value("${redis.expire.common}")
|
||||||
|
private Long REDIS_EXPIRE;
|
||||||
|
@Value("${redis.expire.authCode}")
|
||||||
|
private Long REDIS_EXPIRE_AUTH_CODE;
|
||||||
|
@Value("${redis.key.member}")
|
||||||
|
private String REDIS_KEY_MEMBER;
|
||||||
|
@Value("${redis.key.authCode}")
|
||||||
|
private String REDIS_KEY_AUTH_CODE;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delMember(Long memberId) {
|
||||||
|
UmsMember umsMember = memberMapper.selectByPrimaryKey(memberId);
|
||||||
|
if (umsMember != null) {
|
||||||
|
String key = REDIS_DATABASE + ":" + REDIS_KEY_MEMBER + ":" + umsMember.getUsername();
|
||||||
|
redisService.del(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UmsMember getMember(String username) {
|
||||||
|
String key = REDIS_DATABASE + ":" + REDIS_KEY_MEMBER + ":" + username;
|
||||||
|
return (UmsMember) redisService.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMember(UmsMember member) {
|
||||||
|
String key = REDIS_DATABASE + ":" + REDIS_KEY_MEMBER + ":" + member.getUsername();
|
||||||
|
redisService.set(key, member, REDIS_EXPIRE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@CacheException
|
||||||
|
@Override
|
||||||
|
public void setAuthCode(String telephone, String authCode) {
|
||||||
|
String key = REDIS_DATABASE + ":" + REDIS_KEY_AUTH_CODE + ":" + telephone;
|
||||||
|
redisService.set(key,authCode,REDIS_EXPIRE_AUTH_CODE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@CacheException
|
||||||
|
@Override
|
||||||
|
public String getAuthCode(String telephone) {
|
||||||
|
String key = REDIS_DATABASE + ":" + REDIS_KEY_AUTH_CODE + ":" + telephone;
|
||||||
|
return (String) redisService.get(key);
|
||||||
|
}
|
||||||
|
}
|
@ -8,7 +8,7 @@ import com.macro.mall.model.UmsMemberExample;
|
|||||||
import com.macro.mall.model.UmsMemberLevel;
|
import com.macro.mall.model.UmsMemberLevel;
|
||||||
import com.macro.mall.model.UmsMemberLevelExample;
|
import com.macro.mall.model.UmsMemberLevelExample;
|
||||||
import com.macro.mall.portal.domain.MemberDetails;
|
import com.macro.mall.portal.domain.MemberDetails;
|
||||||
import com.macro.mall.portal.service.RedisService;
|
import com.macro.mall.portal.service.UmsMemberCacheService;
|
||||||
import com.macro.mall.portal.service.UmsMemberService;
|
import com.macro.mall.portal.service.UmsMemberService;
|
||||||
import com.macro.mall.security.util.JwtTokenUtil;
|
import com.macro.mall.security.util.JwtTokenUtil;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@ -48,19 +48,23 @@ public class UmsMemberServiceImpl implements UmsMemberService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private UmsMemberLevelMapper memberLevelMapper;
|
private UmsMemberLevelMapper memberLevelMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private RedisService redisService;
|
private UmsMemberCacheService memberCacheService;
|
||||||
@Value("${redis.key.prefix.authCode}")
|
@Value("${redis.key.authCode}")
|
||||||
private String REDIS_KEY_PREFIX_AUTH_CODE;
|
private String REDIS_KEY_PREFIX_AUTH_CODE;
|
||||||
@Value("${redis.key.expire.authCode}")
|
@Value("${redis.expire.authCode}")
|
||||||
private Long AUTH_CODE_EXPIRE_SECONDS;
|
private Long AUTH_CODE_EXPIRE_SECONDS;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UmsMember getByUsername(String username) {
|
public UmsMember getByUsername(String username) {
|
||||||
|
UmsMember member = memberCacheService.getMember(username);
|
||||||
|
if(member!=null) return member;
|
||||||
UmsMemberExample example = new UmsMemberExample();
|
UmsMemberExample example = new UmsMemberExample();
|
||||||
example.createCriteria().andUsernameEqualTo(username);
|
example.createCriteria().andUsernameEqualTo(username);
|
||||||
List<UmsMember> memberList = memberMapper.selectByExample(example);
|
List<UmsMember> memberList = memberMapper.selectByExample(example);
|
||||||
if (!CollectionUtils.isEmpty(memberList)) {
|
if (!CollectionUtils.isEmpty(memberList)) {
|
||||||
return memberList.get(0);
|
member = memberList.get(0);
|
||||||
|
memberCacheService.setMember(member);
|
||||||
|
return member;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -109,9 +113,7 @@ public class UmsMemberServiceImpl implements UmsMemberService {
|
|||||||
for(int i=0;i<6;i++){
|
for(int i=0;i<6;i++){
|
||||||
sb.append(random.nextInt(10));
|
sb.append(random.nextInt(10));
|
||||||
}
|
}
|
||||||
//验证码绑定手机号并存储到redis
|
memberCacheService.setAuthCode(telephone,sb.toString());
|
||||||
redisService.set(REDIS_KEY_PREFIX_AUTH_CODE+telephone,sb.toString());
|
|
||||||
redisService.expire(REDIS_KEY_PREFIX_AUTH_CODE+telephone,AUTH_CODE_EXPIRE_SECONDS);
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,6 +132,7 @@ public class UmsMemberServiceImpl implements UmsMemberService {
|
|||||||
UmsMember umsMember = memberList.get(0);
|
UmsMember umsMember = memberList.get(0);
|
||||||
umsMember.setPassword(passwordEncoder.encode(password));
|
umsMember.setPassword(passwordEncoder.encode(password));
|
||||||
memberMapper.updateByPrimaryKeySelective(umsMember);
|
memberMapper.updateByPrimaryKeySelective(umsMember);
|
||||||
|
memberCacheService.delMember(umsMember.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -146,6 +149,7 @@ public class UmsMemberServiceImpl implements UmsMemberService {
|
|||||||
record.setId(id);
|
record.setId(id);
|
||||||
record.setIntegration(integration);
|
record.setIntegration(integration);
|
||||||
memberMapper.updateByPrimaryKeySelective(record);
|
memberMapper.updateByPrimaryKeySelective(record);
|
||||||
|
memberCacheService.delMember(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -185,7 +189,7 @@ public class UmsMemberServiceImpl implements UmsMemberService {
|
|||||||
if(StringUtils.isEmpty(authCode)){
|
if(StringUtils.isEmpty(authCode)){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
String realAuthCode = redisService.get(REDIS_KEY_PREFIX_AUTH_CODE + telephone);
|
String realAuthCode = memberCacheService.getAuthCode(telephone);
|
||||||
return authCode.equals(realAuthCode);
|
return authCode.equals(realAuthCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ spring:
|
|||||||
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
|
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
|
||||||
max-idle: 8 # 连接池中的最大空闲连接
|
max-idle: 8 # 连接池中的最大空闲连接
|
||||||
min-idle: 0 # 连接池中的最小空闲连接
|
min-idle: 0 # 连接池中的最小空闲连接
|
||||||
timeout: 3000ms # 连接超时时间(毫秒)
|
timeout: 1000ms # 连接超时时间(毫秒)
|
||||||
|
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
host: localhost
|
host: localhost
|
||||||
|
@ -10,7 +10,7 @@ mybatis:
|
|||||||
jwt:
|
jwt:
|
||||||
tokenHeader: Authorization #JWT存储的请求头
|
tokenHeader: Authorization #JWT存储的请求头
|
||||||
secret: mall-portal-secret #JWT加解密使用的密钥
|
secret: mall-portal-secret #JWT加解密使用的密钥
|
||||||
expiration: 604800 #JWT的超期限时间(60*60*24)
|
expiration: 604800 #JWT的超期限时间(60*60*24*7)
|
||||||
tokenHead: Bearer #JWT负载中拿到开头
|
tokenHead: Bearer #JWT负载中拿到开头
|
||||||
|
|
||||||
secure:
|
secure:
|
||||||
@ -32,12 +32,14 @@ secure:
|
|||||||
|
|
||||||
# 自定义redis key
|
# 自定义redis key
|
||||||
redis:
|
redis:
|
||||||
|
database: mall
|
||||||
key:
|
key:
|
||||||
prefix:
|
authCode: 'ums:authCode'
|
||||||
authCode: "portal:authCode:"
|
orderId: 'oms:orderId'
|
||||||
orderId: "portal:orderId:"
|
member: 'ums:member'
|
||||||
expire:
|
expire:
|
||||||
authCode: 90 # 验证码超期时间
|
authCode: 90 # 验证码超期时间
|
||||||
|
common: 86400 # 24小时
|
||||||
|
|
||||||
# 消息队列定义
|
# 消息队列定义
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user