23
23
import org .springframework .core .env .StandardEnvironment ;
24
24
25
25
/**
26
- * Simple detection for well known cloud platforms. For more advanced cloud provider
27
- * integration consider the Spring Cloud project.
26
+ * Simple detection for well known cloud platforms. Detection can be forced using the
27
+ * {@code "spring.main.cloud-platform"} configuration property. For more advanced cloud
28
+ * provider integration consider the Spring Cloud project.
28
29
*
29
30
* @author Phillip Webb
31
+ * @author Brian Clozel
30
32
* @since 1.3.0
31
- * @see "https://cloud. spring.io"
33
+ * @see "https://spring.io/projects/spring-cloud "
32
34
*/
33
35
public enum CloudPlatform {
34
36
37
+ /**
38
+ * No Cloud platform. Useful when false-positives are detected.
39
+ */
40
+ NONE {
41
+
42
+ @ Override
43
+ public boolean isAutoDetected (Environment environment ) {
44
+ return false ;
45
+ }
46
+
47
+ },
48
+
35
49
/**
36
50
* Cloud Foundry platform.
37
51
*/
38
52
CLOUD_FOUNDRY {
39
53
40
54
@ Override
41
- public boolean isActive (Environment environment ) {
55
+ public boolean isAutoDetected (Environment environment ) {
42
56
return environment .containsProperty ("VCAP_APPLICATION" ) || environment .containsProperty ("VCAP_SERVICES" );
43
57
}
44
58
@@ -50,7 +64,7 @@ public boolean isActive(Environment environment) {
50
64
HEROKU {
51
65
52
66
@ Override
53
- public boolean isActive (Environment environment ) {
67
+ public boolean isAutoDetected (Environment environment ) {
54
68
return environment .containsProperty ("DYNO" );
55
69
}
56
70
@@ -62,7 +76,7 @@ public boolean isActive(Environment environment) {
62
76
SAP {
63
77
64
78
@ Override
65
- public boolean isActive (Environment environment ) {
79
+ public boolean isAutoDetected (Environment environment ) {
66
80
return environment .containsProperty ("HC_LANDSCAPE" );
67
81
}
68
82
@@ -82,14 +96,14 @@ public boolean isActive(Environment environment) {
82
96
private static final String SERVICE_PORT_SUFFIX = "_SERVICE_PORT" ;
83
97
84
98
@ Override
85
- public boolean isActive (Environment environment ) {
99
+ public boolean isAutoDetected (Environment environment ) {
86
100
if (environment instanceof ConfigurableEnvironment ) {
87
- return isActive ((ConfigurableEnvironment ) environment );
101
+ return isAutoDetected ((ConfigurableEnvironment ) environment );
88
102
}
89
103
return false ;
90
104
}
91
105
92
- private boolean isActive (ConfigurableEnvironment environment ) {
106
+ private boolean isAutoDetected (ConfigurableEnvironment environment ) {
93
107
PropertySource <?> environmentPropertySource = environment .getPropertySources ()
94
108
.get (StandardEnvironment .SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME );
95
109
if (environmentPropertySource != null ) {
@@ -98,13 +112,13 @@ private boolean isActive(ConfigurableEnvironment environment) {
98
112
return true ;
99
113
}
100
114
if (environmentPropertySource instanceof EnumerablePropertySource ) {
101
- return isActive ((EnumerablePropertySource <?>) environmentPropertySource );
115
+ return isAutoDetected ((EnumerablePropertySource <?>) environmentPropertySource );
102
116
}
103
117
}
104
118
return false ;
105
119
}
106
120
107
- private boolean isActive (EnumerablePropertySource <?> environmentPropertySource ) {
121
+ private boolean isAutoDetected (EnumerablePropertySource <?> environmentPropertySource ) {
108
122
for (String propertyName : environmentPropertySource .getPropertyNames ()) {
109
123
if (propertyName .endsWith (SERVICE_HOST_SUFFIX )) {
110
124
String serviceName = propertyName .substring (0 ,
@@ -124,7 +138,31 @@ private boolean isActive(EnumerablePropertySource<?> environmentPropertySource)
124
138
* @param environment the environment
125
139
* @return if the platform is active.
126
140
*/
127
- public abstract boolean isActive (Environment environment );
141
+ public boolean isActive (Environment environment ) {
142
+ return isEnforced (environment ) || isAutoDetected (environment );
143
+ }
144
+
145
+ /**
146
+ * Detemines if the platform is enforced by looking at the
147
+ * {@code "spring.main.cloud-platform"} configuration property.
148
+ * @param environment the environment
149
+ * @return if the platform is enforced
150
+ */
151
+ public boolean isEnforced (Environment environment ) {
152
+ String platform = environment .getProperty ("spring.main.cloud-platform" );
153
+ if (platform != null ) {
154
+ return this .name ().equalsIgnoreCase (platform );
155
+ }
156
+ return false ;
157
+ }
158
+
159
+ /**
160
+ * Determines if the platform is auto-detected by looking for platform-specific
161
+ * environment variables.
162
+ * @param environment the environment
163
+ * @return if the platform is auto-detected.
164
+ */
165
+ public abstract boolean isAutoDetected (Environment environment );
128
166
129
167
/**
130
168
* Returns if the platform is behind a load balancer and uses
0 commit comments