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