Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
superrain51
apollo
提交
b533fb61
apollo
项目概览
superrain51
/
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,发现更多精彩内容 >>
未验证
提交
b533fb61
编写于
8月 26, 2018
作者:
J
Jason Song
提交者:
GitHub
8月 26, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1403 from nobodyiam/refactor-mock-server
refactor a little bit
上级
d7621107
71fca12e
变更
10
显示空白变更内容
内联
并排
Showing
10 changed file
with
186 addition
and
129 deletion
+186
-129
apollo-mockserver/pom.xml
apollo-mockserver/pom.xml
+16
-5
apollo-mockserver/src/main/java/com/ctrip/framework/apollo/mockserver/EmbeddedApollo.java
...com/ctrip/framework/apollo/mockserver/EmbeddedApollo.java
+88
-64
apollo-mockserver/src/main/java/com/ctrip/framework/apollo/mockserver/MockedMetaServerProvider.java
...framework/apollo/mockserver/MockedMetaServerProvider.java
+0
-27
apollo-mockserver/src/main/resources/META-INF/services/com.ctrip.framework.apollo.core.spi.MetaServerProvider
...es/com.ctrip.framework.apollo.core.spi.MetaServerProvider
+0
-1
apollo-mockserver/src/test/java/com/ctrip/framework/apollo/mockserver/ApolloMockServerApiTest.java
.../framework/apollo/mockserver/ApolloMockServerApiTest.java
+51
-0
apollo-mockserver/src/test/java/com/ctrip/framework/apollo/mockserver/ApolloMockServerSpringIntegrationTest.java
...llo/mockserver/ApolloMockServerSpringIntegrationTest.java
+23
-30
apollo-mockserver/src/test/resources/META-INF/app.properties
apollo-mockserver/src/test/resources/META-INF/app.properties
+1
-0
apollo-mockserver/src/test/resources/mockdata-otherNamespace.properties
...ver/src/test/resources/mockdata-otherNamespace.properties
+2
-0
apollo-mockserver/src/test/resources/mockdata-othernamespace.properties
...ver/src/test/resources/mockdata-othernamespace.properties
+0
-2
pom.xml
pom.xml
+5
-0
未找到文件。
apollo-mockserver/pom.xml
浏览文件 @
b533fb61
...
...
@@ -11,27 +11,38 @@
<artifactId>
apollo-mockserver
</artifactId>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>
com.squareup.okhttp3
</groupId>
<artifactId>
mockwebserver
</artifactId>
<version>
3.11.0
</version>
</dependency>
<dependency>
<groupId>
com.squareup.okhttp3
</groupId>
<artifactId>
okhttp
</artifactId>
<version>
3.11.0
</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>
com.ctrip.framework.apollo
</groupId>
<artifactId>
apollo-client
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
com.squareup.okhttp3
</groupId>
<artifactId>
mockwebserver
</artifactId>
<version>
3.11.0
</version>
</dependency>
<dependency>
<groupId>
com.squareup.okhttp3
</groupId>
<artifactId>
okhttp
</artifactId>
<version>
3.11.0
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter
</artifactId>
<version>
1.3.8.RELEASE
</version>
<scope>
provided
</scope>
<scope>
test
</scope>
</dependency>
</dependencies>
...
...
apollo-mockserver/src/main/java/com/ctrip/framework/apollo/mockserver/EmbeddedApollo.java
浏览文件 @
b533fb61
package
com.ctrip.framework.apollo.mockserver
;
import
com.ctrip.framework.apollo.
core.MetaDomainConsts
;
import
com.ctrip.framework.apollo.
build.ApolloInjector
;
import
com.ctrip.framework.apollo.core.dto.ApolloConfig
;
import
com.ctrip.framework.apollo.core.dto.ApolloConfigNotification
;
import
com.ctrip.framework.apollo.core.dto.ServiceDTO
;
import
com.ctrip.framework.apollo.core.spi.MetaServerProvider
;
import
com.ctrip.framework.apollo.core.utils.ResourceUtils
;
import
com.ctrip.framework.apollo.internals.ConfigServiceLocator
;
import
com.ctrip.framework.apollo.spring.config.PropertySourcesProcessor
;
import
com.ctrip.framework.apollo.spring.property.SpringValueDefinitionProcessor
;
import
com.google.common.collect.ImmutableMap
;
import
com.google.common.collect.ImmutableSet
;
import
com.google.gson.Gson
;
import
com.google.gson.reflect.TypeToken
;
import
java.
io.IOException
;
import
java.
lang.reflect.Method
;
import
java.lang.reflect.Type
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -29,40 +29,57 @@ import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
/**
* Create by zhangzheng on 8/22/18
* Email:zhangzheng@youzan.com
* Create by zhangzheng on 8/22/18 Email:zhangzheng@youzan.com
*/
public
class
EmbeddedApollo
extends
ExternalResource
{
private
Gson
gson
=
new
Gson
();
private
Logger
logger
=
LoggerFactory
.
getLogger
(
EmbeddedApollo
.
class
);
private
Type
notificationType
=
new
TypeToken
<
List
<
ApolloConfigNotification
>>(){}.
getType
();
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
EmbeddedApollo
.
class
);
private
static
final
Type
notificationType
=
new
TypeToken
<
List
<
ApolloConfigNotification
>>()
{
}.
getType
();
private
static
Method
PROPERTY_SOURCES_PROCESSOR_CLEAR
;
private
static
Method
SPRING_VALUE_DEFINITION_PROCESS_CLEAR
;
private
static
Method
CONFIG_SERVICE_LOCATOR_CLEAR
;
private
static
ConfigServiceLocator
CONFIG_SERVICE_LOCATOR
;
private
final
Gson
gson
=
new
Gson
();
private
final
Map
<
String
,
Map
<
String
,
String
>>
addedOrModifiedPropertiesOfNamespace
=
new
HashMap
<>();
private
final
Map
<
String
,
Set
<
String
>>
deletedKeysOfNamespace
=
new
HashMap
<>();
private
String
listenningUrl
;
private
MockWebServer
server
;
static
{
try
{
System
.
setProperty
(
"apollo.longPollingInitialDelayInMills"
,
"0"
);
PROPERTY_SOURCES_PROCESSOR_CLEAR
=
PropertySourcesProcessor
.
class
.
getDeclaredMethod
(
"reset"
);
PROPERTY_SOURCES_PROCESSOR_CLEAR
.
setAccessible
(
true
);
SPRING_VALUE_DEFINITION_PROCESS_CLEAR
=
SpringValueDefinitionProcessor
.
class
.
getDeclaredMethod
(
"reset"
);
SPRING_VALUE_DEFINITION_PROCESS_CLEAR
.
setAccessible
(
true
);
CONFIG_SERVICE_LOCATOR
=
ApolloInjector
.
getInstance
(
ConfigServiceLocator
.
class
);
CONFIG_SERVICE_LOCATOR_CLEAR
=
ConfigServiceLocator
.
class
.
getDeclaredMethod
(
"initConfigServices"
);
CONFIG_SERVICE_LOCATOR_CLEAR
.
setAccessible
(
true
);
}
catch
(
NoSuchMethodException
e
)
{
e
.
printStackTrace
();
}
}
@Override
protected
void
before
()
throws
Throwable
{
clear
();
server
=
new
MockWebServer
();
final
Dispatcher
dispatcher
=
new
Dispatcher
()
{
@Override
public
MockResponse
dispatch
(
RecordedRequest
request
)
throws
InterruptedException
{
if
(
request
.
getPath
().
startsWith
(
"/services/config"
))
{
return
new
MockResponse
().
setResponseCode
(
200
)
.
setBody
(
mockConfigServiceAddr
(
listenningUrl
));
}
else
if
(
request
.
getPath
().
startsWith
(
"/notifications/v2"
))
{
if
(
request
.
getPath
().
startsWith
(
"/notifications/v2"
))
{
String
notifications
=
request
.
getRequestUrl
().
queryParameter
(
"notifications"
);
MockResponse
response
=
new
MockResponse
().
setResponseCode
(
200
).
setBody
(
mockLongPollBody
(
notifications
));
return
response
;
return
new
MockResponse
().
setResponseCode
(
200
).
setBody
(
mockLongPollBody
(
notifications
));
}
else
if
(
request
.
getPath
().
startsWith
(
"/configs"
))
{
List
<
String
>
pathSegments
=
request
.
getRequestUrl
().
pathSegments
();
// appId and cluster might be used in the future
String
appId
=
pathSegments
.
get
(
1
);
String
cluster
=
pathSegments
.
get
(
2
);
String
namespace
=
pathSegments
.
get
(
3
);
return
new
MockResponse
().
setResponseCode
(
200
)
.
setBody
(
loadConfigFor
(
namespace
));
return
new
MockResponse
().
setResponseCode
(
200
).
setBody
(
loadConfigFor
(
namespace
));
}
return
new
MockResponse
().
setResponseCode
(
404
);
}
...
...
@@ -70,13 +87,8 @@ public class EmbeddedApollo extends ExternalResource {
server
.
setDispatcher
(
dispatcher
);
server
.
start
();
//指定apollo的metaserver地址为localhost
int
port
=
server
.
getPort
();
this
.
listenningUrl
=
"http://localhost:"
+
port
;
MockedMetaServerProvider
.
setAddress
(
listenningUrl
);
System
.
setProperty
(
"apollo.longPollingInitialDelayInMills"
,
"1"
);
mockConfigServiceUrl
(
"http://localhost:"
+
server
.
getPort
());
super
.
before
();
}
...
...
@@ -84,78 +96,90 @@ public class EmbeddedApollo extends ExternalResource {
@Override
protected
void
after
()
{
try
{
clear
();
server
.
close
();
}
catch
(
IO
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
"stop apollo server error"
,
e
);
}
}
private
void
clear
()
throws
Exception
{
resetOverriddenProperties
();
// clear Apollo states
PROPERTY_SOURCES_PROCESSOR_CLEAR
.
invoke
(
null
);
SPRING_VALUE_DEFINITION_PROCESS_CLEAR
.
invoke
(
null
);
}
private
void
mockConfigServiceUrl
(
String
url
)
throws
Exception
{
System
.
setProperty
(
"apollo.configService"
,
url
);
private
String
loadConfigFor
(
String
namespace
){
CONFIG_SERVICE_LOCATOR_CLEAR
.
invoke
(
CONFIG_SERVICE_LOCATOR
);
}
private
String
loadConfigFor
(
String
namespace
)
{
String
filename
=
String
.
format
(
"mockdata-%s.properties"
,
namespace
);
final
Properties
prop
=
ResourceUtils
.
readConfigFile
(
filename
,
new
Properties
());
Map
<
String
,
String
>
configurations
=
prop
.
stringPropertyNames
().
stream
().
collect
(
Collectors
.
toMap
(
key
->
key
,
key
->
prop
.
getProperty
(
key
)
));
ApolloConfig
apolloConfig
=
new
ApolloConfig
(
"someAppId"
,
"someCluster"
,
namespace
,
"someReleaseKey"
);
Map
<
String
,
String
>
configurations
=
prop
.
stringPropertyNames
().
stream
().
collect
(
Collectors
.
toMap
(
key
->
key
,
prop:
:
getProperty
));
ApolloConfig
apolloConfig
=
new
ApolloConfig
(
"someAppId"
,
"someCluster"
,
namespace
,
"someReleaseKey"
);
Map
<
String
,
String
>
mergedConfigurations
=
mergeModifyByUser
(
namespace
,
configurations
);
Map
<
String
,
String
>
mergedConfigurations
=
mergeOverriddenProperties
(
namespace
,
configurations
);
apolloConfig
.
setConfigurations
(
mergedConfigurations
);
return
gson
.
toJson
(
apolloConfig
);
}
private
String
mockLongPollBody
(
String
notificationsStr
){
private
String
mockLongPollBody
(
String
notificationsStr
)
{
List
<
ApolloConfigNotification
>
oldNotifications
=
gson
.
fromJson
(
notificationsStr
,
notificationType
);
List
<
ApolloConfigNotification
>
newNotifications
=
new
ArrayList
<>();
for
(
ApolloConfigNotification
noti:
oldNotifications
){
newNotifications
.
add
(
new
ApolloConfigNotification
(
noti
.
getNamespaceName
(),
noti
.
getNotificationId
()+
1
));
for
(
ApolloConfigNotification
notification
:
oldNotifications
)
{
newNotifications
.
add
(
new
ApolloConfigNotification
(
notification
.
getNamespaceName
(),
notification
.
getNotificationId
()
+
1
));
}
return
gson
.
toJson
(
newNotifications
);
}
private
String
mockConfigServiceAddr
(
String
addr
){
ServiceDTO
serviceDTO
=
new
ServiceDTO
();
serviceDTO
.
setAppName
(
"someAppName"
);
serviceDTO
.
setInstanceId
(
"someInstanceId"
);
serviceDTO
.
setHomepageUrl
(
addr
);
return
gson
.
toJson
(
Arrays
.
asList
(
serviceDTO
));
}
/**
* 合并用户对namespace的修改
* @param configurations
* @return
*/
private
Map
<
String
,
String
>
mergeModifyByUser
(
String
namespace
,
Map
<
String
,
String
>
configurations
){
if
(
addedPropertyOfNamespace
.
containsKey
(
namespace
)){
configurations
.
putAll
(
addedPropertyOfNamespace
.
get
(
namespace
));
private
Map
<
String
,
String
>
mergeOverriddenProperties
(
String
namespace
,
Map
<
String
,
String
>
configurations
)
{
if
(
addedOrModifiedPropertiesOfNamespace
.
containsKey
(
namespace
))
{
configurations
.
putAll
(
addedOrModifiedPropertiesOfNamespace
.
get
(
namespace
));
}
if
(
deletedKeysOfNamespace
.
containsKey
(
namespace
))
{
for
(
String
k:
deletedKeysOfNamespace
.
get
(
namespace
))
{
if
(
deletedKeysOfNamespace
.
containsKey
(
namespace
))
{
for
(
String
k
:
deletedKeysOfNamespace
.
get
(
namespace
))
{
configurations
.
remove
(
k
);
}
}
return
configurations
;
}
private
Map
<
String
,
Map
<
String
,
String
>>
addedPropertyOfNamespace
=
new
HashMap
<>();
public
void
addOrModifyPropery
(
String
namespace
,
String
someKey
,
String
someValue
)
{
if
(
addedPropertyOfNamespace
.
containsKey
(
namespace
)){
addedPropertyOfNamespace
.
get
(
namespace
).
put
(
someKey
,
someValue
);
}
else
{
addedPropertyOfNamespace
.
put
(
namespace
,
ImmutableMap
.
of
(
someKey
,
someValue
));
/**
* Add new property or update existed property
*/
public
void
addOrModifyProperty
(
String
namespace
,
String
someKey
,
String
someValue
)
{
if
(
addedOrModifiedPropertiesOfNamespace
.
containsKey
(
namespace
))
{
addedOrModifiedPropertiesOfNamespace
.
get
(
namespace
).
put
(
someKey
,
someValue
);
}
else
{
addedOrModifiedPropertiesOfNamespace
.
put
(
namespace
,
ImmutableMap
.
of
(
someKey
,
someValue
));
}
}
private
Map
<
String
,
Set
<
String
>>
deletedKeysOfNamespace
=
new
HashMap
<>();
public
void
delete
(
String
namespace
,
String
someKey
)
{
if
(
deletedKeysOfNamespace
.
containsKey
(
namespace
)){
/**
* Delete existed property
*/
public
void
deleteProperty
(
String
namespace
,
String
someKey
)
{
if
(
deletedKeysOfNamespace
.
containsKey
(
namespace
))
{
deletedKeysOfNamespace
.
get
(
namespace
).
add
(
someKey
);
}
else
{
}
else
{
deletedKeysOfNamespace
.
put
(
namespace
,
ImmutableSet
.
of
(
someKey
));
}
}
/**
* reset overridden properties
*/
public
void
resetOverriddenProperties
()
{
addedOrModifiedPropertiesOfNamespace
.
clear
();
deletedKeysOfNamespace
.
clear
();
}
}
apollo-mockserver/src/main/java/com/ctrip/framework/apollo/mockserver/MockedMetaServerProvider.java
已删除
100644 → 0
浏览文件 @
d7621107
package
com.ctrip.framework.apollo.mockserver
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.core.spi.MetaServerProvider
;
/**
* Create by zhangzheng on 8/23/18
* Email:zhangzheng@youzan.com
*/
public
class
MockedMetaServerProvider
implements
MetaServerProvider
{
private
static
String
address
;
public
static
void
setAddress
(
String
addr
){
address
=
addr
;
}
@Override
public
String
getMetaServerAddress
(
Env
targetEnv
)
{
return
address
;
}
@Override
public
int
getOrder
()
{
return
HIGHEST_PRECEDENCE
;
}
}
apollo-mockserver/src/main/resources/META-INF/services/com.ctrip.framework.apollo.core.spi.MetaServerProvider
已删除
100644 → 0
浏览文件 @
d7621107
com.ctrip.framework.apollo.mockserver.MockedMetaServerProvider
apollo-mockserver/src/test/java/com/ctrip/framework/apollo/mockserver/ApolloMockServerApiTest.java
0 → 100644
浏览文件 @
b533fb61
package
com.ctrip.framework.apollo.mockserver
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
com.ctrip.framework.apollo.Config
;
import
com.ctrip.framework.apollo.ConfigService
;
import
com.ctrip.framework.apollo.model.ConfigChangeEvent
;
import
com.google.common.util.concurrent.SettableFuture
;
import
java.util.concurrent.TimeUnit
;
import
org.junit.ClassRule
;
import
org.junit.Test
;
public
class
ApolloMockServerApiTest
{
private
static
final
String
otherNamespace
=
"otherNamespace"
;
@ClassRule
public
static
EmbeddedApollo
embeddedApollo
=
new
EmbeddedApollo
();
@Test
public
void
testGetProperty
()
throws
Exception
{
Config
applicationConfig
=
ConfigService
.
getAppConfig
();
assertEquals
(
"value1"
,
applicationConfig
.
getProperty
(
"key1"
,
null
));
assertEquals
(
"value2"
,
applicationConfig
.
getProperty
(
"key2"
,
null
));
}
@Test
public
void
testUpdateProperties
()
throws
Exception
{
String
someNewValue
=
"someNewValue"
;
Config
otherConfig
=
ConfigService
.
getConfig
(
otherNamespace
);
SettableFuture
<
ConfigChangeEvent
>
future
=
SettableFuture
.
create
();
otherConfig
.
addChangeListener
(
future:
:
set
);
assertEquals
(
"otherValue1"
,
otherConfig
.
getProperty
(
"key1"
,
null
));
assertEquals
(
"otherValue2"
,
otherConfig
.
getProperty
(
"key2"
,
null
));
embeddedApollo
.
addOrModifyProperty
(
otherNamespace
,
"key1"
,
someNewValue
);
ConfigChangeEvent
changeEvent
=
future
.
get
(
5
,
TimeUnit
.
SECONDS
);
assertEquals
(
someNewValue
,
otherConfig
.
getProperty
(
"key1"
,
null
));
assertEquals
(
"otherValue2"
,
otherConfig
.
getProperty
(
"key2"
,
null
));
assertTrue
(
changeEvent
.
isChanged
(
"key1"
));
}
}
apollo-mockserver/src/test/java/com/ctrip/framework/apollo/mockserver/SpringIntegrationTest.java
→
apollo-mockserver/src/test/java/com/ctrip/framework/apollo/mockserver/
ApolloMockServer
SpringIntegrationTest.java
浏览文件 @
b533fb61
package
com.ctrip.framework.apollo.mockserver
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
com.ctrip.framework.apollo.enums.PropertyChangeType
;
import
com.ctrip.framework.apollo.mockserver.SpringIntegrationTest.TestConfiguration
;
import
com.ctrip.framework.apollo.mockserver.
ApolloMockServer
SpringIntegrationTest.TestConfiguration
;
import
com.ctrip.framework.apollo.model.ConfigChangeEvent
;
import
com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener
;
import
com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig
;
import
static
org
.
junit
.
Assert
.*;
import
com.google.common.util.concurrent.SettableFuture
;
import
java.util.concurrent.ExecutionException
;
import
java.util.concurrent.TimeUnit
;
...
...
@@ -23,21 +23,23 @@ import org.springframework.test.annotation.DirtiesContext;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
/**
* Create by zhangzheng on 8/16/18
* Email:zhangzheng@youzan.com
* Create by zhangzheng on 8/16/18 Email:zhangzheng@youzan.com
*/
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@SpringApplicationConfiguration
(
classes
=
TestConfiguration
.
class
)
public
class
SpringIntegrationTest
{
@Autowired
TestBean
testBean
;
public
class
ApolloMockServer
SpringIntegrationTest
{
private
static
final
String
otherNamespace
=
"otherNamespace"
;
@ClassRule
public
static
EmbeddedApollo
embeddedApollo
=
new
EmbeddedApollo
();
@Autowired
private
TestBean
testBean
;
@Test
@DirtiesContext
public
void
testPropertyInject
(){
public
void
testPropertyInject
()
{
assertEquals
(
"value1"
,
testBean
.
key1
);
assertEquals
(
"value2"
,
testBean
.
key2
);
}
...
...
@@ -45,8 +47,7 @@ public class SpringIntegrationTest {
@Test
@DirtiesContext
public
void
testListenerTriggeredByAdd
()
throws
InterruptedException
,
ExecutionException
,
TimeoutException
{
String
otherNamespace
=
"othernamespace"
;
embeddedApollo
.
addOrModifyPropery
(
otherNamespace
,
"someKey"
,
"someValue"
);
embeddedApollo
.
addOrModifyProperty
(
otherNamespace
,
"someKey"
,
"someValue"
);
ConfigChangeEvent
changeEvent
=
testBean
.
futureData
.
get
(
5000
,
TimeUnit
.
MILLISECONDS
);
assertEquals
(
otherNamespace
,
changeEvent
.
getNamespace
());
assertEquals
(
"someValue"
,
changeEvent
.
getChange
(
"someKey"
).
getNewValue
());
...
...
@@ -56,42 +57,34 @@ public class SpringIntegrationTest {
@DirtiesContext
public
void
testListenerTriggeredByDel
()
throws
InterruptedException
,
ExecutionException
,
TimeoutException
{
String
otherNamespace
=
"othernamespace"
;
embeddedApollo
.
delete
(
otherNamespace
,
"key1"
);
embeddedApollo
.
deleteProperty
(
otherNamespace
,
"key1"
);
ConfigChangeEvent
changeEvent
=
testBean
.
futureData
.
get
(
5000
,
TimeUnit
.
MILLISECONDS
);
assertEquals
(
otherNamespace
,
changeEvent
.
getNamespace
());
assertEquals
(
PropertyChangeType
.
DELETED
,
changeEvent
.
getChange
(
"key1"
).
getChangeType
());
}
@EnableApolloConfig
(
"application"
)
@EnableApolloConfig
@Configuration
static
class
TestConfiguration
{
static
class
TestConfiguration
{
@Bean
public
TestBean
testBean
(){
public
TestBean
testBean
()
{
return
new
TestBean
();
}
}
static
class
TestBean
{
private
static
class
TestBean
{
@Value
(
"${key1:default}"
)
String
key1
;
private
String
key1
;
@Value
(
"${key2:default}"
)
String
key2
;
private
String
key2
;
SettableFuture
<
ConfigChangeEvent
>
futureData
=
SettableFuture
.
create
();
private
SettableFuture
<
ConfigChangeEvent
>
futureData
=
SettableFuture
.
create
();
@ApolloConfigChangeListener
(
"othernamespace"
)
@ApolloConfigChangeListener
(
otherNamespace
)
private
void
onChange
(
ConfigChangeEvent
changeEvent
)
{
futureData
.
set
(
changeEvent
);
}
}
}
apollo-mockserver/src/test/resources/META-INF/app.properties
0 → 100644
浏览文件 @
b533fb61
app.id
=
someAppId
apollo-mockserver/src/test/resources/mockdata-otherNamespace.properties
0 → 100644
浏览文件 @
b533fb61
key1
=
otherValue1
key2
=
otherValue2
apollo-mockserver/src/test/resources/mockdata-othernamespace.properties
已删除
100644 → 0
浏览文件 @
d7621107
key1
=
othervalue1
key2
=
othervalue2
pom.xml
浏览文件 @
b533fb61
...
...
@@ -113,6 +113,11 @@
<artifactId>
apollo-core
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
com.ctrip.framework.apollo
</groupId>
<artifactId>
apollo-client
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
com.ctrip.framework.apollo
</groupId>
<artifactId>
apollo-common
</artifactId>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录