easyconnect获取服务端配置信息失败_Spring Cloud Config (2) - 获取服务配置信息

12af77e4cc183daae30bed00e019a9ab.png

​在上一篇

《深入浅出Spring Cloud系列》:Spring Cloud Config (1) - 构建配置中心服务器​mp.weixin.qq.com
968eb1d06830ba1f8da85b9e1bec3ef6.png

中,我们已经构建了配置中心服务器,并为一个名为account-service的服务添加了配置信息。

本文将介绍在account-service服务的代码中,如何从远程配置服务器中获取配置信息,并使用配置信息。

首先,看看上一篇中为account-service服务添加的配置信息内容。

以下是account-service.yml的内容:

spring.jpa.database: "MYSQL"
spring.datasource.platform: "org.hibernate.dialect.MySQL55Dialect"
spring.jpa.show_sql: "true"
spring.database.driverClassName: "com.mysql.jdbc.Driver"
spring.datasource.url: "jdbc:mysql://localhost:3306/msproject?useUnicode=yes&characterEncoding=UTF-8"
spring.datasource.username: "msproject"
spring.datasource.password: "msproject"
spring.datasource.testWhileIdle: "true"
spring.jpa.hibernate.ddl-auto: "update"
spring.jpa.properties.hibernate.dialect: "org.hibernate.dialect.MySQL55Dialect"

config.vendor: "yglong.com"
config.accountType.default: "administrator"

可以看到,主要配置了访问MySQL数据库相关的配置信息,还有最后两个额外的配置项,我们将使用这两个配置项,来演示如何在服务中引用它们。

1. 创建account-service服务

创建一个新工程,名为account-service,它是一个常规的Spring Boot工程,提供账户服务。

我们在其pom.xml中引入将要使用的依赖。

<?xml version="1.0" encoding="UTF-8"?>

其中,一个重要的依赖是spring-cloud-config-client,它包含了访问配置服务器的客户端实现。

我们还引入了JPA,Hibernete和MySQL驱动的依赖包,用于访问数据库,实现从数据库中查询,创建和删除账户的功能。

接下来,编写一个表示账户的Account实体类(@Entity注解),同时也将其映射到数据库account表(@Table注解)。如下:

package 

然后编写继承CrudRepository的AccountRepository接口,提供CRUD功能。如下:

package 

我们再额外编写一个ServiceConfig类,它是一个配置类(使用Spring的@Configuration注解),我们将在这个类中注入配置信息。如下:

package 

可以看到,我们使用了@Value注解,用${config.vendor}这样的格式,注入了配置文件里的config.vendor项。

类似地,${config.accountType.default}注入了配置文件里的config.accountType.default项。

接下来,编写一个AccountService的服务类(@Service注解),提供几个业务逻辑方法,如下:

package 

使用依赖注入(@Autowired注解)注入了AccountRepository和ServiceConfig。

使用AccountRepository提供的方法操作数据库,使用ServiceConfig提供的方法来调取配置信息。

接下来,编写控制器,提供外部访问的服务端点。如下:

package 

我们主要编写了查询,创建和删除账户的服务端点。同时注入了AccountService,来完成实际的查询,创建和删除账户的业务逻辑。

另外,/v1/account/vendor服务端点仅用于演示能否正确引用配置文件里的配置信息。

最后,别忘了编写Spring的启动类。如下:

package 

2. 从配置服务器获取配置信息

至此,account-service服务的Java代码已经完成。

但我们还差一步:引入配置信息。包括连接数据库相关的配置信息,以及ServiceConfig类里引用的两个配置项。

与传统的Spring Boot项目不一样的是,这些配置并不与项目代码放在一起,而我们将从上一节实现的集中式的配置中心服务器中获取。

那么如何从配置服务器获取它们呢?

Spring Cloud为我们提供了非常方便的方法,只需简单的几行配置即可。

在src/main/resources下创建一个bootstrap.yml文件,编写如下几行配置:

spring

Ok,配置完成,就这么简单。

spring.cloud.config.uri:指定访问配置服务器的uri。

spring.application.name:指定应用的名称。

spring.profiles.active:指定使用哪个profile。

在pom.xml中引入的spring-cloud-config-client包含了Spring Cloud Config的客户端实现,它将作为客户端,使用上面的配置构建URL,然后向配置服务器发起Get请求。

如上面的配置,构建的URL为:

http://localhost:8889/account-service/default

因此,要成功访问配置信息,要注意几点:

首先应用名称必须与配置服务器上的应用名称一致。

其次,如果profiles是default,将获取account-service.yml里的内容,如果profiles是dev,将获取account-service-dev.yml的配置信息。

但注意,访问非default的配置时,服务器始终会将default的配置一同返回,作为缺省项的默认值。例如,假如在dev配置文件中缺少spring.datasource.username配置项,那么程序将使用default里的同名配置项。

3. 测试服务

至此,所有代码已经开发完毕,我们来测试一下服务。

但注意,在启动account-service之前,先要启动上一节实现的配置服务器。

打开一个终端,进入config-server目录,运行命令:

mvn spring-boot:run

然后新开一个终端,进入account-service目录,运行命令:

mvn spring-boot:run

启动成功后,用postman测试服务是否可以正常使用。

首先,我们向http://localhost:8082/v1/account发一个POST请求,创建账户,postman截图如下:

693d5ba85500c466aabf5d231491bb2b.png

Body中选择raw,并设置为JSON格式,在文本框中输入要提交的JSON。

Send成功后,下方状态条将显示Status: 200 OK。

注意,在Send之前,要记得在Headers中添加Content-Type为application/json,否则请求不会成功。如下:

be9430a7d8e9d9faafde7291a071cbbb.png

我们可以多发几个POST请求,多创建几个账户。然后向http://localhost:8082/v1/account发一个GET请求,获取所有账户信息。postman截图如下:

941e6abc4aaa1aa68734a883ff60fe02.png

可以看到,我们获取到了刚刚创建的所有账户。而且accountType的值也是期望的,它是我们通过配置文件里的config.accountType.default配置项注入程序的。

我们还可以测试一下http://localhost:8082/v1/account/vendor端点,验证是否可以获取配置文件中的config.vendor项。如下:

a767cc5ec287a825e8a18715a77055cf.png

可以看到,成功获取,且与配置文件中的值是一致的。

接下来,我们还可以验证一下服务提供的其他端点,如删除账户,这里我就不再赘述了。

4. 总结

本文详细介绍了从无到有开发一个微服务,然后介绍了如何从远端配置服务器获取配置信息,并将获取的配置信息注入到服务代码中,供微服务程序使用。

有了配置中心服务器,我们可以让所有微服务的配置信息由配置服务器集中式的来管理。而不用将配置信息与服务代码绑定在一起,避免在修改配置信息后重新编译和部署服务的麻烦。

而当配置信息有更新时,只需要在运行时刷新配置信息就可以了。下一节将介绍当配置信息变化时,如何在不重启服务的情况下,刷新配置信息。

(完)

f2cd33768f92bf5be99c580b2109bfa5.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值