Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
2faaa653
提交
2faaa653
authored
6月 25, 2022
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完善 yudao-spring-boot-starter-env 组件,完成 registry 组件
上级
d0ce24a2
隐藏空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
91 行增加
和
73 行删除
+91
-73
http-client.env.json
http-client.env.json
+3
-0
YudaoAuthRequestFactory.java
.../yudao/framework/social/core/YudaoAuthRequestFactory.java
+1
-0
EnvEnvironmentPostProcessor.java
...dao/framework/env/config/EnvEnvironmentPostProcessor.java
+52
-0
EnvProperties.java
.../cn/iocoder/yudao/framework/env/config/EnvProperties.java
+5
-1
YudaoEnvRpcAutoConfiguration.java
...ao/framework/env/config/YudaoEnvRpcAutoConfiguration.java
+2
-0
YudaoEnvWebAutoConfiguration.java
...ao/framework/env/config/YudaoEnvWebAutoConfiguration.java
+2
-0
EnvLoadBalancerClient.java
...yudao/framework/env/core/fegin/EnvLoadBalancerClient.java
+3
-1
EnvUtils.java
...va/cn/iocoder/yudao/framework/env/core/util/EnvUtils.java
+17
-2
spring.factories
...-starter-env/src/main/resources/META-INF/spring.factories
+3
-0
AuthController.http
...o/module/system/controller/admin/auth/AuthController.http
+1
-1
application-local.yaml
...dule-system-biz/src/main/resources/application-local.yaml
+2
-0
DubboEnvironmentPostProcessor.java
...oder/mall/dubbo/config/DubboEnvironmentPostProcessor.java
+0
-66
spring.factories
...tarter-dubbo/src/main/resources/META-INF/spring.factories
+0
-2
没有找到文件。
http-client.env.json
浏览文件 @
2faaa653
...
...
@@ -6,6 +6,7 @@
"token"
:
"test1"
,
"adminTenentId"
:
"1"
,
"tag"
:
"${HOSTNAME}"
,
"appApi"
:
"http://127.0.0.1:48080/app-api"
,
"appToken"
:
"test1"
,
...
...
@@ -15,8 +16,10 @@
"baseUrl"
:
"http://127.0.0.1:48080/admin-api"
,
"systemBaseUrl"
:
"http://127.0.0.1:48080/admin-api"
,
"infaBaseUrl"
:
"http://127.0.0.1:48080/admin-api"
,
"token"
:
"test1"
,
"adminTenentId"
:
"1"
,
"tag"
:
"${HOSTNAME}"
,
"appApi"
:
"http://127.0.0.1:8888/app-api"
,
"appToken"
:
"test1"
,
...
...
yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java
浏览文件 @
2faaa653
...
...
@@ -10,6 +10,7 @@ import me.zhyd.oauth.cache.AuthStateCache;
import
me.zhyd.oauth.config.AuthConfig
;
import
me.zhyd.oauth.config.AuthSource
;
import
me.zhyd.oauth.request.AuthRequest
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
java.lang.reflect.Method
;
...
...
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/EnvEnvironmentPostProcessor.java
0 → 100644
浏览文件 @
2faaa653
package
cn
.
iocoder
.
yudao
.
framework
.
env
.
config
;
import
cn.hutool.core.util.StrUtil
;
import
cn.iocoder.yudao.framework.common.util.collection.SetUtils
;
import
cn.iocoder.yudao.framework.env.core.util.EnvUtils
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.env.EnvironmentPostProcessor
;
import
org.springframework.core.env.ConfigurableEnvironment
;
import
java.util.Set
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
env
.
core
.
util
.
EnvUtils
.
HOST_NAME_VALUE
;
/**
* 多环境的 {@link EnvEnvironmentPostProcessor} 实现类
* 将 yudao.env.tag 设置到 dubbo、nacos 等组件对应的 tag 配置项,当且仅当它们不存在时
*
* @author 芋道源码
*/
public
class
EnvEnvironmentPostProcessor
implements
EnvironmentPostProcessor
{
private
static
final
Set
<
String
>
TARGET_TAG_KEYS
=
SetUtils
.
asSet
(
"spring.cloud.nacos.discovery.metadata.tag"
,
// Nacos 注册中心
"dubbo.provider.tag"
,
// Dubbo 服务提供者的 tag
"dubbo.consumer.tag"
// Dubbo 服务消费者的 tag
// MQ TODO
);
@Override
public
void
postProcessEnvironment
(
ConfigurableEnvironment
environment
,
SpringApplication
application
)
{
// 0. 设置 ${HOST_NAME} 兜底的环境变量
String
hostNameKey
=
StrUtil
.
subBetween
(
HOST_NAME_VALUE
,
"{"
,
"}"
);
if
(!
environment
.
containsProperty
(
hostNameKey
))
{
environment
.
getSystemProperties
().
put
(
hostNameKey
,
EnvUtils
.
getHostName
());
}
// 1.1 如果没有 yudao.env.tag 配置项,则不进行配置项的修改
String
tag
=
EnvUtils
.
getTag
(
environment
);
if
(
StrUtil
.
isEmpty
(
tag
))
{
return
;
}
// 1.2 需要修改的配置项
for
(
String
targetTagKey
:
TARGET_TAG_KEYS
)
{
String
targetTagValue
=
environment
.
getProperty
(
targetTagKey
);
if
(
StrUtil
.
isNotEmpty
(
targetTagValue
))
{
continue
;
}
environment
.
getSystemProperties
().
put
(
targetTagKey
,
tag
);
}
}
}
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/EnvProperties.java
浏览文件 @
2faaa653
package
cn
.
iocoder
.
yudao
.
framework
.
env
.
config
;
import
lombok.Data
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
/**
* 环境
* 环境
配置
*
* @author 芋道源码
*/
@ConfigurationProperties
(
prefix
=
"yudao.env"
)
@Data
public
class
EnvProperties
{
public
static
final
String
TAG_KEY
=
"yudao.env.tag"
;
/**
* 环境标签
*/
...
...
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/YudaoEnvRpcAutoConfiguration.java
浏览文件 @
2faaa653
...
...
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.env.config;
import
cn.iocoder.yudao.framework.env.core.fegin.EnvLoadBalancerClientFactory
;
import
cn.iocoder.yudao.framework.env.core.fegin.EnvRequestInterceptor
;
import
org.springframework.beans.factory.ObjectProvider
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.cloud.client.loadbalancer.LoadBalancerClientsProperties
;
import
org.springframework.cloud.loadbalancer.annotation.LoadBalancerClientSpecification
;
import
org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory
;
...
...
@@ -18,6 +19,7 @@ import java.util.List;
* @author 芋道源码
*/
@Configuration
@EnableConfigurationProperties
(
EnvProperties
.
class
)
public
class
YudaoEnvRpcAutoConfiguration
{
// ========== Feign 相关 ==========
...
...
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/YudaoEnvWebAutoConfiguration.java
浏览文件 @
2faaa653
...
...
@@ -3,6 +3,7 @@ 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.context.properties.EnableConfigurationProperties
;
import
org.springframework.boot.web.servlet.FilterRegistrationBean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
...
...
@@ -14,6 +15,7 @@ import org.springframework.context.annotation.Configuration;
*/
@Configuration
@ConditionalOnWebApplication
(
type
=
ConditionalOnWebApplication
.
Type
.
SERVLET
)
@EnableConfigurationProperties
(
EnvProperties
.
class
)
public
class
YudaoEnvWebAutoConfiguration
{
/**
...
...
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/fegin/EnvLoadBalancerClient.java
浏览文件 @
2faaa653
...
...
@@ -49,11 +49,13 @@ public class EnvLoadBalancerClient implements ReactorServiceInstanceLoadBalancer
@Override
public
Mono
<
Response
<
ServiceInstance
>>
choose
(
Request
request
)
{
// 情况一,没有 tag 时,使用默认的 reactiveLoadBalancer 实现负载均衡
String
tag
=
EnvContextHolder
.
getTag
();
if
(
StrUtil
.
isEmpty
(
tag
))
{
return
Mono
.
from
(
reactiveLoadBalancer
.
choose
(
request
));
}
// 选择实例
// 情况二,有 tag 时,使用 tag 匹配服务实例
ServiceInstanceListSupplier
supplier
=
serviceInstanceListSupplierProvider
.
getIfAvailable
(
NoopServiceInstanceListSupplier:
:
new
);
return
supplier
.
get
(
request
).
next
().
map
(
list
->
getInstanceResponse
(
list
,
tag
));
}
...
...
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/util/EnvUtils.java
浏览文件 @
2faaa653
package
cn
.
iocoder
.
yudao
.
framework
.
env
.
core
.
util
;
import
cn.hutool.core.net.NetUtil
;
import
cn.hutool.core.util.IdUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.iocoder.yudao.framework.env.config.EnvProperties
;
import
feign.RequestTemplate
;
import
org.springframework.cloud.client.ServiceInstance
;
import
org.springframework.core.env.Environment
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.Objects
;
...
...
@@ -16,21 +20,32 @@ public class EnvUtils {
private
static
final
String
HEADER_TAG
=
"tag"
;
p
rivate
static
final
String
HOST_NAME_VALUE
=
"${HOSTNAME}"
;
p
ublic
static
final
String
HOST_NAME_VALUE
=
"${HOSTNAME}"
;
public
static
String
getTag
(
HttpServletRequest
request
)
{
String
tag
=
request
.
getHeader
(
HEADER_TAG
);
// 如果请求的是 "${HOSTNAME}",则解析成对应的本地主机名
// 目的:特殊逻辑,解决 IDEA Rest Client 不支持环境变量的读取,所以就服务器来做
return
Objects
.
equals
(
tag
,
HOST_NAME_VALUE
)
?
NetUtil
.
getLocal
HostName
()
:
tag
;
return
Objects
.
equals
(
tag
,
HOST_NAME_VALUE
)
?
get
HostName
()
:
tag
;
}
public
static
String
getTag
(
ServiceInstance
instance
)
{
return
instance
.
getMetadata
().
get
(
HEADER_TAG
);
}
public
static
String
getTag
(
Environment
environment
)
{
String
tag
=
environment
.
getProperty
(
EnvProperties
.
TAG_KEY
);
// 如果请求的是 "${HOSTNAME}",则解析成对应的本地主机名
// 目的:特殊逻辑,解决 IDEA Rest Client 不支持环境变量的读取,所以就服务器来做
return
Objects
.
equals
(
tag
,
HOST_NAME_VALUE
)
?
getHostName
()
:
tag
;
}
public
static
void
setTag
(
RequestTemplate
requestTemplate
,
String
tag
)
{
requestTemplate
.
header
(
HEADER_TAG
,
tag
);
}
public
static
String
getHostName
()
{
return
StrUtil
.
blankToDefault
(
NetUtil
.
getLocalHostName
(),
IdUtil
.
fastSimpleUUID
());
}
}
yudao-framework/yudao-spring-boot-starter-env/src/main/resources/META-INF/spring.factories
浏览文件 @
2faaa653
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.iocoder.yudao.framework.env.config.YudaoEnvWebAutoConfiguration,\
cn.iocoder.yudao.framework.env.config.YudaoEnvRpcAutoConfiguration
org.springframework.boot.env.EnvironmentPostProcessor=\
cn.iocoder.yudao.framework.env.config.EnvEnvironmentPostProcessor
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.http
浏览文件 @
2faaa653
...
...
@@ -2,7 +2,7 @@
POST {{systemBaseUrl}}/system/auth/login
Content-Type: application/json
tenant-id: {{adminTenentId}}
tag:
123
tag:
{{tag}}
{
"username": "admin",
...
...
yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml
浏览文件 @
2faaa653
...
...
@@ -137,6 +137,8 @@ wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-sta
# 芋道配置项,设置当前项目所有自定义的配置
yudao
:
env
:
# 多环境的配置项
tag
:
${HOSTNAME}
captcha
:
enable
:
false
# 本地环境,暂时关闭图片验证码,方便登录等接口的测试
security
:
...
...
归档/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/config/DubboEnvironmentPostProcessor.java
deleted
100644 → 0
浏览文件 @
d0ce24a2
package
cn
.
iocoder
.
mall
.
dubbo
.
config
;
import
cn.iocoder.common.framework.util.OSUtils
;
import
cn.iocoder.common.framework.util.StringUtils
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.env.EnvironmentPostProcessor
;
import
org.springframework.core.env.ConfigurableEnvironment
;
import
org.springframework.core.env.MapPropertySource
;
import
org.springframework.core.env.MutablePropertySources
;
import
org.springframework.core.env.PropertySource
;
import
org.springframework.util.CollectionUtils
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* Dubbo 配置项的后置处理器,主要目的如下:
*
* 1. 生成 {@link #DUBBO_TAG_PROPERTIES_KEY} 配置项,可用于本地开发环境下的 dubbo.provider.tag 配置项
*/
public
class
DubboEnvironmentPostProcessor
implements
EnvironmentPostProcessor
{
/**
* 默认配置项的 PropertySource 名字
*/
private
static
final
String
PROPERTY_SOURCE_NAME
=
"mallDubboProperties"
;
/**
* Dubbo 路由标签属性 KEY
*/
private
static
final
String
DUBBO_TAG_PROPERTIES_KEY
=
"DUBBO_TAG"
;
@Override
public
void
postProcessEnvironment
(
ConfigurableEnvironment
environment
,
SpringApplication
application
)
{
// 需要修改的配置项
Map
<
String
,
Object
>
modifyProperties
=
new
HashMap
<>();
// 生成 DUBBO_TAG_PROPERTIES_KEY,使用 hostname
String
dubboTag
=
OSUtils
.
getHostName
();
if
(!
StringUtils
.
hasText
(
dubboTag
))
{
dubboTag
=
StringUtils
.
uuid
(
true
);
// 兜底,强行生成一个
}
modifyProperties
.
put
(
DUBBO_TAG_PROPERTIES_KEY
,
dubboTag
);
// 添加到 environment 中,排在最优,最低优先级
addOrReplace
(
environment
.
getPropertySources
(),
modifyProperties
);
}
private
void
addOrReplace
(
MutablePropertySources
propertySources
,
Map
<
String
,
Object
>
map
)
{
if
(
CollectionUtils
.
isEmpty
(
map
))
{
return
;
}
// 情况一,如果存在 defaultProperties 的 PropertySource,则进行 key 的修改
if
(
propertySources
.
contains
(
PROPERTY_SOURCE_NAME
))
{
PropertySource
<?>
source
=
propertySources
.
get
(
PROPERTY_SOURCE_NAME
);
if
(
source
instanceof
MapPropertySource
)
{
MapPropertySource
target
=
(
MapPropertySource
)
source
;
for
(
String
key
:
map
.
keySet
())
{
target
.
getSource
().
put
(
key
,
map
.
get
(
key
));
}
}
return
;
}
// 情况二,不存在 defaultProperties 的 PropertySource,则直接添加到其中
propertySources
.
addLast
(
new
MapPropertySource
(
PROPERTY_SOURCE_NAME
,
map
));
}
}
归档/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/spring.factories
deleted
100644 → 0
浏览文件 @
d0ce24a2
org.springframework.boot.env.EnvironmentPostProcessor=\
cn.iocoder.mall.dubbo.config.DubboEnvironmentPostProcessor
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论