Spring Cloud快速入門(7),基於jdbc實現Config配置中心

配置中心介紹

每個Spring Boot都有個application.yml配置文件,裡面有很多項配置,一旦系統發展到過大時,會大大增加維護成本,所以spring cloud 提供了集中化的配置中心為每個微服務服務。

創建工程

創建sales-config-server,繼承sales-parent。

  • 此配置中心將配置都存儲於mysql數據庫,所以在mysql服務器上創建一個數據庫config,創建表properties
<code>CREATE TABLE `properties` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(50) DEFAULT NULL,
`value` varchar(500) DEFAULT NULL,
`application` varchar(50) DEFAULT NULL,
`profile` varchar(50) DEFAULT NULL,
`label` varchar(50) DEFAULT NULL,
`remark` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/<code>
  • maven依賴
<code><dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-web/<artifactid>
/<dependency>
<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>

<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-jdbc/<artifactid>
/<dependency>
<dependency>

<groupid>mysql/<groupid>
<artifactid>mysql-connector-java/<artifactid>
/<dependency>/<code>
  • 配置application.yml
<code>server:
port: ${PORT:8099}
spring:
application:
name: sales-config-server
cloud:
config:
server:
default-label: dev
jdbc:
sql: select `key`,`value` from properties where `application`=? and `profile`=? and `label`=?
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.0.113:3306/config?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
profiles:
active: jdbc

eureka:
client:
registerWithEureka: true #服務註冊開關
fetchRegistry: true #服務發現開關
serviceUrl: #Eureka客戶端與Eureka服務端進行交互的地址,多箇中間用逗號分隔
defaultZone: http://localhost:8090/eureka/
instance:
prefer-ip-address: true #將自己的ip地址註冊到Eureka服務中
ip-address: ${IP_ADDRESS:127.0.0.1}
instance-id: ${spring.application.name}:${server.port} #指定實例id
/<code>
  • 創建啟動類
<code>@SpringBootApplication
@EnableConfigServer // 開啟註冊中心服務

@EnableDiscoveryClient
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class,args);
}
}/<code>
  • config庫初始化數據
Spring Cloud快速入門(7),基於jdbc實現Config配置中心

使用配置中心

這次我們使用產品服務做測試,注入docker_address配置項,然後再讀出來。

  • 添加maven依賴
<code><dependency>
\t\t<groupid>org.springframework.cloud/<groupid>
\t\t\t<artifactid>spring-cloud-config-client/<artifactid>
/<dependency>
<dependency>
\t<groupid>org.springframework.boot/<groupid>
\t\t<artifactid>spring-boot-starter-actuator/<artifactid>
/<dependency>/<code>
  • 增加bootstrap.yml
<code>spring:
cloud:
config:
profile: dev
label: dev
name: sales-product-service
uri: http://localhost:8099 #註冊中心服務地址/<code>
  • 修改ProductController
<code>// 注入配置項
// config server動配置
@Value("${docker_address}")
private String docker_address;


@GetMapping("/get/{id}")
public CommonResult getById(@PathVariable("id") Long id) {
// 打印配置內容

System.out.println("docker_address:" + docker_address);
System.out.println("/product/get/" + id + ", port:" + port);
List<product> products = productList.stream()
.filter(product -> product.getId().equals(id))
.collect(Collectors.toList());
if (!CollectionUtils.isEmpty(products)) {
return CommonResult.success(products.get(0));
}
return CommonResult.failed("未找到指定產品");
}/<product>/<code>
  • 啟動測試

先啟動註冊中心服務,再啟動產品服務,訪問訂單接口獲取訂單信息,即可調用產品服務。

配置變更

通過服務獲取其他方式修改properties表的配置後,如果不重啟服務,配置不會生效,手工刷新的方法如下:

  • 修改bootstrap.yml
<code>spring:
cloud:
config:
profile: dev
label: dev
name: sales-product-service
uri: http://localhost:8099

#
management:
endpoints:
web:
exposure:
include: ["refresh"]
/<code>

啟動類上增加註解@RefreshScope

然後通過post http://localhost:8092/actuator/refresh來實現配置更新。


分享到:


相關文章: