[ 
https://issues.apache.org/jira/browse/CAMEL-8482?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14513901#comment-14513901
 ] 

Henryk Konsek commented on CAMEL-8482:
--------------------------------------

Hi Manuel,

Actually it looks more like a Spring Boot issue, than Camel issue. Can you send 
me the Maven example I could use to reproduce the issue?

Cheers.

> Camel requires restart of Spring applicationcontext to fetch new values for 
> properties managed by Spring Cloud
> --------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-8482
>                 URL: https://issues.apache.org/jira/browse/CAMEL-8482
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-spring-boot
>    Affects Versions: 2.15.0
>            Reporter: Manuel Rivas
>            Assignee: Henryk Konsek
>         Attachments: config-client.zip
>
>
> When having a camel route builder making use of a property managed by spring  
> cloud config server, the beans in the application managed by Spring get the 
> property values refreshed when invoking the Spring cloud config 
> RefreshEndpoint but the camel routebuilders does not pick up the new values. 
> Restarting the camel context does not help either. Restart of Spring 
> application context is required.
> Example that works for Spring managed beans:
> package se.comhem.service;
> import org.springframework.beans.factory.annotation.Value;
> import org.springframework.cloud.context.config.annotation.RefreshScope;
> import org.springframework.stereotype.Component;
> @Component
> @RefreshScope()
> public class CosmosProperties {
>     @Value("${cosmos.someappconf}")
>     private String someAppConf;
>     public String getSomeAppConf(){
>         return someAppConf;
>     }
> }
> When using this bean together with a camel routebuilder it does not work 
> until Spring Application context is restarted:
> package se.comhem.service;
> import org.apache.camel.model.language.SimpleExpression;
> import org.apache.camel.spring.SpringRouteBuilder;
> import org.springframework.beans.factory.annotation.Autowired;
> import org.springframework.stereotype.Component;
> @Component
> public class ConfigClientRouteBuilder extends SpringRouteBuilder {
>     private final static String URI = "servlet:///testCamel";
>     @Autowired
>     private CosmosProperties cosmosProperties;
>     @Override
>     public void configure() throws Exception {
>         from(URI)
>                 .setBody(new 
> SimpleExpression(cosmosProperties.getSomeAppConf()))
>                 .to("log:se.comhem?level=INFO&showBody=true&multiline=true")
>                 .end();
>     }
> }
> Main application class:
> package se.comhem.service;
> import org.apache.camel.component.servlet.CamelHttpTransportServlet;
> import org.springframework.beans.factory.annotation.Autowired;
> import org.springframework.boot.SpringApplication;
> import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
> import org.springframework.boot.context.embedded.ServletRegistrationBean;
> import org.springframework.context.annotation.Bean;
> import org.springframework.context.annotation.ComponentScan;
> import org.springframework.context.annotation.Configuration;
> import org.springframework.web.bind.annotation.RequestMapping;
> import org.springframework.web.bind.annotation.RestController;
> @Configuration
> @EnableAutoConfiguration
> @RestController
> @ComponentScan
> public class Application {
>     private static final String CAMEL_URL_MAPPING = "/camel/*";
>     private static final String CAMEL_SERVLET_NAME = "CamelServlet";
>     @Autowired
>     private CosmosProperties cosmosProperties;
>     @RequestMapping("/")
>     public String home() {
>         return "Config client running correctly";
>     }
>     public static void main( String[] args ) {
>         SpringApplication.run(Application.class, args);
>     }
>     @RequestMapping("/some-app-conf")
>     public String someAppConf(){
>         return "Some app conf " + this.cosmosProperties.getSomeAppConf();
>     }
>     @Bean
>     public ServletRegistrationBean servletRegistrationBean() {
>         ServletRegistrationBean registration = new 
> ServletRegistrationBean(new CamelHttpTransportServlet(), CAMEL_URL_MAPPING);
>         registration.setName(CAMEL_SERVLET_NAME);
>         return registration;
>     }
> }
> Bootstrap configuration
> spring:
>   boot:
>     admin:
>       url: http://localhost:8880
>   application:
>     name: config-client
>   config:
>     name: config-client
>   profiles:
>       active: ${environment}
>   cloud:
>       config:
>         uri: http://localhost:8110
>         enabled: true
>         failFast: true
> pom:
> <?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";>
>     <modelVersion>4.0.0</modelVersion>
>     <groupId>se.comhem.service</groupId>
>     <artifactId>config-client</artifactId>
>     <version>1.0-SNAPSHOT</version>
>     <properties>
>         
> <org.springframework.version>4.1.5.RELEASE</org.springframework.version>
>         <camel.version>2.15.0</camel.version>
>         <java.version>1.8</java.version>
>     </properties>
>     <dependencyManagement>
>         <dependencies>
>             <dependency>
>                 <groupId>org.springframework.cloud</groupId>
>                 <artifactId>spring-cloud-starter-parent</artifactId>
>                 <version>1.0.0.RELEASE</version>
>                 <type>pom</type>
>                 <scope>import</scope>
>             </dependency>
>         </dependencies>
>     </dependencyManagement>
>     <dependencies>
>         <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>
>                 <exclusion>
>                     <groupId>org.slf4j</groupId>
>                     <artifactId>log4j-over-slf4j</artifactId>
>                 </exclusion>
>             </exclusions>
>         </dependency>
>         <dependency>
>             <groupId>org.springframework.boot</groupId>
>             <artifactId>spring-boot-starter-jetty</artifactId>
>         </dependency>
>         <dependency>
>             <groupId>org.springframework.boot</groupId>
>             <artifactId>spring-boot-starter-actuator</artifactId>
>         </dependency>
>         <dependency>
>             <groupId>org.springframework.cloud</groupId>
>             <artifactId>spring-cloud-starter</artifactId>
>         </dependency>
>         <dependency>
>             <groupId>de.codecentric</groupId>
>             <artifactId>spring-boot-starter-admin-client</artifactId>
>             <version>1.1.2</version>
>         </dependency>
>         <dependency>
>             <groupId>se.comhem.common</groupId>
>             <artifactId>decrypt</artifactId>
>             <version>1.0.0</version>
>         </dependency>
>         <!-- Camel -->
>         <dependency>
>             <groupId>org.apache.camel</groupId>
>             <artifactId>camel-core</artifactId>
>             <version>${camel.version}</version>
>             <exclusions>
>                 <exclusion>
>                     <artifactId>slf4j-api</artifactId>
>                     <groupId>org.slf4j</groupId>
>                 </exclusion>
>             </exclusions>
>         </dependency>
>         <dependency>
>             <groupId>org.apache.camel</groupId>
>             <artifactId>camel-spring-boot</artifactId>
>             <version>${camel.version}</version>
>         </dependency>
>         <dependency>
>             <groupId>org.apache.camel</groupId>
>             <artifactId>camel-servlet</artifactId>
>             <version>${camel.version}</version>
>         </dependency>
>     </dependencies>
>     <build>
>         <resources>
>             <resource>
>                 <directory>src/main/resources</directory>
>                 <filtering>true</filtering>
>             </resource>
>         </resources>
>         <plugins>
>             <plugin>
>                 <groupId>org.springframework.boot</groupId>
>                 <artifactId>spring-boot-maven-plugin</artifactId>
>                 <executions>
>                     <execution>
>                         <goals>
>                             <goal>repackage</goal>
>                         </goals>
>                     </execution>
>                 </executions>
>             </plugin>
>             <plugin>
>                 <groupId>org.apache.maven.plugins</groupId>
>                 <artifactId>maven-compiler-plugin</artifactId>
>                 <version>3.2</version><!--$NO-MVN-MAN-VER$-->
>                 <configuration>
>                     <source>${java.version}</source>
>                     <target>${java.version}</target>
>                 </configuration>
>             </plugin>
>             <plugin>
>                 <groupId>org.apache.maven.plugins</groupId>
>                 <artifactId>maven-source-plugin</artifactId>
>                 <executions>
>                     <execution>
>                         <id>attach-sources</id>
>                         <phase>verify</phase>
>                         <goals>
>                             <goal>jar-no-fork</goal>
>                         </goals>
>                     </execution>
>                 </executions>
>             </plugin>
>         </plugins>
>     </build>
> </project>



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to