Config的简介

是SpringCloud的配置中心组件,集中管理配置文件,是客户端和服务器端CS模式,配置文件基于Git的。

Config的使用

在git仓库中提交goods-service服务的配置文件 goods-service-dev.properties

命名规则:服务名称-profile名称(dev/test/prod).properties或yml

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/eshop?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

 

搭建Config服务器

1.引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

2.启动类添加注解 @EnableConfigServer

3.配置 

server.port=6666
spring.application.name=config-server
#是否从注册中心获得数据
eureka.client.fetch-registry=true
#是否注册到注册中心上
eureka.client.register-with-eureka=true
#配置注册中心的地址
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8888/eureka/
#配置中心git相关配置
spring.cloud.config.server.git.uri=自己的git仓库
spring.cloud.config.server.git.username=自己的账号
spring.cloud.config.server.git.password=自己的密码
#配置文件存放的目录,如果是根目录可以不配置
#spring.cloud.config.server.git.search-paths=xxx
#分支名称
spring.cloud.config.label=master

搭建Config客户端

1. 引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>

2.将配置文件application改名为bootstrap(bootrap提前于application加载 )

server.port=8011
#应用程序名
spring.application.name=goods-service
#是否从注册中心获得数据
eureka.client.fetch-registry=true
#是否注册到注册中心上
eureka.client.register-with-eureka=true
#配置注册中心的地址
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8888/eureka/

#配置中心服务器的配置
spring.cloud.config.discovery.service-id=config-server
#启动配置中心的发现机制
spring.cloud.config.discovery.enabled=true
#配置profile  不写profile 填default
spring.cloud.config.profile=dev
#配置分支
spring.cloud.config.label=master

3. 注入配置内容

@Value("${spring.datasource.driver-class-name}")
private String driverName;

@Value("${spring.datasource.url}")
private String url;

@Value("${spring.datasource.username}")
private String username;

@Value("${spring.datasource.password}")
private String password;

动态更新配置

 配置文件更新后,客户端需要获得最新的配置,在不重启系统的基础上

1、客户端引入依赖 actuator

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

2、在需要进行动态更新配置的类上加 @RefreshScope

3、开启端点

        #开启全部端点

                management.endpoints.web.exposure.include=*

4、发送post请求

                http://服务ip:端口/actuator/refresh

Webhock问题解决方案

启动类加@ServletComponentScan

public class CustometRequestWrapper extends HttpServletRequestWrapper {

    public CustometRequestWrapper(HttpServletRequest request) {
        super(request);
    }

    @Override
    public ServletInputStream getInputStream() throws IOException {
        byte[] bytes = new byte[0];
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
        return new ServletInputStream() {
            @Override
            public boolean isFinished() {
                return byteArrayInputStream.read() == -1 ? true:false;
            }

            @Override
            public boolean isReady() {
                return false;
            }

            @Override
            public void setReadListener(ReadListener readListener) {

            }

            @Override
            public int read() throws IOException {
                return byteArrayInputStream.read();
            }
        };
    }
}

@WebFilter(filterName = "bodyFilter", urlPatterns = "/*")
@Order(1)
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
        String url = new String(httpServletRequest.getRequestURI());
        //只过滤/actuator/refresh请求
        if (!url.endsWith("/actuator/refresh")) {
            filterChain.doFilter(servletRequest, servletResponse);
            return;
        }
        //使用HttpServletRequest包装原始请求达到修改post请求中body内容的目的
        CustometRequestWrapper requestWrapper = new CustometRequestWrapper(httpServletRequest);
        filterChain.doFilter(requestWrapper, servletResponse);
    }

    @Override
    public void destroy() {

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值