diff --git a/pictures/bus-refresh.png b/pictures/bus-refresh.png new file mode 100644 index 0000000..651738d Binary files /dev/null and b/pictures/bus-refresh.png differ diff --git a/pictures/programmer-CGLIB.png b/pictures/programmer-CGLIB.png new file mode 100644 index 0000000..3347448 Binary files /dev/null and b/pictures/programmer-CGLIB.png differ diff --git a/pictures/spring-cloud-bus-exchange.png b/pictures/spring-cloud-bus-exchange.png new file mode 100644 index 0000000..e8b5ea8 Binary files /dev/null and b/pictures/spring-cloud-bus-exchange.png differ diff --git a/pictures/spring-cloud-bus-queue.png b/pictures/spring-cloud-bus-queue.png new file mode 100644 index 0000000..cc075ff Binary files /dev/null and b/pictures/spring-cloud-bus-queue.png differ diff --git a/spring-cloud/spring-cloud-config/README.md b/spring-cloud/spring-cloud-config/README.md new file mode 100644 index 0000000..b2e6b1e --- /dev/null +++ b/spring-cloud/spring-cloud-config/README.md @@ -0,0 +1,32 @@ +配置中心拉取git配置文件: +```$xslt +[on(6)-127.0.0.1] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: file:/D:/git-config/spring-cloud/spring-cloud-test-config/application.yml +[nio-8010-exec-2] pClientConfigurableHttpConnectionFactoryx : No custom http config found for URL: https://github.com/heibaiying/spring-samples-for-all/info/refs?service=git-upload-pack +[nio-8010-exec-2] o.s.cloud.commons.util.InetUtils : Cannot determine local hostname +[nio-8010-exec-2] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: file:/D:/git-config/spring-cloud/spring-cloud-test-config/application-dev.yml +[nio-8010-exec-2] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: file:/D:/git-config/spring-cloud/spring-cloud-test-config/application.yml +``` + +每次启动时候都会去注册中心拉取最新的代码,但是已经启动的项目是不会热更新的 +```$xslt +2019-01-17 13:35:14.986 INFO 4448 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8020/ +2019-01-17 13:35:20.910 INFO 4448 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=config-client, profiles=[dev], label=master, version=50dcfb85cd751e4f28761cd6bad84c1f73034002, state=null +``` + +消息总线 +```$xslt +2019-01-17 13:37:50.998 INFO 4448 --- [e0bL-TWAMhWg-19] o.s.a.r.c.CachingConnectionFactory : Created new connection: rabbitConnectionFactory#496c6d94:22/SimpleConnection@185d85d2 [delegate=amqp://guest@127.0.0.1:5672/, localPort= 63713] +2019-01-17 13:37:51.015 INFO 4448 --- [e0bL-TWAMhWg-19] o.s.amqp.rabbit.core.RabbitAdmin : Auto-declaring a non-durable, auto-delete, or exclusive Queue (springCloudBus.anonymous.iY4TIIi9TSe0bL-TWAMhWg) durable:false, auto-delete:true, exclusive:true. It will be redeclared if the broker stops and is restarted while the connection factory is alive, but all messages will be lost. +``` + +刷新应用上下文,热更新 + +```$xslt +Attempting to connect to: [127.0.0.1:5672] +Created new connection: rabbitConnectionFactory.publisher#b00f2d6:0/SimpleConnection@403c0406 [delegate=amqp://guest@127.0.0.1:5672/, localPort= 62748] +Fetching config from server at : http://DESKTOP-8JGSFLJ:8020/ +Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@62e12f66 +``` + + +http://localhost:8030/actuator/bus-refresh diff --git a/spring-cloud/spring-cloud-config/client/src/main/java/com/heibaiying/config/client/ClientApplication.java b/spring-cloud/spring-cloud-config/client/src/main/java/com/heibaiying/config/client/ClientApplication.java deleted file mode 100644 index 26b4a14..0000000 --- a/spring-cloud/spring-cloud-config/client/src/main/java/com/heibaiying/config/client/ClientApplication.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.heibaiying.config.client; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class ClientApplication { - - public static void main(String[] args) { - SpringApplication.run(ClientApplication.class, args); - } - -} - diff --git a/spring-cloud/spring-cloud-config/client/src/main/resources/application.yml b/spring-cloud/spring-cloud-config/client/src/main/resources/application.yml deleted file mode 100644 index e69de29..0000000 diff --git a/spring-cloud/spring-cloud-config/config-client/pom.xml b/spring-cloud/spring-cloud-config/config-client/pom.xml new file mode 100644 index 0000000..be0c39b --- /dev/null +++ b/spring-cloud/spring-cloud-config/config-client/pom.xml @@ -0,0 +1,52 @@ + + + 4.0.0 + + + com.heibaiying.config + spring-cloud-config + 0.0.1-SNAPSHOT + + + config-client + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.cloud + spring-cloud-starter-config + + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + + org.springframework.cloud + spring-cloud-starter-bus-amqp + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-cloud/spring-cloud-config/config-client/src/main/java/com/heibaiying/configclient/ConfigClientApplication.java b/spring-cloud/spring-cloud-config/config-client/src/main/java/com/heibaiying/configclient/ConfigClientApplication.java new file mode 100644 index 0000000..4b0ef35 --- /dev/null +++ b/spring-cloud/spring-cloud-config/config-client/src/main/java/com/heibaiying/configclient/ConfigClientApplication.java @@ -0,0 +1,18 @@ +package com.heibaiying.configclient; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@EnableDiscoveryClient +@RestController +public class ConfigClientApplication { + + public static void main(String[] args) { + SpringApplication.run(ConfigClientApplication.class, args); + } + +} + diff --git a/spring-cloud/spring-cloud-config/server/src/main/java/com/heibaiying/config/server/config/Programmer.java b/spring-cloud/spring-cloud-config/config-client/src/main/java/com/heibaiying/configclient/config/Programmer.java similarity index 74% rename from spring-cloud/spring-cloud-config/server/src/main/java/com/heibaiying/config/server/config/Programmer.java rename to spring-cloud/spring-cloud-config/config-client/src/main/java/com/heibaiying/configclient/config/Programmer.java index 571e21e..f566136 100644 --- a/spring-cloud/spring-cloud-config/server/src/main/java/com/heibaiying/config/server/config/Programmer.java +++ b/spring-cloud/spring-cloud-config/config-client/src/main/java/com/heibaiying/configclient/config/Programmer.java @@ -1,8 +1,9 @@ -package com.heibaiying.config.server.config; +package com.heibaiying.configclient.config; import lombok.Data; import lombok.ToString; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Component; import java.util.Date; @@ -13,7 +14,8 @@ import java.util.Map; @ConfigurationProperties(prefix = "programmer") @Data @ToString -public class Programmer { +@RefreshScope // 定义下面配置热刷新范围 +public class Programmer{ private String name; private int age; diff --git a/spring-cloud/spring-cloud-config/server/src/main/java/com/heibaiying/config/server/config/School.java b/spring-cloud/spring-cloud-config/config-client/src/main/java/com/heibaiying/configclient/config/School.java similarity index 75% rename from spring-cloud/spring-cloud-config/server/src/main/java/com/heibaiying/config/server/config/School.java rename to spring-cloud/spring-cloud-config/config-client/src/main/java/com/heibaiying/configclient/config/School.java index 6f45d6d..651e141 100644 --- a/spring-cloud/spring-cloud-config/server/src/main/java/com/heibaiying/config/server/config/School.java +++ b/spring-cloud/spring-cloud-config/config-client/src/main/java/com/heibaiying/configclient/config/School.java @@ -1,4 +1,4 @@ -package com.heibaiying.config.server.config; +package com.heibaiying.configclient.config; import lombok.Data; diff --git a/spring-cloud/spring-cloud-config/server/src/main/java/com/heibaiying/config/server/controller/ConfigController.java b/spring-cloud/spring-cloud-config/config-client/src/main/java/com/heibaiying/configclient/controller/ConfigController.java similarity index 67% rename from spring-cloud/spring-cloud-config/server/src/main/java/com/heibaiying/config/server/controller/ConfigController.java rename to spring-cloud/spring-cloud-config/config-client/src/main/java/com/heibaiying/configclient/controller/ConfigController.java index 28aee19..fcca60b 100644 --- a/spring-cloud/spring-cloud-config/server/src/main/java/com/heibaiying/config/server/controller/ConfigController.java +++ b/spring-cloud/spring-cloud-config/config-client/src/main/java/com/heibaiying/configclient/controller/ConfigController.java @@ -1,6 +1,7 @@ -package com.heibaiying.config.server.controller; +package com.heibaiying.configclient.controller; -import com.heibaiying.config.server.config.Programmer; + +import com.heibaiying.configclient.config.Programmer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -16,7 +17,7 @@ public class ConfigController { private Programmer programmer; @RequestMapping("programmer") - public Programmer getProgrammer(){ - return programmer; + public String getProgrammer() { + return programmer.toString(); } } diff --git a/spring-cloud/spring-cloud-config/config-client/src/main/resources/bootstrap.yml b/spring-cloud/spring-cloud-config/config-client/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..80f2ee8 --- /dev/null +++ b/spring-cloud/spring-cloud-config/config-client/src/main/resources/bootstrap.yml @@ -0,0 +1,47 @@ +server: + port: 8030 +spring: + application: + name: config-client + cloud: + config: + discovery: + enabled: true + # 这里我们指定的是服务名 如果配置中心有多个,且用同一个服务名,我们的客户端拉取配置的时候是负载均衡的,配置中心也就是高可用 + serviceId: config-server + # 指定分支 + label: master + # 指定环境 + profile: dev + bus: + #开启总线 + enabled: true + # 打开ack跟踪的标志(默认关闭) + trace: + enabled: true + # 使用bus实现热更新 + rabbitmq: + host: 127.0.0.1 + port: 5672 + username: guest + password: guest + + +# 注意指定注册中心的配置不要从公共配置中拉取,要在本地的配置文件中指定 +# 因为我们必须要先从注册中心去获取可用的配置中心, 从配置中心去拉取配置 +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8010/eureka/ + +# 暴露热刷新的端点 +#management: +# endpoint: +# bus-refresh: +# enabled: true +management: + endpoints: + web: + exposure: + include: bus-refresh + diff --git a/spring-cloud/spring-cloud-config/client/src/test/java/com/heibaiying/config/client/ClientApplicationTests.java b/spring-cloud/spring-cloud-config/config-client/src/test/java/com/heibaiying/configclient/ConfigClientApplicationTests.java similarity index 77% rename from spring-cloud/spring-cloud-config/client/src/test/java/com/heibaiying/config/client/ClientApplicationTests.java rename to spring-cloud/spring-cloud-config/config-client/src/test/java/com/heibaiying/configclient/ConfigClientApplicationTests.java index 037c3c0..4318288 100644 --- a/spring-cloud/spring-cloud-config/client/src/test/java/com/heibaiying/config/client/ClientApplicationTests.java +++ b/spring-cloud/spring-cloud-config/config-client/src/test/java/com/heibaiying/configclient/ConfigClientApplicationTests.java @@ -1,4 +1,4 @@ -package com.heibaiying.config.client; +package com.heibaiying.configclient; import org.junit.Test; import org.junit.runner.RunWith; @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest -public class ClientApplicationTests { +public class ConfigClientApplicationTests { @Test public void contextLoads() { diff --git a/spring-cloud/spring-cloud-config/server/pom.xml b/spring-cloud/spring-cloud-config/config-server/pom.xml similarity index 82% rename from spring-cloud/spring-cloud-config/server/pom.xml rename to spring-cloud/spring-cloud-config/config-server/pom.xml index ae998d2..700e2c8 100644 --- a/spring-cloud/spring-cloud-config/server/pom.xml +++ b/spring-cloud/spring-cloud-config/config-server/pom.xml @@ -9,9 +9,7 @@ 0.0.1-SNAPSHOT - - server - + config-server @@ -22,9 +20,12 @@ org.springframework.cloud spring-cloud-config-server + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + - diff --git a/spring-cloud/spring-cloud-config/server/src/main/java/com/heibaiying/config/server/ServerApplication.java b/spring-cloud/spring-cloud-config/config-server/src/main/java/com/heibaiying/configserver/ConfigServerApplication.java similarity index 54% rename from spring-cloud/spring-cloud-config/server/src/main/java/com/heibaiying/config/server/ServerApplication.java rename to spring-cloud/spring-cloud-config/config-server/src/main/java/com/heibaiying/configserver/ConfigServerApplication.java index c031051..4b34e6a 100644 --- a/spring-cloud/spring-cloud-config/server/src/main/java/com/heibaiying/config/server/ServerApplication.java +++ b/spring-cloud/spring-cloud-config/config-server/src/main/java/com/heibaiying/configserver/ConfigServerApplication.java @@ -1,15 +1,17 @@ -package com.heibaiying.config.server; +package com.heibaiying.configserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.config.server.EnableConfigServer; @SpringBootApplication +@EnableDiscoveryClient @EnableConfigServer -public class ServerApplication { +public class ConfigServerApplication { public static void main(String[] args) { - SpringApplication.run(ServerApplication.class, args); + SpringApplication.run(ConfigServerApplication.class, args); } } diff --git a/spring-cloud/spring-cloud-config/config-server/src/main/resources/application.yml b/spring-cloud/spring-cloud-config/config-server/src/main/resources/application.yml new file mode 100644 index 0000000..a6a92dd --- /dev/null +++ b/spring-cloud/spring-cloud-config/config-server/src/main/resources/application.yml @@ -0,0 +1,26 @@ +server: + port: 8020 +# 指定注册中心地址 +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8010/eureka/ +# 指定服务命名 +spring: + application: + name: config-server + cloud: + config: + server: + git: + uri: https://github.com/heibaiying/spring-samples-for-all/ + search-paths: spring-cloud/spring-cloud-test-config/ + # 如果代码仓库是公开的 则 不需要设置用户名和密码 + username: + password: + # 指定拉取的配置文件的存放的位置,配置文件最后存储的目录为 basedir + search-paths + # 这个地方还需要注意的是,配置文件的仓库最好只放配置文件 + # 因为配置中心不仅会拉取search-paths下的文件,还会把uri指定仓库中的全部文件拉取到basedir下 + basedir: D:\git-config + # 指定分支 + label: master \ No newline at end of file diff --git a/spring-cloud/spring-cloud-config/config-server/src/test/java/com/heibaiying/configserver/ConfigServerApplicationTests.java b/spring-cloud/spring-cloud-config/config-server/src/test/java/com/heibaiying/configserver/ConfigServerApplicationTests.java new file mode 100644 index 0000000..420080a --- /dev/null +++ b/spring-cloud/spring-cloud-config/config-server/src/test/java/com/heibaiying/configserver/ConfigServerApplicationTests.java @@ -0,0 +1,17 @@ +package com.heibaiying.configserver; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ConfigServerApplicationTests { + + @Test + public void contextLoads() { + } + +} + diff --git a/spring-cloud/spring-cloud-config/client/pom.xml b/spring-cloud/spring-cloud-config/eureka/pom.xml similarity index 76% rename from spring-cloud/spring-cloud-config/client/pom.xml rename to spring-cloud/spring-cloud-config/eureka/pom.xml index 74b3f0d..58907a9 100644 --- a/spring-cloud/spring-cloud-config/client/pom.xml +++ b/spring-cloud/spring-cloud-config/eureka/pom.xml @@ -9,16 +9,13 @@ 0.0.1-SNAPSHOT - client + eureka + - - org.springframework.boot - spring-boot-starter-web - org.springframework.cloud - spring-cloud-starter-config + spring-cloud-starter-netflix-eureka-server diff --git a/spring-cloud/spring-cloud-config/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java b/spring-cloud/spring-cloud-config/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java new file mode 100644 index 0000000..bd54938 --- /dev/null +++ b/spring-cloud/spring-cloud-config/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java @@ -0,0 +1,16 @@ +package com.heibaiying.eureka; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + +@SpringBootApplication +@EnableEurekaServer +public class EurekaApplication { + + public static void main(String[] args) { + SpringApplication.run(EurekaApplication.class, args); + } + +} + diff --git a/spring-cloud/spring-cloud-config/eureka/src/main/resources/application.yml b/spring-cloud/spring-cloud-config/eureka/src/main/resources/application.yml new file mode 100644 index 0000000..817356d --- /dev/null +++ b/spring-cloud/spring-cloud-config/eureka/src/main/resources/application.yml @@ -0,0 +1,12 @@ +server: + port: 8010 +eureka: + instance: + hostname: localhost + client: + # 设置为false,代表不向注册中心注册自己 + register-with-eureka: false + # 注册中心主要用于维护服务,并不需要检索服务,所以设置为false + fetch-registry: false + serviceUrl: + defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ \ No newline at end of file diff --git a/spring-cloud/spring-cloud-config/server/src/test/java/com/heibaiying/config/server/ServerApplicationTests.java b/spring-cloud/spring-cloud-config/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java similarity index 78% rename from spring-cloud/spring-cloud-config/server/src/test/java/com/heibaiying/config/server/ServerApplicationTests.java rename to spring-cloud/spring-cloud-config/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java index 3dedeb6..b3e2d73 100644 --- a/spring-cloud/spring-cloud-config/server/src/test/java/com/heibaiying/config/server/ServerApplicationTests.java +++ b/spring-cloud/spring-cloud-config/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java @@ -1,4 +1,4 @@ -package com.heibaiying.config.server; +package com.heibaiying.eureka; import org.junit.Test; import org.junit.runner.RunWith; @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest -public class ServerApplicationTests { +public class EurekaApplicationTests { @Test public void contextLoads() { diff --git a/spring-cloud/spring-cloud-config/pom.xml b/spring-cloud/spring-cloud-config/pom.xml index 12468e8..c304789 100644 --- a/spring-cloud/spring-cloud-config/pom.xml +++ b/spring-cloud/spring-cloud-config/pom.xml @@ -7,10 +7,16 @@ org.springframework.boot spring-boot-starter-parent - 2.1.2.RELEASE + 2.0.8.RELEASE + + config-client + config-server + eureka + + com.heibaiying.config spring-cloud-config 0.0.1-SNAPSHOT diff --git a/spring-cloud/spring-cloud-config/server/src/main/resources/application.yml b/spring-cloud/spring-cloud-config/server/src/main/resources/application.yml deleted file mode 100644 index 92e6380..0000000 --- a/spring-cloud/spring-cloud-config/server/src/main/resources/application.yml +++ /dev/null @@ -1,15 +0,0 @@ -server: - port: 8010 -spring: - application: - name: config-server - cloud: - config: - server: - git: - uri: https://github.com/heibaiying/spring-samples-for-all/ - search-paths: spring-cloud/spring-cloud-test-config/ - # 如果代码仓库是公开的 则 不需要设置用户名和密码 - username: - password: - label: master \ No newline at end of file