spring cloud动态配置 自动更新哪些配置

Spring Cloud服务发现配置 - 简书
Spring Cloud服务发现配置
本篇主要介绍Spring Cloud Netflix的组件配置,包括Eurek,Fegin等。我们都知道Spring Cloud的服务发现一个三个角色(详细请见),如下图
EurekaRole.png
接下来我们按照这三个角色来介绍Netflix的组件配置(本篇介绍的配置基于Spring Boot 1.4.4.RELEASE版本)。
1、Eureka Server配置
新加一个Spring Boot工程,在pom文件中加入以下依赖
&dependencyManagement&
&dependencies&
&dependency&
&groupId&org.springframework.cloud&/groupId&
&artifactId&spring-cloud-dependencies&/artifactId&
&version&Brixton.SR5&/version&
&type&pom&/type&
&scope&import&/scope&
&/dependency&
&/dependencies&
&/dependencyManagement&
&dependency&
&groupId&org.springframework.cloud&/groupId&
&artifactId&spring-cloud-starter-eureka-server&/artifactId&
&/dependency&
application文件配置
//eureka server注册的name,唯一标识spring.application.name=eureka-server//eureka server服务的端口号server.port=1111
启动类,加入@EnableEurekaServer注解。
@EnableEurekaServer
@SpringBootApplication
public class ApplicationDemo
public static void main(String[] args)
SpringApplication.run(ApplicationDemo.class, args);
运行,访问 ,出现以下页面,则证明启动成功
EurekaServerC.png
如果想配置Eurek高可用集群,可以通过相互注册的方式来实现。本地启动,可以配置多个application,例如创建application-peer1和application-peer2。application-peer1配置如下
server.port=1111 eureka.instance.hostname= peer1spring.application.name=eureka-servereureka.client.serviceUrl.defaultZone=
application-peer2配置如下
server.port=1112 eureka.instance.hostname= peer2 spring.application.name=eureka-servereureka.client.serviceUrl.defaultZone=配本地host127.0.0.1 peer1 peer1
打包mvn install,分别启动peer1和peer2
java -jar eureka.jar --spring.profiles.active=peer1java -jar eureka.jar --spring.profiles.active=peer2
访问 ,即可看到两个实例相互注册。
EurekaServer.png
由于在线环境的发布脚步是统一的,可以采用只配置一个application,在多台机器上部署的方式,例如10.120.163.01和10.120.163.02两台机器。application配置如下
server.port=1111spring.application.name=eureka-servereureka.client.serviceUrl.defaultZone=
然后在01,02两台机器上分别运行这个服务,访问10.120.163.01:1111/ 即可看到Eureka页面。
2、服务者配置
服务者需要想Eureka注册自己的信息,首先要保证上面例子中Eurek Server的peer1和peer2正常运行。新加一个Spring Boot工程,在pom文件中加入以下依赖
&dependencyManagement&
&dependencies&
&dependency&
&groupId&org.springframework.cloud&/groupId&
&artifactId&spring-cloud-dependencies&/artifactId&
&version&Brixton.SR5&/version&
&type&pom&/type&
&scope&import&/scope&
&/dependency&
&/dependencies&
&/dependencyManagement&
&dependency&
&groupId&org.springframework.cloud&/groupId&
&artifactId&spring-cloud-starter-eureka&/artifactId&
&/dependency&
application文件配置
//eureka provider服务的端口号server.port=2222//eureka provider注册的name,唯一标识spring.application.name=eureka-provider//指定注册的Eureka Server地址eureka.client.serviceUrl.defaultZone=
对外提供index接口
@RestController
public class IndexController
@RequestMapping("/index")
public String index()
return "这里是Eureka Provider";
启动类,加入@EnableDiscoveryClient。
@EnableDiscoveryClient
@SpringBootApplication
public class ApplicationDemo
public static void main(String[] args)
SpringApplication.run(ApplicationDemo.class, args);
运行,即可在 看到注册信息。
Provider.png
3、消费者配置
首先要保证Eurek Server的peer1和peer2正常运行,eureka-provider正常运行,并注册到Eurek Server上。本节主要介绍Spring Cloud Feign客户端配置。新加一个Spring Boot工程,在pom文件中加入以下依赖
&dependencyManagement&
&dependencies&
&dependency&
&groupId&org.springframework.cloud&/groupId&
&artifactId&spring-cloud-dependencies&/artifactId&
&version&Brixton.SR5&/version&
&type&pom&/type&
&scope&import&/scope&
&/dependency&
&/dependencies&
&/dependencyManagement&
&dependency&
&groupId&org.springframework.cloud&/groupId&
&artifactId&spring-cloud-starter-eureka&/artifactId&
&/dependency&
&dependency&
&groupId&org.springframework.cloud&/groupId&
&artifactId&spring-cloud-starter-feign&/artifactId&
&/dependency&
application文件配置
//eureka provider服务的端口号server.port=3333//eureka consumer注册的name,唯一标识spring.application.name=eureka-consumer//指定注册的Eureka Server地址eureka.client.serviceUrl.defaultZone=
Feign客户端配置,消费上面提到的Provider服务。新建一个interface,配置三个属性。name为服务方的spring.application.name,RequestMapping为服务方提供的接口,fallback为降级策略。下面的配置:调用Porovider的/index接口;fallback为服务调用失败后会调用该类的方法,ConsumerFallback为本地类;
//Consumer接口
@FeignClient(name = "elements", fallback = ConsumerFallback.class)
public interface Consumer
@RequestMapping(value = "/index")
String index();
//ConsumerFallback类,实现Consumer接口
@Component
public class ConsumerFallback implements Consumer
public String index()
return "eureka feign客户端访问失败";
//测试类,注入这个bean,即可调用
@RestController
public class test
@Autowired
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String testeureka()
consumer.index();
启动类,加入@EnableDiscoveryClient和@EnableFeignClients。
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class ApplicationDemo
public static void main(String[] args)
SpringApplication.run(ApplicationDemo.class, args);
启动,访问 ,即可看到返回值“这里是Eureka Provider”。停掉Provider服务,再次访问,即可看到返回值"eureka feign客户端访问失败"。
更多详细的配置,请参考。博客分类:
本文是对/springcloud4/内容做些应用
1.bootstrap.properties文件内容
#因为config的相关配置会先于application.properties,
#而bootstrap.properties的加载也应该先于application.properties
#以下属性必须放在bootstrap.properties中,而且application.properties不能有
#必须与配置中心中的文件前缀一致
#spring.application.name=back-service
#server.port=2222
#eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
#spring.cloud.config.discovery.enabled=true
#spring.cloud.config.discovery.serviceId=config-server
#spring.cloud.config.profile=dev
2.application-dev.properties文件内容
# 开启健康检查(需要spring-boot-starter-actuator依赖)
eureka.client.healthcheck.enabled=true
# 续约更新时间间隔(默认30秒)
eureka.instance.lease-renewal-interval-in-seconds=30
# 续约到期时间(默认90秒)
eureka.instance.lease-expiration-duration-in-seconds=10
3.配置中心服务
可见,可以配置很多服务,服务名必须对应配置文件前缀
anhongyang125
浏览: 5195 次
来自: 沈阳
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'20222人阅读
springcloud(8)
springcloud(第二篇)springcloud config 修改配置
在git端修改配置后如何让客户端生效?
访问接口修改
post方式执行 会刷新env中的配置
如果配置信息已经注入到bean中,由于bean是单例的,不会去加载修改后的配置
需要通过post方式去执行,
需要通过application.properties中配置endpoints.restart.enabled=true启动指定的端口
弊端: 通过restart耗时比较长,因此就有了RefreshScope
RefreshScope
package com.lkl.springcloud.config.client
import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.cloud.context.config.annotation.RefreshScope
import org.springframework.context.annotation.ComponentScan
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@EnableAutoConfiguration
@ComponentScan
@RestController
@RefreshScope
public class Application {
@Value("${name:World!}") String name
@RequestMapping("/")
public String home(){
return "Hello " + name
public static void main(String[] args) {
SpringApplication.run(Application.class,args)
在执行refresh时会刷新bean中变量值。
ok ~ it’s work !
more about is
转载请注明
欢迎关注,您的肯定是对我最大的支持
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:557623次
积分:2983
积分:2983
排名:第12410名
原创:31篇
评论:88条
(1)(1)(1)(2)(9)(4)(6)(3)(4)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'{"name":"demo-config","profiles":["test"],"label":"master","version":"02d28adbf8a48d2edbf04ce61aa45a","propertySources":[{"name":"https://git.oschina.net/penghaozhong/demo.git/demo-config-repo/demo-config-test.properties","source":{"jdbc.url":"jdbc:mysql://localhost:3306/demo?characterEncoding=UTF-8","jdbc.username":"root","jdbc.driver":"com.mysql.jdbc.Driver","jdbc.password":"xxxxxx","jdbc.type":"mysql"}}]}& & 2. 配置读取配置文件&&在bootstrap.properties中添加读取配置管理的地址。3. 读取配置文件属性,这里采用@ConfigurationProperties/**&*&读取数据库配置文件&*&@author&penghaozhong&*&*/@ConfigurationProperties(prefix&=&DataSourceProperties.PREFIX,&ignoreUnknownFields&=&false)public&&class&&DataSourceProperties&{&&&&&&&&&&&&public&DataSourceProperties()&{&&&&&&&&super();&&&&}&&&&&&&&//对应配置文件里的配置键&&&&&&&&public&final&static&String&PREFIX="jdbc";&&&&&&&&&&&&&&&&&&&&private&String&&&&&&&&&&private&String&&&&&&&&&&private&String&&&&&&&&&&private&String&&&&&&&&&&private&String&&&&&&&&&&&&&&&&&public&String&getType()&{&&&&&&&&&&&&return&&&&&&&&&}&&&&&&&&public&void&setType(String&type)&{&&&&&&&&&&&&this.type&=&&&&&&&&&}&&&&&&&&public&String&getDriver()&{&&&&&&&&&&&&return&&&&&&&&&}&&&&&&&&public&void&setDriver(String&driver)&{&&&&&&&&&&&&this.driver&=&&&&&&&&&}&&&&&&&&public&String&getUrl()&{&&&&&&&&&&&&return&&&&&&&&&}&&&&&&&&public&void&setUrl(String&url)&{&&&&&&&&&&&&this.url&=&&&&&&&&&}&&&&&&&&public&String&getUsername()&{&&&&&&&&&&&&return&&&&&&&&&}&&&&&&&&public&void&setUsername(String&username)&{&&&&&&&&&&&&this.username&=&&&&&&&&&}&&&&&&&&public&String&getPassword()&{&&&&&&&&&&&&return&&&&&&&&&}&&&&&&&&public&void&setPassword(String&password)&{&&&&&&&&&&&&this.password&=&&&&&&&&&}}4. 配置mybatis@Configuration@MapperScan("com.phz.test.spring.cloud.demo")@EnableConfigurationProperties(DataSourceProperties.class)@EnableTransactionManagementpublic&class&MybatisDataSource&{&&&&//&mybaits&mapper&xml搜索路径&&&&private&final&static&String&MAPPERLOCATIONS&=&"classpath:/mappings/**/*.xml";&&&&private&final&static&String&CONFIGLOCATION&=&"classpath:/mybatis-config.xml";&&&&@Autowired&&&&private&&DataSourceProperties&dataSourceP&&&&private&DruidDataSource&datasource&=&null;&&&&@Bean(destroyMethod&=&"close")&&&&public&&DataSource&dataSource(){&&&&&&&&datasource&=&new&DruidDataSource();&&&&&&&&&&datasource.setUrl(dataSourceProperties.getUrl());&&&&&&&&datasource.setDbType(dataSourceProperties.getType());&&&&&&&&datasource.setDriverClassName(dataSourceProperties.getDriver());&&&&&&&&datasource.setUsername(dataSourceProperties.getUsername());&&&&&&&&datasource.setPassword(dataSourceProperties.getPassword());&&&&&&&&return&&&&&}&&&&@PreDestroy&&&&public&void&close()&{&&&&&&&&if(datasource&!=&null){&&&&&&&&&&&&datasource.close();&&&&&&&&}&&&&}&&&&@Bean&&&&public&SqlSessionFactory&sqlSessionFactoryBean()&throws&Exception&{&&&&&&&&SqlSessionFactoryBean&sqlSessionFactoryBean&=&new&SqlSessionFactoryBean();&&&&&&&&sqlSessionFactoryBean.setDataSource(dataSource());&&&&&&&&PathMatchingResourcePatternResolver&resolver&=&new&PathMatchingResourcePatternResolver();&&&&&&&&sqlSessionFactoryBean.setMapperLocations(resolver.getResources(MAPPERLOCATIONS));&&&&&&&&sqlSessionFactoryBean.setConfigLocation(resolver.getResource(CONFIGLOCATION));&&&&&&&&sqlSessionFactoryBean.setTypeAliasesPackage("com.phz.test.spring.cloud.demo.entity");&&&&&&&&return&sqlSessionFactoryBean.getObject();&&&&}&&&&@Bean&&&&public&PlatformTransactionManager&transactionManager()&{&&&&&&&&return&new&DataSourceTransactionManager(dataSource());&&&&}}22482人阅读
Spring(42)
本文使用 Spring Cloud 进行集中式配置管理,将以往的配置文件从项目中摘除后放到git 或svn中集中管理,并在需要变更的时候,可以通知到各应用程序,应用程序刷新配置不需要重启。
先套用下面这张图来看一下我们需要做的事情:
Git Repository 为存放配置的地方,当然你也可以选择SVN。
本文的Git 地址为:
接着我们创建多模块Maven工程,包括 sample-cloud-all 、 sample-cloud-configserver 、 sample-cloud-client ,整体结构如下图:
其中config-repo 为配置文件存放位置,并非一个Maven工程,只是为了便于本地修改和提交。
整体源码地址在Github上,所以本文就不贴代码了
至此,config-server 和 config-client 已经完成了,并且可以正常使用了。
再说一下基本原理:
git 上存放我们的远程配置文件
config-server 连接到 git
config-client 连接到config-server
当我们启动config-client 服务的时候,client 会通过连接的 config-server 拿到远程git 上面的配置文件,然后通过 Spring 加载到对象中。
那么,当我们修改了 git 上的远程配置文件后,如何在不重启 config-client 服务的情况下让项目中引用的配置信息更新呢?
首先,我们在 config-client 工程中添加依赖:
&org.springframework.boot&
&spring-boot-starter-actuator&
然后在需要自动更新配置变量的Java类上,使用注解 @RefreshScope 修饰。
以后当我们再更新git上面的配置文件后,在 config-client 端执行POST 请求
就可以更新刷新配置变量到内存中了。
如果我们 config-client 做的是分布式部署,岂不是要每一个机器都POST一下 /refresh 请求,这样显然不是最好的方法。
Spring Cloud Bus 为我们解决了这样的问题。
先看一下下面这张套用的图:
图中的 Cloud Bus 作为依赖库存在于每个App 中,并不是独立的服务。
官网源码地址
因为时间原因,对于 Spring Cloud Bus 请大家自行了解下。
Cloud Bus 需要依赖AMQP、Redis、Kafka 这样的组件做为代理才可以使用。
经过对Spring Cloud 的统一配置管理的了解和测试,本人发现这个做的并不好,特别是在分布式部署上虽然完全可以支持,但是总感觉使用起来比较麻烦。
个人还是推荐大家使用百度开源的 Disconf 进行集中化配置管理。而且这个目前也比较成熟,很多商用项目已经在使用。
目前 Spring Cloud 还并不成熟,所以大家慢慢学习和研究,博主也期待 Spring Cloud 真正强大的一天早一天到来。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3547349次
积分:22430
积分:22430
排名:第338名
原创:267篇
转载:40篇
译文:10篇
评论:926条
文章:28篇
阅读:987686
(10)(11)(6)(2)(1)(1)(1)(2)(10)(12)(10)(25)(17)(17)(10)(13)(21)(12)(5)(1)(9)(4)(6)(8)(2)(3)(2)(5)(2)(6)(4)(1)(1)(1)(12)(3)(2)(2)(1)(18)(7)(3)

我要回帖

更多关于 springcloud 统一配置 的文章

 

随机推荐