Spring Cloud Config分布式配置服务由服务器端和客户端共同组成,服务端提供配置信息的存储管理,对配置进行统一的管理,客户端读取配置信息
为了能统一的管理配置文件,我们需要先把配置文件提交到git上去(也可以用svn),首先创建如下3个配置文件
jdbc-dev.properties
jdbc-test.properties
jdbc-production.properties
三个文件里面的内容分别是:
driverClassName=com.mysql.jdbc.Driver
user=root
password=123
url=jdbc:mysql:///db_user_dev
driverClassName=com.mysql.jdbc.Driver
user=root
password=123
url=jdbc:mysql:///db_user_test
driverClassName=com.mysql.jdbc.Driver
user=root
password=123
url=jdbc:mysql:///db_user_production
然后,commit, 并且push到git仓库master分支 http://192.168.1.145/demo/spring-cloud-config-repo.git (需要提前创建一个project)
服务端示例代码:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config</artifactId>
<version>1.1.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
package com.pp.config.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
public static void main( String[] args ) {
SpringApplication.run(ConfigServer.class, args);
}
}
application.properties 配置
server.port=9955
spring.cloud.config.server.git.uri=http://192.168.1.145/demo/spring-cloud-config-repo.git
然后,启动应用
访问 http://127.0.0.1:9955/{application}/{profile}/{label},比如:
http://127.0.0.1:9955/jdbc/dev/master 可以拿到jdbc-dev.properties master分支对应文件的值
http://127.0.0.1:9955/jdbc/dev/develop可以拿到jdbc-dev.properties develop分支对应文件的值 (前提是要有这个分支)
http://127.0.0.1:9955/jdbc/test/master 可以拿到jdbc-test.properties master分支对应文件的值
http://127.0.0.1:9955/jdbc/production/master 可以拿到jdbc-production.properties master分支对应文件的值
{application} 匹配客户端的 spring.application.name
{profile} 匹配客户端的 spring.active.profiles
{label} 如果是git,则匹配的是分支,如果是svn匹配 trunk/branchs等.
客户端示例代码:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config</artifactId>
<version>1.1.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
</dependencies>
package com.pp.config.client;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ConfigClient {
@Value("${driverClassName}")
private String driverClassName;
@Value("${user}")
private String user;
@Value("${password}")
private String password;
@Value("${url}")
private String url;
@PostConstruct
public void show() {
System.out.println("driverClassName=" + driverClassName);
System.out.println("user=" + user);
System.out.println("password=" + password);
System.out.println("url=" + url);
}
public static void main( String[] args ) {
SpringApplication.run(ConfigClient.class, args);
}
}
application.properties 配置文件的内容
server.port=9966
bootstrap.properties 配置文件的内容
spring.cloud.config.name=jdbc
spring.cloud.config.profile=test
spring.cloud.config.label=master
spring.cloud.config.uri=http://127.0.0.1:9955
启动之后,就会发现show()方法已经输出了各个配置的值。