本公司配置数据的管理是通过mysql进行配置管理,因为已经搭建好了,所以自己动手重新搭建一遍,熟悉整个流程。有关项目源码后期会补上github地址
微服务要实现集中管理微服务配置、 不同环境不同配置 、 运行期间也可动态调整 、 配置修改后可以自动更新的需求 ,spring cloud config同时满足了以上要求。
一、项目搭建
本次主要用三个微服务
(1)eureka-server: 7001 注册中心
(2)config-server : 5001 配置中心
(3)product-server : 8001 商品微服务
1、eureka-server注册中心
注册中心很简单,这里不在重复些,注册中心没有变化。可以看之前写的博客 : springcloud(3)---eureka服务注册与发现
2、配置中心微服务
1、pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<!--服务中心jar包-->
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-eureka-client</artifactid>
</dependency>
<!--配置中心jar包-->
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-config-server</artifactid>
</dependency>
<!--连接msql数据库相关jar包-->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-jdbc</artifactid>
</dependency>
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version> 5.1 . 21 </version>
</dependency>
|
2、application.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#服务名称
server:
port: 5001
#连接配置信息
spring:
application:
name: config-server-jdbc
profiles:
active: jdbc
cloud:
config:
server:
default -label: dev
jdbc:
sql: select akey , avalue from config_server where application=? and aprofile=? and label=?
#####################################################################################################
# mysql 属性配置
datasource:
driver- class -name: com.mysql.jdbc.driver
url: jdbc:mysql: //127.0.0.1:3306/test
username: root
password: root
#####################################################################################################
#指定注册中心地址
eureka:
client:
serviceurl:
defaultzone: http: //localhost:7001/eureka/
|
这里主要讲下连接配置信息
(1) spring.profiles.active=jdbc ,自动实现jdbcenvironmentrepository。
(2)sql语句自定义,否则会默认为“select key, value from properties where application=? and profile=? and label=?”,具体可以参考 jdbcenvironmentrepository 实现。
(3)本人数据库建表为config_server,由于key,value和profile是mysql关键字,所以我都在最前面加了a。当然表名字段名都可以自定义。
(4) {application} 对应客户端的"spring.application.name"属性;
{aprofile} 对应客户端的 "spring.profiles.active"属性(逗号分隔的列表); 和
{label} 对应服务端属性,这个属性能标示一组配置文件的版本.
(5)只要 select出来是两个字段 ,框架会 自动包装到environment的map<key,value> 。
3、mysql数据
4、springboot启动类
添加 @enableconfigserver 注解
1
2
3
4
5
6
7
8
|
@springbootapplication
@enableconfigserver
public class configserverapplication {
public static void main(string[] args) {
springapplication.run(configserverapplication. class , args);
}
}
|
3、product-service微服务
1、pom.xml
1
2
3
4
5
6
7
8
9
10
|
<!--服务中心jar-->
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-eureka-client</artifactid>
</dependency>
<!--配置中心客户端jar-->
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-config-client</artifactid>
|
2、bootstrap.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#指定注册中心地址
eureka:
client:
serviceurl:
defaultzone: http: //localhost:7001/eureka/
#服务的名称
spring:
application:
name: product-service
#指定从哪个配置中心读取
cloud:
config:
discovery:
service-id: config-server-jdbc
enabled: true
profile: dev
label: dev
server:
port: 8001
|
这里为什么用bootstrap.yml而不用application.yml,是因为若application.yml 和bootstrap.yml 在同一目录下,
则 bootstrap.yml 的加载顺序要高于application.yml ,即bootstrap.yml 会优先被加载。
为何需要把 config server 的信息放在 bootstrap.yml 里?
当使用 spring cloud 的时候,配置信息一般是从 config server 加载的,为了取得配置信息(比如密码等),你需要一些提早的或引导配置。
因此,把 config server 信息放在 bootstrap.yml,用来加载真正需要的配置信息。
3、configcontroller类(测试用)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@restcontroller
@requestmapping ( "/api/v1/product" )
public class configcontroller {
@value ( "${item_url}" )
private string url;
/**
* 输出url
*/
@requestmapping ( "url" )
public void list(){
system.out.println(url);
}
|
4、测试
通过访问:http://localhost:8001/api/v1/product/url 进入断点。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/qdhxhz/p/9624386.html