Adjusting configuration and adding documentation
This commit is contained in:
committed by
Ioannis Canellos
parent
41bb31fd4c
commit
3d766effa6
@@ -0,0 +1,8 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: reload-example
|
||||
data:
|
||||
application.properties: |-
|
||||
bean.message=Hello World!
|
||||
another.property=value
|
||||
@@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>spring-cloud-kubernetes-examples</artifactId>
|
||||
<groupId>io.fabric8</groupId>
|
||||
<version>0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>kubernetes-reload-example</artifactId>
|
||||
|
||||
<name>Fabric8 :: Spring Cloud Kubernetes :: Examples :: Reload</name>
|
||||
<description>Example demostrating how to use the configuration reload feature.</description>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-dependencies</artifactId>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
<version>${spring-boot.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.fabric8</groupId>
|
||||
<artifactId>spring-cloud-kubernetes-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-tomcat</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-undertow</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-validator</artifactId>
|
||||
<version>${hibernate-validator.version}</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>io.fabric8</groupId>
|
||||
<artifactId>fabric8-maven-plugin</artifactId>
|
||||
<version>${fabric8.maven.plugin.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>resource</goal>
|
||||
<goal>build</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,54 @@
|
||||
## Kubernetes Reload Example
|
||||
|
||||
This example demonstrate how to use the reload feature to change the configuration of a spring-boot application at runtime.
|
||||
|
||||
The application consists of a timed bean that periodically prints a message to the console.
|
||||
The message can be changed using a config map.
|
||||
|
||||
### Running the example
|
||||
|
||||
When using Openshift, you must assign the `view` role to the *default* service account in the current project:
|
||||
|
||||
```
|
||||
oc policy add-role-to-user view --serviceaccount=default
|
||||
```
|
||||
|
||||
You can deploy the application using the fabric8 maven plugin:
|
||||
|
||||
```
|
||||
mvn clean install fabric8:deploy
|
||||
```
|
||||
|
||||
### Changing the configuration
|
||||
|
||||
Create a yaml file with the following contents:
|
||||
|
||||
```yml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: reload-example
|
||||
data:
|
||||
application.properties: |-
|
||||
bean.message=Hello World!
|
||||
another.property=value
|
||||
```
|
||||
|
||||
A sample config map is provided with this example in the *config-map.yml* file.
|
||||
|
||||
To deploy the config map, just run the following command:
|
||||
|
||||
```
|
||||
oc create -f config-map.yml
|
||||
```
|
||||
|
||||
As soon as the config map is deployed, the output of the application changes accordingly.
|
||||
The config map can be now edited with the following command:
|
||||
|
||||
```
|
||||
oc edit configmap reload-example
|
||||
```
|
||||
|
||||
Changes are applied immediately when using the *event* reload mode.
|
||||
|
||||
The name of the config map (*"reload-example"*) matches the name of the application as declared in the *application.properties* file.
|
||||
@@ -0,0 +1,18 @@
|
||||
package io.fabric8.spring.cloud.kubernetes.examples;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@SpringBootApplication
|
||||
@EnableScheduling
|
||||
public class App {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(App.class, args);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package io.fabric8.spring.cloud.kubernetes.examples;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class MyBean {
|
||||
|
||||
@Autowired
|
||||
private MyConfig config;
|
||||
|
||||
@Scheduled(fixedDelay = 5000)
|
||||
public void hello() {
|
||||
System.out.println("The message is: " + config.getMessage());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package io.fabric8.spring.cloud.kubernetes.examples;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
@ConfigurationProperties(prefix = "bean")
|
||||
public class MyConfig {
|
||||
|
||||
private String message = "a message that can be changed live";
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
spring.application.name=reload-example
|
||||
|
||||
spring.cloud.kubernetes.reload.enabled=true
|
||||
|
||||
#spring.cloud.kubernetes.reload.strategy=restart_context
|
||||
#spring.cloud.kubernetes.reload.mode=polling
|
||||
#spring.cloud.kubernetes.reload.period=5000
|
||||
#spring.cloud.kubernetes.reload.monitoring-config-maps=false
|
||||
#spring.cloud.kubernetes.reload.monitoring-secrets=true
|
||||
23
spring-cloud-kubernetes-examples/pom.xml
Normal file
23
spring-cloud-kubernetes-examples/pom.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>spring-cloud-kubernetes-project</artifactId>
|
||||
<groupId>io.fabric8</groupId>
|
||||
<version>0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>spring-cloud-kubernetes-examples</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>Fabric8 :: Spring Cloud Kubernetes :: Examples</name>
|
||||
<description>Examples showing how to use features of Spring Cloud Kubernetes.</description>
|
||||
|
||||
<modules>
|
||||
<module>kubernetes-reload-example</module>
|
||||
</modules>
|
||||
|
||||
|
||||
</project>
|
||||
Reference in New Issue
Block a user