Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
f879c4aa
提交
f879c4aa
authored
6月 25, 2022
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加 yudao-spring-boot-starter-env 组件,完成 tag 请求头的读取到上下文
上级
fcfa6610
隐藏空白字符变更
内嵌
并排
正在显示
20 个修改的文件
包含
232 行增加
和
156 行删除
+232
-156
pom.xml
pom.xml
+2
-1
pom.xml
yudao-dependencies/pom.xml
+6
-0
WebFilterOrderEnum.java
...oder/yudao/framework/common/enums/WebFilterOrderEnum.java
+2
-0
pom.xml
yudao-framework/yudao-spring-boot-starter-env/pom.xml
+51
-0
EnvProperties.java
.../cn/iocoder/yudao/framework/env/config/EnvProperties.java
+18
-0
YudaoEnvWebAutoConfiguration.java
...ao/framework/env/config/YudaoEnvWebAutoConfiguration.java
+25
-0
EnvContextHolder.java
...er/yudao/framework/env/core/context/EnvContextHolder.java
+39
-0
package-info.java
...ava/cn/iocoder/yudao/framework/env/core/package-info.java
+1
-0
EnvUtils.java
...va/cn/iocoder/yudao/framework/env/core/util/EnvUtils.java
+26
-0
EnvWebFilter.java
...cn/iocoder/yudao/framework/env/core/web/EnvWebFilter.java
+41
-0
package-info.java
...ain/java/cn/iocoder/yudao/framework/env/package-info.java
+7
-0
spring.factories
...-starter-env/src/main/resources/META-INF/spring.factories
+2
-0
pom.xml
yudao-framework/yudao-spring-boot-starter-rpc/pom.xml
+1
-1
pom.xml
yudao-module-system/yudao-module-system-biz/pom.xml
+10
-5
AuthController.http
...o/module/system/controller/admin/auth/AuthController.http
+1
-0
DubboWebAutoConfiguration.java
.../iocoder/mall/dubbo/config/DubboWebAutoConfiguration.java
+0
-31
DubboRouterTagContextHolder.java
...r/mall/dubbo/core/router/DubboRouterTagContextHolder.java
+0
-27
DubboRouterTagWebInterceptor.java
...der/mall/dubbo/core/web/DubboRouterTagWebInterceptor.java
+0
-45
spring.factories
...tarter-dubbo/src/main/resources/META-INF/spring.factories
+0
-3
pom.xml
归档/common/pom.xml
+0
-43
没有找到文件。
pom.xml
浏览文件 @
f879c4aa
...
@@ -16,7 +16,8 @@
...
@@ -16,7 +16,8 @@
<!-- <module>yudao-module-bpm</module>-->
<!-- <module>yudao-module-bpm</module>-->
<module>
yudao-module-system
</module>
<module>
yudao-module-system
</module>
<module>
yudao-module-infra
</module>
<module>
yudao-module-infra
</module>
<!-- <module>yudao-module-pay</module>-->
<module>
yudao-spring-boot-starter-env
</module>
<!-- <module>yudao-module-pay</module>-->
</modules>
</modules>
<name>
${project.artifactId}
</name>
<name>
${project.artifactId}
</name>
...
...
yudao-dependencies/pom.xml
浏览文件 @
f879c4aa
...
@@ -157,6 +157,12 @@
...
@@ -157,6 +157,12 @@
<version>
${spring.boot.version}
</version>
<version>
${spring.boot.version}
</version>
</dependency>
</dependency>
<dependency>
<groupId>
cn.iocoder.cloud
</groupId>
<artifactId>
yudao-spring-boot-starter-env
</artifactId>
<version>
${revision}
</version>
</dependency>
<!-- Web 相关 -->
<!-- Web 相关 -->
<dependency>
<dependency>
<groupId>
cn.iocoder.cloud
</groupId>
<groupId>
cn.iocoder.cloud
</groupId>
...
...
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/WebFilterOrderEnum.java
浏览文件 @
f879c4aa
...
@@ -13,6 +13,8 @@ public interface WebFilterOrderEnum {
...
@@ -13,6 +13,8 @@ public interface WebFilterOrderEnum {
int
TRACE_FILTER
=
CORS_FILTER
+
1
;
int
TRACE_FILTER
=
CORS_FILTER
+
1
;
int
ENV_TAG_FILTER
=
TRACE_FILTER
+
1
;
int
REQUEST_BODY_CACHE_FILTER
=
Integer
.
MIN_VALUE
+
500
;
int
REQUEST_BODY_CACHE_FILTER
=
Integer
.
MIN_VALUE
+
500
;
// OrderedRequestContextFilter 默认为 -105,用于国际化上下文等等
// OrderedRequestContextFilter 默认为 -105,用于国际化上下文等等
...
...
yudao-framework/yudao-spring-boot-starter-env/pom.xml
0 → 100644
浏览文件 @
f879c4aa
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<groupId>
cn.iocoder.cloud
</groupId>
<artifactId>
yudao-framework
</artifactId>
<version>
${revision}
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
yudao-spring-boot-starter-env
</artifactId>
<packaging>
jar
</packaging>
<name>
${project.artifactId}
</name>
<description>
开发环境拓展,实现类似阿里的特性环境的能力
1. https://segmentfault.com/a/1190000018022987
</description>
<url>
https://github.com/YunaiV/ruoyi-vue-pro
</url>
<properties>
<maven.compiler.source>
8
</maven.compiler.source>
<maven.compiler.target>
8
</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>
cn.iocoder.cloud
</groupId>
<artifactId>
yudao-common
</artifactId>
</dependency>
<!-- Spring 核心 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter
</artifactId>
</dependency>
<!-- Web 相关 -->
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-web
</artifactId>
</dependency>
<dependency>
<groupId>
jakarta.servlet
</groupId>
<artifactId>
jakarta.servlet-api
</artifactId>
</dependency>
</dependencies>
</project>
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/EnvProperties.java
0 → 100644
浏览文件 @
f879c4aa
package
cn
.
iocoder
.
yudao
.
framework
.
env
.
config
;
import
lombok.Data
;
/**
* 环境
*
* @author 芋道源码
*/
@Data
public
class
EnvProperties
{
/**
* 环境标签
*/
private
String
tag
;
}
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/YudaoEnvWebAutoConfiguration.java
0 → 100644
浏览文件 @
f879c4aa
package
cn
.
iocoder
.
yudao
.
framework
.
env
.
config
;
import
cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum
;
import
cn.iocoder.yudao.framework.env.core.web.EnvWebFilter
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication
;
import
org.springframework.boot.web.servlet.FilterRegistrationBean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
@Configuration
@ConditionalOnWebApplication
(
type
=
ConditionalOnWebApplication
.
Type
.
SERVLET
)
public
class
YudaoEnvWebAutoConfiguration
{
/**
* 创建 {@link EnvWebFilter} Bean
*/
@Bean
public
FilterRegistrationBean
<
EnvWebFilter
>
envWebFilterFilter
()
{
EnvWebFilter
filter
=
new
EnvWebFilter
();
FilterRegistrationBean
<
EnvWebFilter
>
bean
=
new
FilterRegistrationBean
<>(
filter
);
bean
.
setOrder
(
WebFilterOrderEnum
.
ENV_TAG_FILTER
);
return
bean
;
}
}
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/context/EnvContextHolder.java
0 → 100644
浏览文件 @
f879c4aa
package
cn
.
iocoder
.
yudao
.
framework
.
env
.
core
.
context
;
import
cn.hutool.core.collection.CollUtil
;
import
com.alibaba.ttl.TransmittableThreadLocal
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 开发环境上下文
*
* @author 芋道源码
*/
public
class
EnvContextHolder
{
/**
* 标签的上下文
*
* 使用 {@link List} 的原因,可能存在多层设置或者清理
*/
private
static
final
ThreadLocal
<
List
<
String
>>
tagContext
=
TransmittableThreadLocal
.
withInitial
(
ArrayList:
:
new
);
public
static
void
setTag
(
String
tag
)
{
tagContext
.
get
().
add
(
tag
);
}
public
static
String
getTag
()
{
return
CollUtil
.
getLast
(
tagContext
.
get
());
}
public
static
void
removeTag
()
{
List
<
String
>
tags
=
tagContext
.
get
();
if
(
CollUtil
.
isEmpty
(
tags
))
{
return
;
}
tags
.
remove
(
tags
.
size
()
-
1
);
}
}
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/package-info.java
0 → 100644
浏览文件 @
f879c4aa
package
cn
.
iocoder
.
yudao
.
framework
.
env
.
core
;
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/util/EnvUtils.java
0 → 100644
浏览文件 @
f879c4aa
package
cn
.
iocoder
.
yudao
.
framework
.
env
.
core
.
util
;
import
cn.hutool.core.net.NetUtil
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.Objects
;
/**
* 环境 Utils
*
* @author 芋道源码
*/
public
class
EnvUtils
{
private
static
final
String
HEADER_DUBBO_TAG
=
"tag"
;
private
static
final
String
HOST_NAME_VALUE
=
"${HOSTNAME}"
;
public
static
String
getTag
(
HttpServletRequest
request
)
{
String
tag
=
request
.
getHeader
(
HEADER_DUBBO_TAG
);
// 如果请求的是 "${HOSTNAME}",则解析成对应的本地主机名
// 目的:特殊逻辑,解决 IDEA Rest Client 不支持环境变量的读取,所以就服务器来做
return
Objects
.
equals
(
tag
,
HOST_NAME_VALUE
)
?
NetUtil
.
getLocalHostName
()
:
tag
;
}
}
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/web/EnvWebFilter.java
0 → 100644
浏览文件 @
f879c4aa
package
cn
.
iocoder
.
yudao
.
framework
.
env
.
core
.
web
;
import
cn.hutool.core.util.StrUtil
;
import
cn.iocoder.yudao.framework.env.core.context.EnvContextHolder
;
import
cn.iocoder.yudao.framework.env.core.util.EnvUtils
;
import
org.springframework.web.filter.OncePerRequestFilter
;
import
javax.servlet.FilterChain
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
/**
* 环境的 {@link javax.servlet.Filter} 实现类
* 当有 tag 请求头时,设置到 {@link EnvContextHolder} 的标签上下文
*
* @author 芋道源码
*/
public
class
EnvWebFilter
extends
OncePerRequestFilter
{
@Override
protected
void
doFilterInternal
(
HttpServletRequest
request
,
HttpServletResponse
response
,
FilterChain
chain
)
throws
ServletException
,
IOException
{
// 如果没有 tag,则走默认的流程
String
tag
=
EnvUtils
.
getTag
(
request
);
if
(
StrUtil
.
isEmpty
(
tag
))
{
chain
.
doFilter
(
request
,
response
);
return
;
}
// 如果有 tag,则设置到上下文
EnvContextHolder
.
setTag
(
tag
);
try
{
chain
.
doFilter
(
request
,
response
);
}
finally
{
EnvContextHolder
.
removeTag
();
}
}
}
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/package-info.java
0 → 100644
浏览文件 @
f879c4aa
/**
* 开发环境拓展,实现类似阿里的特性环境的能力
* 1. https://segmentfault.com/a/1190000018022987
*
* @author 芋道源码
*/
package
cn
.
iocoder
.
yudao
.
framework
.
env
;
yudao-framework/yudao-spring-boot-starter-env/src/main/resources/META-INF/spring.factories
0 → 100644
浏览文件 @
f879c4aa
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.iocoder.yudao.framework.env.config.YudaoEnvWebAutoConfiguration
yudao-framework/yudao-spring-boot-starter-rpc/pom.xml
浏览文件 @
f879c4aa
...
@@ -38,7 +38,7 @@
...
@@ -38,7 +38,7 @@
<groupId>
org.apache.dubbo
</groupId>
<groupId>
org.apache.dubbo
</groupId>
<artifactId>
dubbo-common
</artifactId>
<!-- 兜底,保证在不引入 spring-cloud-starter-dubbo 时,注解等不报错 -->
<artifactId>
dubbo-common
</artifactId>
<!-- 兜底,保证在不引入 spring-cloud-starter-dubbo 时,注解等不报错 -->
</dependency>
</dependency>
<!-- -->
<!--
-->
<!-- <dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.alibaba.cloud</groupId>-->
<!-- <groupId>com.alibaba.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-dubbo</artifactId>-->
<!-- <artifactId>spring-cloud-starter-dubbo</artifactId>-->
...
...
yudao-module-system/yudao-module-system-biz/pom.xml
浏览文件 @
f879c4aa
...
@@ -24,6 +24,11 @@
...
@@ -24,6 +24,11 @@
<artifactId>
spring-cloud-starter-bootstrap
</artifactId>
<artifactId>
spring-cloud-starter-bootstrap
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
cn.iocoder.cloud
</groupId>
<artifactId>
yudao-spring-boot-starter-env
</artifactId>
</dependency>
<!-- 依赖服务 -->
<!-- 依赖服务 -->
<dependency>
<dependency>
<groupId>
cn.iocoder.cloud
</groupId>
<groupId>
cn.iocoder.cloud
</groupId>
...
@@ -105,11 +110,11 @@
...
@@ -105,11 +110,11 @@
<artifactId>
spring-cloud-starter-alibaba-nacos-config
</artifactId>
<artifactId>
spring-cloud-starter-alibaba-nacos-config
</artifactId>
</dependency>
</dependency>
<!-- Job 定时任务相关
TODO 芋艿:暂时去掉
-->
<!-- Job 定时任务相关 -->
<!-- <dependency>--
>
<dependency
>
<!-- <groupId>cn.iocoder.cloud</groupId>--
>
<groupId>
cn.iocoder.cloud
</groupId
>
<!-- <artifactId>yudao-spring-boot-starter-job</artifactId>--
>
<artifactId>
yudao-spring-boot-starter-job
</artifactId
>
<!-- </dependency>--
>
</dependency
>
<!-- 消息队列相关 -->
<!-- 消息队列相关 -->
<dependency>
<dependency>
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.http
浏览文件 @
f879c4aa
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
POST {{systemBaseUrl}}/system/auth/login
POST {{systemBaseUrl}}/system/auth/login
Content-Type: application/json
Content-Type: application/json
tenant-id: {{adminTenentId}}
tenant-id: {{adminTenentId}}
tag: 123
{
{
"username": "admin",
"username": "admin",
...
...
归档/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/config/DubboWebAutoConfiguration.java
deleted
100644 → 0
浏览文件 @
fcfa6610
package
cn
.
iocoder
.
mall
.
dubbo
.
config
;
import
cn.iocoder.mall.dubbo.core.web.DubboRouterTagWebInterceptor
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.NoSuchBeanDefinitionException
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
;
@Configuration
@ConditionalOnWebApplication
(
type
=
ConditionalOnWebApplication
.
Type
.
SERVLET
)
public
class
DubboWebAutoConfiguration
implements
WebMvcConfigurer
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
DubboWebAutoConfiguration
.
class
);
// ========== 拦截器相关 ==========
@Override
public
void
addInterceptors
(
InterceptorRegistry
registry
)
{
try
{
// 设置为 -1000 的原因,保证在比较前面就处理该逻辑。例如说,认证拦截器;
registry
.
addInterceptor
(
new
DubboRouterTagWebInterceptor
()).
order
(-
1000
);
logger
.
info
(
"[addInterceptors][加载 DubboRouterTagWebInterceptor 拦截器完成]"
);
}
catch
(
NoSuchBeanDefinitionException
e
)
{
logger
.
warn
(
"[addInterceptors][无法获取 DubboRouterTagWebInterceptor 拦截器,无法使用基于 dubbo-tag 请求头进行 Dubbo 标签路由]"
);
}
}
}
归档/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/router/DubboRouterTagContextHolder.java
deleted
100644 → 0
浏览文件 @
fcfa6610
package
cn
.
iocoder
.
mall
.
dubbo
.
core
.
router
;
import
cn.iocoder.mall.dubbo.core.filter.DubboProviderRouterTagFilter
;
/**
* Dubbo 路由 Tag 的上下文
*
* @see DubboProviderRouterTagFilter
* @see cn.iocoder.mall.dubbo.core.web.DubboRouterTagWebInterceptor
*/
public
class
DubboRouterTagContextHolder
{
private
static
ThreadLocal
<
String
>
tagContext
=
new
ThreadLocal
<>();
public
static
void
setTag
(
String
tag
)
{
tagContext
.
set
(
tag
);
}
public
static
String
getTag
()
{
return
tagContext
.
get
();
}
public
static
void
clear
()
{
tagContext
.
remove
();
}
}
归档/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/web/DubboRouterTagWebInterceptor.java
deleted
100644 → 0
浏览文件 @
fcfa6610
package
cn
.
iocoder
.
mall
.
dubbo
.
core
.
web
;
import
cn.iocoder.common.framework.util.OSUtils
;
import
cn.iocoder.common.framework.util.StringUtils
;
import
cn.iocoder.mall.dubbo.core.cluster.interceptor.DubboConsumerRouterTagClusterInterceptor
;
import
cn.iocoder.mall.dubbo.core.filter.DubboProviderRouterTagFilter
;
import
cn.iocoder.mall.dubbo.core.router.DubboRouterTagContextHolder
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
org.springframework.web.servlet.ModelAndView
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
/**
* Dubbo 路由标签的 Web 拦截器,将请求 Header 中的 {@link #HEADER_DUBBO_TAG} 设置到 {@link DubboRouterTagContextHolder} 中。
*
* @see DubboProviderRouterTagFilter
* @see DubboConsumerRouterTagClusterInterceptor
*/
public
class
DubboRouterTagWebInterceptor
implements
HandlerInterceptor
{
private
static
final
String
HEADER_DUBBO_TAG
=
"dubbo-tag"
;
private
static
final
String
HOST_NAME_VALUE
=
"${HOSTNAME}"
;
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
{
String
tag
=
request
.
getHeader
(
HEADER_DUBBO_TAG
);
if
(
StringUtils
.
hasText
(
tag
))
{
// 特殊逻辑,解决 IDEA Rest Client 不支持环境变量的读取,所以就服务器来做
if
(
HOST_NAME_VALUE
.
equals
(
tag
))
{
tag
=
OSUtils
.
getHostName
();
}
// 设置到 DubboRouterTagContextHolder 上下文
DubboRouterTagContextHolder
.
setTag
(
tag
);
}
return
true
;
}
@Override
public
void
postHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
,
ModelAndView
modelAndView
)
{
DubboRouterTagContextHolder
.
clear
();
}
}
归档/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/spring.factories
浏览文件 @
f879c4aa
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.iocoder.mall.dubbo.config.DubboWebAutoConfiguration
org.springframework.boot.env.EnvironmentPostProcessor=\
org.springframework.boot.env.EnvironmentPostProcessor=\
cn.iocoder.mall.dubbo.config.DubboEnvironmentPostProcessor
cn.iocoder.mall.dubbo.config.DubboEnvironmentPostProcessor
归档/common/pom.xml
deleted
100644 → 0
浏览文件 @
fcfa6610
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
onemall
</artifactId>
<groupId>
cn.iocoder.mall
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
common
</artifactId>
<packaging>
pom
</packaging>
<modules>
<module>
common-framework
</module>
<module>
mall-spring-boot
</module>
<module>
mall-spring-boot-starter-swagger
</module>
<module>
mall-spring-boot-starter-web
</module>
<module>
mall-security-annotations
</module>
<module>
mall-spring-boot-starter-security-admin
</module>
<module>
mall-spring-boot-starter-security-user
</module>
<module>
mall-spring-boot-starter-sentry
</module>
<module>
mall-spring-boot-starter-mybatis
</module>
<module>
mall-spring-boot-starter-dubbo
</module>
<module>
mall-spring-boot-starter-system-error-code
</module>
<module>
mall-spring-boot-starter-rocketmq
</module>
<module>
mall-spring-boot-starter-xxl-job
</module>
<module>
mall-spring-boot-starter-redis
</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
mall-dependencies
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<type>
pom
</type>
<scope>
import
</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论