Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wrr-cat
apollo
提交
25b43175
apollo
项目概览
wrr-cat
/
apollo
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
apollo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
25b43175
编写于
9月 04, 2017
作者:
N
nobodyiam
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add ConditionalOnProfile and ConditionalOnMissingProfile annotations
上级
5f05ddb0
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
198 addition
and
1 deletion
+198
-1
apollo-common/src/main/java/com/ctrip/framework/apollo/common/condition/ConditionalOnMissingProfile.java
.../apollo/common/condition/ConditionalOnMissingProfile.java
+26
-0
apollo-common/src/main/java/com/ctrip/framework/apollo/common/condition/ConditionalOnProfile.java
...amework/apollo/common/condition/ConditionalOnProfile.java
+27
-0
apollo-common/src/main/java/com/ctrip/framework/apollo/common/condition/OnProfileCondition.java
...framework/apollo/common/condition/OnProfileCondition.java
+52
-0
apollo-common/src/test/java/com/ctrip/framework/apollo/common/AllTests.java
...test/java/com/ctrip/framework/apollo/common/AllTests.java
+2
-1
apollo-common/src/test/java/com/ctrip/framework/apollo/common/conditional/ConditionalOnProfileTest.java
...k/apollo/common/conditional/ConditionalOnProfileTest.java
+91
-0
未找到文件。
apollo-common/src/main/java/com/ctrip/framework/apollo/common/condition/ConditionalOnMissingProfile.java
0 → 100644
浏览文件 @
25b43175
package
com.ctrip.framework.apollo.common.condition
;
import
org.springframework.context.annotation.Conditional
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* {@link Conditional} that only matches when the specified profiles are inactive.
*
* @author Jason Song(song_s@ctrip.com)
*/
@Target
({
ElementType
.
TYPE
,
ElementType
.
METHOD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
@Conditional
(
OnProfileCondition
.
class
)
public
@interface
ConditionalOnMissingProfile
{
/**
* The profiles that should be inactive
* @return
*/
String
[]
value
()
default
{};
}
apollo-common/src/main/java/com/ctrip/framework/apollo/common/condition/ConditionalOnProfile.java
0 → 100644
浏览文件 @
25b43175
package
com.ctrip.framework.apollo.common.condition
;
import
org.springframework.context.annotation.Conditional
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* {@link Conditional} that only matches when the specified profiles are active.
*
* @author Jason Song(song_s@ctrip.com)
*/
@Target
({
ElementType
.
TYPE
,
ElementType
.
METHOD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
@Conditional
(
OnProfileCondition
.
class
)
public
@interface
ConditionalOnProfile
{
/**
* The profiles that should be active
* @return
*/
String
[]
value
()
default
{};
}
apollo-common/src/main/java/com/ctrip/framework/apollo/common/condition/OnProfileCondition.java
0 → 100644
浏览文件 @
25b43175
package
com.ctrip.framework.apollo.common.condition
;
import
com.google.common.collect.Sets
;
import
org.springframework.context.annotation.Condition
;
import
org.springframework.context.annotation.ConditionContext
;
import
org.springframework.core.type.AnnotatedTypeMetadata
;
import
org.springframework.util.MultiValueMap
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Set
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
public
class
OnProfileCondition
implements
Condition
{
@Override
public
boolean
matches
(
ConditionContext
context
,
AnnotatedTypeMetadata
metadata
)
{
Set
<
String
>
activeProfiles
=
Sets
.
newHashSet
(
context
.
getEnvironment
().
getActiveProfiles
());
Set
<
String
>
requiredActiveProfiles
=
retrieveAnnotatedProfiles
(
metadata
,
ConditionalOnProfile
.
class
.
getName
());
Set
<
String
>
requiredInactiveProfiles
=
retrieveAnnotatedProfiles
(
metadata
,
ConditionalOnMissingProfile
.
class
.
getName
());
return
Sets
.
difference
(
requiredActiveProfiles
,
activeProfiles
).
isEmpty
()
&&
Sets
.
intersection
(
requiredInactiveProfiles
,
activeProfiles
).
isEmpty
();
}
private
Set
<
String
>
retrieveAnnotatedProfiles
(
AnnotatedTypeMetadata
metadata
,
String
annotationType
)
{
if
(!
metadata
.
isAnnotated
(
annotationType
))
{
return
Collections
.
emptySet
();
}
Set
<
String
>
profiles
=
Sets
.
newHashSet
();
MultiValueMap
<
String
,
Object
>
attributes
=
metadata
.
getAllAnnotationAttributes
(
annotationType
);
List
<?>
values
=
attributes
.
get
(
"value"
);
if
(
values
!=
null
)
{
for
(
Object
value
:
values
)
{
if
(
value
instanceof
String
[])
{
Collections
.
addAll
(
profiles
,
(
String
[])
value
);
}
else
{
profiles
.
add
((
String
)
value
);
}
}
}
return
profiles
;
}
}
apollo-common/src/test/java/com/ctrip/framework/apollo/common/AllTests.java
浏览文件 @
25b43175
package
com.ctrip.framework.apollo.common
;
import
com.ctrip.framework.apollo.common.conditional.ConditionalOnProfileTest
;
import
com.ctrip.framework.apollo.common.utils.InputValidatorTest
;
import
org.junit.runner.RunWith
;
...
...
@@ -8,7 +9,7 @@ import org.junit.runners.Suite.SuiteClasses;
@RunWith
(
Suite
.
class
)
@SuiteClasses
({
InputValidatorTest
.
class
InputValidatorTest
.
class
,
ConditionalOnProfileTest
.
class
})
public
class
AllTests
{
...
...
apollo-common/src/test/java/com/ctrip/framework/apollo/common/conditional/ConditionalOnProfileTest.java
0 → 100644
浏览文件 @
25b43175
package
com.ctrip.framework.apollo.common.conditional
;
import
com.ctrip.framework.apollo.common.condition.ConditionalOnMissingProfile
;
import
com.ctrip.framework.apollo.common.condition.ConditionalOnProfile
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.test.context.ActiveProfiles
;
import
org.springframework.test.context.ContextConfiguration
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
conditional
.
ConditionalOnProfileTest
.
ANOTHER_PROFILE
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
conditional
.
ConditionalOnProfileTest
.
SOME_PROFILE
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@ContextConfiguration
(
classes
=
ConditionalOnProfileTest
.
TestConfiguration
.
class
)
@ActiveProfiles
({
SOME_PROFILE
,
ANOTHER_PROFILE
})
public
class
ConditionalOnProfileTest
{
static
final
String
SOME_PROFILE
=
"someProfile"
;
static
final
String
ANOTHER_PROFILE
=
"anotherProfile"
;
static
final
String
YET_ANOTHER_PROFILE
=
"yetAnotherProfile"
;
static
boolean
someConfigurationEnabled
=
false
;
static
boolean
anotherConfigurationEnabled
=
false
;
static
boolean
yetAnotherConfigurationEnabled
=
false
;
static
boolean
combinedConfigurationEnabled
=
false
;
static
boolean
anotherCombinedConfigurationEnabled
=
false
;
@Test
public
void
test
()
throws
Exception
{
assertTrue
(
someConfigurationEnabled
);
assertFalse
(
anotherConfigurationEnabled
);
assertTrue
(
yetAnotherConfigurationEnabled
);
assertTrue
(
combinedConfigurationEnabled
);
assertFalse
(
anotherCombinedConfigurationEnabled
);
}
@Configuration
static
class
TestConfiguration
{
@Configuration
@ConditionalOnProfile
(
SOME_PROFILE
)
static
class
SomeConfiguration
{
{
someConfigurationEnabled
=
true
;
}
}
@Configuration
@ConditionalOnMissingProfile
(
ANOTHER_PROFILE
)
static
class
AnotherConfiguration
{
{
anotherConfigurationEnabled
=
true
;
}
}
@Configuration
@ConditionalOnMissingProfile
(
YET_ANOTHER_PROFILE
)
static
class
YetAnotherConfiguration
{
{
yetAnotherConfigurationEnabled
=
true
;
}
}
@Configuration
@ConditionalOnProfile
({
SOME_PROFILE
,
ANOTHER_PROFILE
})
@ConditionalOnMissingProfile
(
YET_ANOTHER_PROFILE
)
static
class
CombinedConfiguration
{
{
combinedConfigurationEnabled
=
true
;
}
}
@Configuration
@ConditionalOnProfile
(
SOME_PROFILE
)
@ConditionalOnMissingProfile
({
YET_ANOTHER_PROFILE
,
ANOTHER_PROFILE
})
static
class
AnotherCombinedConfiguration
{
{
anotherCombinedConfigurationEnabled
=
true
;
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录