携程apollo centos7本地部署运行、SpringBoot从apollo获取配置
原创 share_i 发表于:2021-11-02 14:52:42
  阅读 :602   收藏   编辑

环境准备

  • JDK 1.8+

  • MYSQL 5.6.5+

下载

demo github地址:https://github.com/nobodyiam/apollo-build-scripts

demo 下载地址:百度云盘

安装配置

rz上传到centos

1

unzip apollo-quick-start-1.5.0.zip

解压后目录

2

初始化数据库

Apollo一共需要两个数据库:ApolloPortalDB 和 ApolloConfigDB,在解压目录的~/sql下

3

4

修改数据库连接

数据库连接信息在 demo.sh 中

# apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=

启动

执行启动脚本:

./demo.sh start

apollo启动分别使用 8070、8080、8090 端口,请确保这3个端口当前没有被使用

1

访问 

http://IP:8070

账号:apollo

密码:admin

5


SpringBoot连接Apollo

参考:github apollo wiki

由之前我们项目的配置在项目classpath下的.yml或.properties中,现在改为在apollo读取

上面我们已经运行起来apollo的demo,已经有一个默认的项目“SampleApp”,该项目已经有一个配置参数timeout,我们就去用java读这个配置

1

2个基本配置

java连接apollo至少需要配置2个参数

  • AppId

AppId是应用的身份信息,是从服务端获取配置的一个重要信息,也就是我们需要从apollo那个项目中获取,该ID在创建apollo创建项目的时候设置,默认的项目“SampleApp”为:SampleApp

2

点击修改图标,进入修改页面就可以看到

3

  • meta server

Apollo支持应用在不同的环境有不同的配置,所以需要在运行提供给Apollo客户端当前环境的Apollo Meta Server信息,默认情况下,meta server和config service是部署在同一个JVM进程,所以meta server的地址就是config service的地址

这里也就是我们上面centos的地址

创建项目

1

pom.xml添加apollo依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.0.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.example</groupId>
   <artifactId>demo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>demo</name>
   <description>Demo project for Spring Boot</description>

   <properties>
      <java.version>1.8</java.version>
   </properties>
   <repositories>
      <repository>
         <id>nexus-aliyun</id>
         <name>Nexus aliyun</name>
         <layout>default</layout>
         <url>http://maven.aliyun.com/nexus/content/groups/public</url>
         <snapshots>
            <enabled>false</enabled>
         </snapshots>
         <releases>
            <enabled>true</enabled>
         </releases>
      </repository>
   </repositories>

   <dependencies>
      <dependency>
         <groupId>com.ctrip.framework.apollo</groupId>
         <artifactId>apollo-client</artifactId>
         <version>1.5.0</version>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
         <scope>runtime</scope>
         <optional>true</optional>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-configuration-processor</artifactId>
         <optional>true</optional>
      </dependency>
      <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <optional>true</optional>
      </dependency>

   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>

</project>

application.properties

#AppId
app.id=SampleApp
#meta server
apollo.meta=http://192.168.109.128:8080
#配置本地缓存地址,apollo服务不可用是,从缓存中读取
apollo.cacheDir=D:/apollo/cacheDir

DemoApplication.java启动类新增注解

@SpringBootApplication
@EnableApolloConfig
public class DemoApplication {

   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }

}

DemoController.java

@RestController
public class DemoController {

    /**
     * 获取timeout
     * @return
     */
    @GetMapping(name="/get")
    public String get(){
        Config config = ConfigService.getAppConfig();
        String timeout = config.getProperty("timeout","");
        return "timeout:" + timeout;

    }
}

浏览器请求

1

在apollo中修改timeout值,提交、发布,可以请求/get发现timeout已经改成在apollo中的值