Spring Cloud学习笔记【七】Config 配置中心与客户端的搭建使用与详解

               Spring Cloud学习笔记【七】Config 配置中心与客户端的搭建使用与详解

springcloud的版本Hoxton.SR1,springboot的版本是2.2.2.RELEASE。

一、eruka服务端搭建

a.依赖引入

implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'

b.添加注解 

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

 c.配置文件配置

spring.application.name=eureka
#eureka默认端口
server.port=8761
#禁止自己当做服务去注册
eureka.client.register-with-eureka=false
#自我保护模式关闭
eureka.server.enable-self-preservation=false
# 清理无效节点的时间间隔(单位毫秒,默认是60*1000)
# 生产环境,不会频繁重启,所以,一定要把自我保护机制打开,否则网络一旦终端,就无法恢复。
eureka.server.eviction-interval-timer-in-ms=10000    

d.测试:http://localhost:8761/ 

二、配置中心搭建

2.1、git仓库准备

可以新建一个spring-cloud-config的仓库,并创建一个release的分支版本,便于测试!!!

使用 git作为配置存储,除了 git 外,还可以用数据库、svn、本地文件等作为存储。

2.2、编码实现

 implementation 'org.springframework.cloud:spring-cloud-config-server'
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

 添加注解@EnableConfigServer

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

配置项目信息和git仓库信息

#服务端口
server.port=9008
#项目名称
spring.application.name=config-service
#往配置中心添加服务的地址
eureka.client.service-url.defaultZone:http://localhost:8761/eureka/
# git仓库地址(项目地址,直接复制链接但要去除.git就行)
spring.cloud.config.server.git.uri=http://192.168.3.6:3000/laihx/spring-cloud-config
# git仓库地址下的相对搜索地址(可用使用通配符),可以配置多个,用分割,可以{application}实现按应用查配置
spring.cloud.config.server.git.search-paths=config
# git仓库的账号(公开仓库无需账号信息)
spring.cloud.config.server.git.username=805292506@qq.com
# git仓库的密码(公开仓库无需账号信息)
spring.cloud.config.server.git.password=laihx123456
#git默认分支
spring.cloud.config.server.git.default-label=master
#日志配置(详细日志,便于观察)
logging.level.web=trace

 4、配置webhooks,即为web钩子!git的pub_key一般在C:\Users\admin\.ssh的位置!

5、测试

Spring Cloud Config 有它的一套访问规则,我们在日志中就可以详细的看出访问规则,我们通过这套规则在浏览器上直接访问就可以。

{GET /{name}-{profiles}.properties}: properties(String,String,boolean)
{GET [/{name}-{profiles}.yml, /{name}-{profiles}.yaml]}: yaml(String,String,boolean)
{GET /{name}/{profiles:.*[^-].*}, produces [application/json]}: defaultLabel(String,String)
{GET [/{label}/{name}-{profiles}.yml, /{label}/{name}-{profiles}.yaml]}: labelledYaml(String,String,String,boolean)
{GET /{name}/{profiles}/{label:.*}, produces [application/json]}: labelled(String,String,String)
{GET /{name}-{profiles}.json}: jsonProperties(String,String,boolean)
{GET /{label}/{name}-{profiles}.json}: labelledJsonProperties(String,String,String,boolean)
{GET /{label}/{name}-{profiles}.properties}: labelledProperties(String,String,String,boolean)
{GET /{name}/{profiles:.*[^-].*}, produces [application/vnd.spring-cloud.config-server.v2+json]}: defaultLabelIncludeOrigin(String,String)
{GET /{name}/{profiles}/{label:.*}, produces [application/vnd.spring-cloud.config-server.v2+json]}: labelledIncludeOrigin(String,String,String)

{application} 就是应用名称,对应到配置文件上来,就是配置文件的名称部分,例如我上面创建的配置文件,在git创建的文件前缀。

{profile} 就是配置文件的版本,我们的项目有开发版本、测试环境版本、生产环境版本,对应到配置文件上来就是以 application-{profile}.yml 加以区分,例如application-dev.yml、application-sit.yml、application-prod.yml。

{label} 表示 git 分支,默认是 master 分支,如果项目是以分支做区分也是可以的,那就可以通过不同的 label 来控制访问不同的配置文件了。

a、根据这三条规则,我们可以通过以下地址查看配置文件内容:

http://localhost:9008/config/dev/master

http://localhost:9008/config-dev.yml

http://localhost:9008/master/config-dev.yml

b、改变查询分支

http://localhost:9008/release/config-dev.yml

为什么会多出红色的东西出来?

是因为config-dev.yml会自动合并config.yml里面的内容,如果相同,获取config-dev.yml的内容,如果有多出来的,会进行合并,这个对于不同环境的相同配置就非常的又好了,只需要统一去配置相同项就行了!

改变获取文件的格式也是可以的 

http://localhost:9008/master/config-dev.json

http://localhost:9008/master/config-dev.properties

6、文件保存路径

从日志里面可以看出来,config-service会自动拉起文件进行下载到默认文件下!但在生成环境的中,这样是非常的不安全的,需要保存到指定的有权限操作的文件夹才行!

#文件拉取的保存路径
spring.cloud.config.server.git.basedir=E:/basedir

 

 三、客户端搭建

a.依赖引入

plugins {
    id 'org.springframework.boot' version '2.2.2.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
    mavenCentral()
}
ext {
    set('springCloudVersion', "Hoxton.SR1")
}
dependencies {
    implementation "com.alibaba:fastjson:1.2.55"
    implementation"mysql:mysql-connector-java:5.1.32"
    implementation"org.springframework.boot:spring-boot-starter-data-jpa"
    implementation 'org.springframework.cloud:spring-cloud-config-client'
    implementation'org.springframework.cloud:spring-cloud-starter-openfeign'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}
dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}
test {
    useJUnitPlatform()
}

b.配置文件配置,application.yml

spring:
  application:
    name: client
  datasource:
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/order?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false
    username: root
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
platform:
  order:
    code:
      profile: p_123456
      suffix: qqqqqq
project:
  branch: master
  env: dev

 c.编码

@Entity
public class OrderInfo implements Serializable {

    /**
     * 订单ID,自增
     */
    @Id
    @GeneratedValue
    private Long orderId;

    /**
     * 订单Code
     */
    private String orderCode;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 用户名称
     */
    private String userName;

    /**
     * 订单价格
     */
    private BigDecimal orderPrice;

    /**
     * 创建时间
     */
    @JSONField(format = "yyyy-MM-dd")
    private Date createTime;

    public Long getOrderId() {
        return orderId;
    }

    public void setOrderId(Long orderId) {
        this.orderId = orderId;
    }

    public String getOrderCode() {
        return orderCode;
    }

    public void setOrderCode(String orderCode) {
        this.orderCode = orderCode;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public BigDecimal getOrderPrice() {
        return orderPrice;
    }

    public void setOrderPrice(BigDecimal orderPrice) {
        this.orderPrice = orderPrice;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}
@Repository
public interface OrderInfoRepository extends JpaRepository<OrderInfo,Long> {
}
@Service
public class OrderInfoServiceImpl implements OrderInfoService {

    @Autowired
    private OrderInfoRepository orderInfoRepository;


    @Override
    public OrderInfo query(OrderInfo order) throws Exception {
        return orderInfoRepository.getOne(order.getOrderId());
    }

    @Override
    public List<OrderInfo> list() throws Exception {
        return orderInfoRepository.findAll();
    }
}
@Component
@RefreshScope
public class OrderCodeConfig implements Serializable {

    @Value("${platform.order.code.profile}")
    private String profile;

    @Value("${platform.order.code.suffix}")
    private String suffix;

    public String getProfile() {
        return profile;
    }

    public void setProfile(String profile) {
        this.profile = profile;
    }

    public String getSuffix() {
        return suffix;
    }

    public void setSuffix(String suffix) {
        this.suffix = suffix;
    }
}

 

@RestController
@RequestMapping("/order")
public class OrderInfoController {

    @Autowired
    private OrderCodeConfig orderCodeConfig;

    @Autowired
    private OrderInfoService orderInfoService;

    /**
     * @todo 查询订单列表
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/list",method = RequestMethod.GET)
    public String list() throws Exception {
        List<OrderInfo> list = orderInfoService.list();
        return JSON.toJSONString(list);
    }

    /**
     * @todo 查询订单配置
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/config",method = RequestMethod.GET)
    public String config() throws Exception {
        return JSON.toJSONString(orderCodeConfig);
    }
    
}

d.测试

可以正确注册到eruka服务上

可以正确的访问数据库,并获取数据

也就是说目前client端,能够正确的注册到eruka服务器上,并且能够正确的访问数据库,接下来进行改造!!

e.新建bootstrap.yml配置文件

配置文件中:application.yml是用户级的资源配置项,bootstrap.yml是系统级的,优先级更加高,会更先加载!!!

spring:
  cloud:
    config:
      discovery:
        enabled: true
        service-id: CONFIG-SERVER #config-service配置中心的application的name
      profile: dev #获取具体的什么环境 {profile}
      name: config #获取git创建的配置文件的前缀{application}
      label: master #分支选择
  application:
    name: client

g.测试http://localhost:8080/order/config

进行修改git的文件,看配置是否修改成功!!!这个时候肯定是要重启config-service,和config-client的!!!

重启之后访问

至此,Config 配置中心与客户端的搭建完成!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值