Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
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
DEMO
spring-boot
Commits
9eb251a8
Commit
9eb251a8
authored
Jun 12, 2020
by
Phillip Webb
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '2.3.x'
Closes gh-21904
parents
1c6416ec
16045457
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
82 additions
and
8 deletions
+82
-8
AvailabilityChangeEvent.java
...gframework/boot/availability/AvailabilityChangeEvent.java
+18
-7
AvailabilityChangeEventTests.java
...ework/boot/availability/AvailabilityChangeEventTests.java
+64
-1
No files found.
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/availability/AvailabilityChangeEvent.java
View file @
9eb251a8
...
@@ -19,6 +19,8 @@ package org.springframework.boot.availability;
...
@@ -19,6 +19,8 @@ package org.springframework.boot.availability;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationEvent
;
import
org.springframework.context.ApplicationEvent
;
import
org.springframework.context.ApplicationEventPublisher
;
import
org.springframework.context.ApplicationEventPublisher
;
import
org.springframework.context.PayloadApplicationEvent
;
import
org.springframework.core.ResolvableType
;
import
org.springframework.util.Assert
;
import
org.springframework.util.Assert
;
/**
/**
...
@@ -32,9 +34,7 @@ import org.springframework.util.Assert;
...
@@ -32,9 +34,7 @@ import org.springframework.util.Assert;
* @author Phillip Webb
* @author Phillip Webb
* @since 2.3.0
* @since 2.3.0
*/
*/
public
class
AvailabilityChangeEvent
<
S
extends
AvailabilityState
>
extends
ApplicationEvent
{
public
class
AvailabilityChangeEvent
<
S
extends
AvailabilityState
>
extends
PayloadApplicationEvent
<
S
>
{
private
final
S
state
;
/**
/**
* Create a new {@link AvailabilityChangeEvent} instance.
* Create a new {@link AvailabilityChangeEvent} instance.
...
@@ -42,9 +42,7 @@ public class AvailabilityChangeEvent<S extends AvailabilityState> extends Applic
...
@@ -42,9 +42,7 @@ public class AvailabilityChangeEvent<S extends AvailabilityState> extends Applic
* @param state the availability state (never {@code null})
* @param state the availability state (never {@code null})
*/
*/
public
AvailabilityChangeEvent
(
Object
source
,
S
state
)
{
public
AvailabilityChangeEvent
(
Object
source
,
S
state
)
{
super
(
source
);
super
(
source
,
state
);
Assert
.
notNull
(
state
,
"State must not be null"
);
this
.
state
=
state
;
}
}
/**
/**
...
@@ -52,7 +50,20 @@ public class AvailabilityChangeEvent<S extends AvailabilityState> extends Applic
...
@@ -52,7 +50,20 @@ public class AvailabilityChangeEvent<S extends AvailabilityState> extends Applic
* @return the availability state
* @return the availability state
*/
*/
public
S
getState
()
{
public
S
getState
()
{
return
this
.
state
;
return
getPayload
();
}
@Override
public
ResolvableType
getResolvableType
()
{
return
ResolvableType
.
forClassWithGenerics
(
getClass
(),
getStateType
());
}
private
Class
<?>
getStateType
()
{
S
state
=
getState
();
if
(
state
instanceof
Enum
)
{
return
((
Enum
<?>)
state
).
getDeclaringClass
();
}
return
state
.
getClass
();
}
}
/**
/**
...
...
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/availability/AvailabilityChangeEventTests.java
View file @
9eb251a8
...
@@ -21,6 +21,10 @@ import org.mockito.ArgumentCaptor;
...
@@ -21,6 +21,10 @@ import org.mockito.ArgumentCaptor;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationEvent
;
import
org.springframework.context.ApplicationEvent
;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.event.EventListener
;
import
org.springframework.core.ResolvableType
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThatIllegalArgumentException
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThatIllegalArgumentException
;
...
@@ -39,7 +43,7 @@ class AvailabilityChangeEventTests {
...
@@ -39,7 +43,7 @@ class AvailabilityChangeEventTests {
@Test
@Test
void
createWhenStateIsNullThrowsException
()
{
void
createWhenStateIsNullThrowsException
()
{
assertThatIllegalArgumentException
().
isThrownBy
(()
->
new
AvailabilityChangeEvent
<>(
this
.
source
,
null
))
assertThatIllegalArgumentException
().
isThrownBy
(()
->
new
AvailabilityChangeEvent
<>(
this
.
source
,
null
))
.
withMessage
(
"
State
must not be null"
);
.
withMessage
(
"
Payload
must not be null"
);
}
}
@Test
@Test
...
@@ -49,6 +53,24 @@ class AvailabilityChangeEventTests {
...
@@ -49,6 +53,24 @@ class AvailabilityChangeEventTests {
assertThat
(
event
.
getState
()).
isEqualTo
(
state
);
assertThat
(
event
.
getState
()).
isEqualTo
(
state
);
}
}
@Test
void
getResolvableType
()
{
LivenessState
state
=
LivenessState
.
CORRECT
;
AvailabilityChangeEvent
<
LivenessState
>
event
=
new
AvailabilityChangeEvent
<>(
this
.
source
,
state
);
ResolvableType
type
=
event
.
getResolvableType
();
assertThat
(
type
.
resolve
()).
isEqualTo
(
AvailabilityChangeEvent
.
class
);
assertThat
(
type
.
resolveGeneric
()).
isEqualTo
(
LivenessState
.
class
);
}
@Test
void
getResolvableTypeWhenSubclassedEnum
()
{
SubClassedEnum
state
=
SubClassedEnum
.
TWO
;
AvailabilityChangeEvent
<
SubClassedEnum
>
event
=
new
AvailabilityChangeEvent
<>(
this
.
source
,
state
);
ResolvableType
type
=
event
.
getResolvableType
();
assertThat
(
type
.
resolve
()).
isEqualTo
(
AvailabilityChangeEvent
.
class
);
assertThat
(
type
.
resolveGeneric
()).
isEqualTo
(
SubClassedEnum
.
class
);
}
@Test
@Test
void
publishPublishesEvent
()
{
void
publishPublishesEvent
()
{
ApplicationContext
context
=
mock
(
ApplicationContext
.
class
);
ApplicationContext
context
=
mock
(
ApplicationContext
.
class
);
...
@@ -61,4 +83,45 @@ class AvailabilityChangeEventTests {
...
@@ -61,4 +83,45 @@ class AvailabilityChangeEventTests {
assertThat
(
event
.
getState
()).
isEqualTo
(
state
);
assertThat
(
event
.
getState
()).
isEqualTo
(
state
);
}
}
@Test
void
publishEvenToContextConsidersGenericType
()
{
AnnotationConfigApplicationContext
context
=
new
AnnotationConfigApplicationContext
(
Config
.
class
);
AvailabilityChangeEvent
.
publish
(
context
,
LivenessState
.
CORRECT
);
AvailabilityChangeEvent
.
publish
(
context
,
ReadinessState
.
ACCEPTING_TRAFFIC
);
}
enum
SubClassedEnum
implements
AvailabilityState
{
ONE
{
@Override
String
getDescription
()
{
return
"I have been overridden"
;
}
},
TWO
{
@Override
String
getDescription
()
{
return
"I have aslo been overridden"
;
}
};
abstract
String
getDescription
();
}
@Configuration
static
class
Config
{
@EventListener
void
onLivenessAvailabilityChange
(
AvailabilityChangeEvent
<
LivenessState
>
event
)
{
assertThat
(
event
.
getState
()).
isInstanceOf
(
LivenessState
.
class
).
isEqualTo
(
LivenessState
.
CORRECT
);
}
}
}
}
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