apollo

<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>com.paic.apollo</groupId>
    <artifactId>test-demo-spring</artifactId>
    <version>0.0.1-SNAPSHOT</version>


    <properties>
        <apollo.client.version>0.10.0-SNAPSHOT</apollo.client.version>
        <java.version>1.8</java.version>
        <github.path>${project.artifactId}</github.path>
        <spring-demo.version>4.3.6.RELEASE</spring-demo.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring-demo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring-demo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring-demo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring-demo.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${spring-demo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-asm</artifactId>
                <version>${spring-demo.version}</version>
            </dependency>
            <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>2.2.2</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!-- for spring demo -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>${apollo.client.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.4.1</version>
        </dependency>
        <!-- take over jcl -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.21</version>
        </dependency>
    </dependencies>
</project>


<?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="60">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="[apollo-demo][%t]%d %-5p [%c] %m%n"/>
    </Console>
    <Async name="Async" includeLocation="true">
      <AppenderRef ref="Console"/>
    </Async>
  </appenders>
  <loggers>
    <logger name="com.ctrip.framework.apollo" additivity="false" level="INFO">
      <AppenderRef ref="Async"/>
    </logger>
    <logger name="com.ctrip.framework.apollo.demo" additivity="false" level="DEBUG">
      <AppenderRef ref="Async"/>
    </logger>
    <root level="INFO">
      <AppenderRef ref="Async"/>
    </root>
  </loggers>
</configuration>


 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:apollo="http://www.ctrip.com/schema/apollo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd">
       
    <!--
    	这个是最简单的配置形式,一般应用用这种形式就可以了,
    	用来指示Apollo注入application namespace的配置到Spring环境中
    -->
    <apollo:config/>
    
    <bean id="TestXmlBean" class="com.paic.apollo.test.demo.spring.TestXmlBean">
        <property name="portalUrl" value="${elis.papp.portal:sss}"/>
        <property name="timeout" value="${timeout:100}"/>
        <property name="batch" value="${batch:200}"/>
    </bean>
</beans>
package com.paic.apollo.test.demo.spring.annotation;

import org.springframework.beans.factory.annotation.Value;

import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;

public class TestApolloAnnotationBean {
	@ApolloConfig
	private Config config; // inject config for namespace application

	@Value("${batch:100}")
	private int batch;

	@Value("${elis.papp.portal:100}")
	private String portalUrl;

	// config change listener for namespace application
	@ApolloConfigChangeListener
	private void someOnChange(ConfigChangeEvent changeEvent) {
		// update injected value of batch if it is changed in Apollo
		if (changeEvent.isChanged("batch")) {
			batch = config.getIntProperty("batch", 100);
		}
	}

	// config change listener for namespace application
	@ApolloConfigChangeListener("application")
	private void anotherOnChange(ConfigChangeEvent changeEvent) {
		// do something
	}

	// config change listener for namespaces application and FX.apollo
//	@ApolloConfigChangeListener({ "application", "FX.apollo" })
//	private void yetAnotherOnChange(ConfigChangeEvent changeEvent) {
//		// do something
//	}

	// example of getting config from Apollo directly
	// this will always return the latest value of timeout
	public int getTimeout() {
		return config.getIntProperty("timeout", 200);
	}

	// example of getting config from injected value
	// the program needs to update the injected value when batch is changed in
	// Apollo using @ApolloConfigChangeListener shown above
	public int getBatch() {
		return this.batch;
	}

	public String getPortalUrl() {
		return portalUrl;
	}
	
}
package com.paic.apollo.test.demo.spring.config;


import javax.annotation.PostConstruct;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("annotatedBean")
public class TestJavaConfigBean {

	  private static final Logger logger = LoggerFactory.getLogger(TestJavaConfigBean.class);

	  @Value("${timeout:200}")
	  private int timeout;
	  private int batch;
	  
	  @Value("${elis.smp.cms.cms.web.url:ccc}")
	  private String als_url;
	  
	  @PostConstruct
	  void initialize() {
	    logger.info("timeout is initialized as {}", timeout);
	    logger.info("batch is initialized as {}", batch);
	    logger.info("als_url is initialized as {}", als_url);
	  }

	  @Value("${batch:100}")
	  public void setBatch(int batch) {
	    this.batch = batch;
	  }
	  
	  @Override
	  public String toString() {
	    return String.format("[AnnotatedBean] timeout: %d, batch: %d,als_url: %s", timeout, batch,als_url);
	  }	
}

猜你喜欢

转载自my.oschina.net/u/1474131/blog/1616837