Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
spring-cloud-netflix
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
openSource
spring-cloud-netflix
Commits
a9213f24
Commit
a9213f24
authored
Jan 02, 2015
by
Dave Syer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allow @RibbonClient("foo") as a short cut
parent
ec2d732b
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
170 additions
and
18 deletions
+170
-18
RibbonClient.java
...rg/springframework/cloud/netflix/ribbon/RibbonClient.java
+2
-1
RibbonClientConfigurationRegistrar.java
...ud/netflix/ribbon/RibbonClientConfigurationRegistrar.java
+21
-4
PlainRibbonClientPreprocessorIntegrationTests.java
...ribbon/PlainRibbonClientPreprocessorIntegrationTests.java
+61
-0
RibbonClientPreprocessorIntegrationTests.java
...flix/ribbon/RibbonClientPreprocessorIntegrationTests.java
+15
-11
RibbonClientsPreprocessorIntegrationTests.java
...lix/ribbon/RibbonClientsPreprocessorIntegrationTests.java
+5
-2
EurekaRibbonClientPreprocessorIntegrationTests.java
...ureka/EurekaRibbonClientPreprocessorIntegrationTests.java
+66
-0
No files found.
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClient.java
View file @
a9213f24
...
...
@@ -34,6 +34,7 @@ import org.springframework.context.annotation.Import;
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
public
@interface
RibbonClient
{
String
name
();
String
value
()
default
""
;
String
name
()
default
""
;
Class
<?>[]
configuration
()
default
{};
}
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfigurationRegistrar.java
View file @
a9213f24
...
...
@@ -22,6 +22,7 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import
org.springframework.context.annotation.ImportBeanDefinitionRegistrar
;
import
org.springframework.core.annotation.AnnotationAttributes
;
import
org.springframework.core.type.AnnotationMetadata
;
import
org.springframework.util.StringUtils
;
/**
* @author Dave Syer
...
...
@@ -42,17 +43,33 @@ public class RibbonClientConfigurationRegistrar implements ImportBeanDefinitionR
}
}
if
(
attrs
!=
null
&&
attrs
.
containsKey
(
"defaultConfiguration"
))
{
registerClientConfiguration
(
registry
,
"default."
+
metadata
.
getEnclosingClassName
(),
registerClientConfiguration
(
registry
,
"default."
+
metadata
.
getEnclosingClassName
(),
attrs
.
get
(
"defaultConfiguration"
));
}
Map
<
String
,
Object
>
client
=
metadata
.
getAnnotationAttributes
(
RibbonClient
.
class
.
getName
(),
true
);
if
(
client
!=
null
&&
client
.
containsKey
(
"name"
))
{
registerClientConfiguration
(
registry
,
client
.
get
(
"name"
),
client
.
get
(
"configuration"
));
String
name
=
getClientName
(
client
);
if
(
name
!=
null
)
{
registerClientConfiguration
(
registry
,
name
,
client
.
get
(
"configuration"
));
}
}
private
String
getClientName
(
Map
<
String
,
Object
>
client
)
{
if
(
client
==
null
)
{
return
null
;
}
String
value
=
(
String
)
client
.
get
(
"value"
);
if
(
value
!=
null
&&
StringUtils
.
hasText
(
value
))
{
return
value
;
}
value
=
(
String
)
client
.
get
(
"name"
);
if
(
value
!=
null
&&
StringUtils
.
hasText
(
value
))
{
return
value
;
}
throw
new
IllegalStateException
(
"Either 'name' or 'value' must be provided in @RibbonClient"
);
}
private
void
registerClientConfiguration
(
BeanDefinitionRegistry
registry
,
Object
name
,
Object
configuration
)
{
BeanDefinitionBuilder
builder
=
BeanDefinitionBuilder
...
...
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/PlainRibbonClientPreprocessorIntegrationTests.java
0 → 100644
View file @
a9213f24
/*
* Copyright 2013-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration
;
import
org.springframework.boot.test.SpringApplicationConfiguration
;
import
org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration
;
import
org.springframework.cloud.netflix.ribbon.PlainRibbonClientPreprocessorIntegrationTests.TestConfiguration
;
import
org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Import
;
import
org.springframework.test.annotation.DirtiesContext
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.loadbalancer.ZoneAwareLoadBalancer
;
/**
* @author Dave Syer
*
*/
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@SpringApplicationConfiguration
(
classes
=
TestConfiguration
.
class
)
@DirtiesContext
public
class
PlainRibbonClientPreprocessorIntegrationTests
{
@Autowired
private
SpringClientFactory
factory
;
@Test
public
void
serverListIsWrapped
()
throws
Exception
{
@SuppressWarnings
(
"unchecked"
)
ZoneAwareLoadBalancer
<
Server
>
loadBalancer
=
(
ZoneAwareLoadBalancer
<
Server
>)
factory
.
getLoadBalancer
(
"foo"
);
DomainExtractingServerList
.
class
.
cast
(
loadBalancer
.
getServerListImpl
());
}
@Configuration
@RibbonClient
(
"foo"
)
@Import
({
PropertyPlaceholderAutoConfiguration
.
class
,
ArchaiusAutoConfiguration
.
class
,
RibbonAutoConfiguration
.
class
})
protected
static
class
TestConfiguration
{
}
}
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/
eureka/
RibbonClientPreprocessorIntegrationTests.java
→
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientPreprocessorIntegrationTests.java
View file @
a9213f24
...
...
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
eureka
;
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
...
...
@@ -23,19 +23,17 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration
;
import
org.springframework.boot.test.SpringApplicationConfiguration
;
import
org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration
;
import
org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration
;
import
org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration
;
import
org.springframework.cloud.netflix.ribbon.RibbonClient
;
import
org.springframework.cloud.netflix.ribbon.SpringClientFactory
;
import
org.springframework.cloud.netflix.ribbon.eureka.RibbonClientPreprocessorIntegrationTests.TestConfiguration
;
import
org.springframework.cloud.netflix.ribbon.RibbonClientPreprocessorIntegrationTests.TestConfiguration
;
import
org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList
;
import
org.springframework.cloud.netflix.ribbon.eureka.ZonePreferenceServerListFilter
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Import
;
import
org.springframework.test.annotation.DirtiesContext
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
com.netflix.loadbalancer.AvailabilityFilteringRule
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.loadbalancer.ZoneAvoidanceRule
;
import
com.netflix.loadbalancer.ZoneAwareLoadBalancer
;
/**
...
...
@@ -59,11 +57,11 @@ public class RibbonClientPreprocessorIntegrationTests {
}
@Test
public
void
ruleDefaultsTo
ZoneAvoidance
()
throws
Exception
{
public
void
ruleDefaultsTo
Availability
()
throws
Exception
{
@SuppressWarnings
(
"unchecked"
)
ZoneAwareLoadBalancer
<
Server
>
loadBalancer
=
(
ZoneAwareLoadBalancer
<
Server
>)
factory
.
getLoadBalancer
(
"foo"
);
ZoneAvoidance
Rule
.
class
.
cast
(
loadBalancer
.
getRule
());
AvailabilityFiltering
Rule
.
class
.
cast
(
loadBalancer
.
getRule
());
}
@Test
...
...
@@ -77,10 +75,16 @@ public class RibbonClientPreprocessorIntegrationTests {
}
@Configuration
@RibbonClient
(
"foo"
)
@Import
({
PropertyPlaceholderAutoConfiguration
.
class
,
ArchaiusAutoConfiguration
.
class
,
RibbonAutoConfiguration
.
class
})
protected
static
class
PlainConfiguration
{
}
@Configuration
@RibbonClient
(
name
=
"foo"
,
configuration
=
FooConfiguration
.
class
)
@Import
({
PropertyPlaceholderAutoConfiguration
.
class
,
ArchaiusAutoConfiguration
.
class
,
EurekaClientAutoConfiguration
.
class
,
RibbonAutoConfiguration
.
class
,
RibbonEurekaAutoConfiguration
.
class
})
ArchaiusAutoConfiguration
.
class
,
RibbonAutoConfiguration
.
class
})
protected
static
class
TestConfiguration
{
}
...
...
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/
eureka/
RibbonClientsPreprocessorIntegrationTests.java
→
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientsPreprocessorIntegrationTests.java
View file @
a9213f24
...
...
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
eureka
;
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
...
...
@@ -28,7 +28,10 @@ import org.springframework.cloud.netflix.ribbon.RibbonClients;
import
org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration
;
import
org.springframework.cloud.netflix.ribbon.RibbonClient
;
import
org.springframework.cloud.netflix.ribbon.SpringClientFactory
;
import
org.springframework.cloud.netflix.ribbon.eureka.RibbonClientsPreprocessorIntegrationTests.TestConfiguration
;
import
org.springframework.cloud.netflix.ribbon.RibbonClientsPreprocessorIntegrationTests.TestConfiguration
;
import
org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList
;
import
org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration
;
import
org.springframework.cloud.netflix.ribbon.eureka.ZonePreferenceServerListFilter
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Import
;
...
...
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientPreprocessorIntegrationTests.java
0 → 100644
View file @
a9213f24
/*
* Copyright 2013-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
eureka
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration
;
import
org.springframework.boot.test.SpringApplicationConfiguration
;
import
org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration
;
import
org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration
;
import
org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration
;
import
org.springframework.cloud.netflix.ribbon.RibbonClient
;
import
org.springframework.cloud.netflix.ribbon.SpringClientFactory
;
import
org.springframework.cloud.netflix.ribbon.eureka.EurekaRibbonClientPreprocessorIntegrationTests.TestConfiguration
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Import
;
import
org.springframework.test.annotation.DirtiesContext
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.loadbalancer.ZoneAvoidanceRule
;
import
com.netflix.loadbalancer.ZoneAwareLoadBalancer
;
/**
* @author Dave Syer
*
*/
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@SpringApplicationConfiguration
(
classes
=
TestConfiguration
.
class
)
@DirtiesContext
public
class
EurekaRibbonClientPreprocessorIntegrationTests
{
@Autowired
private
SpringClientFactory
factory
;
@Test
public
void
ruleDefaultsToZoneAvoidance
()
throws
Exception
{
@SuppressWarnings
(
"unchecked"
)
ZoneAwareLoadBalancer
<
Server
>
loadBalancer
=
(
ZoneAwareLoadBalancer
<
Server
>)
factory
.
getLoadBalancer
(
"foo"
);
ZoneAvoidanceRule
.
class
.
cast
(
loadBalancer
.
getRule
());
}
@Configuration
@RibbonClient
(
"foo"
)
@Import
({
PropertyPlaceholderAutoConfiguration
.
class
,
ArchaiusAutoConfiguration
.
class
,
RibbonAutoConfiguration
.
class
,
EurekaClientAutoConfiguration
.
class
,
RibbonEurekaAutoConfiguration
.
class
})
protected
static
class
TestConfiguration
{
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment