首先說明版本,我使用的spring cloud alibaba是較新的版本,遇到一些問題網上很難找到對應的解答。
版本:
spring boot、spring cloud alibaba以及使用的依賴的版本(可以略過)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<alibaba-spring-cloud.version>2.2.0.RELEASE</alibaba-spring-cloud.version>
<discovery.version>6.0.1</discovery.version>
<alibaba-nacos.version>2.1.0.RELEASE</alibaba-nacos.version>
<spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
<spring.redission.version>3.12.5</spring.redission.version>
<swagger.version>2.9.2</swagger.version>
<spring-boot.mybatis>2.1.2</spring-boot.mybatis>
<alibaba.druid>1.0.16</alibaba.druid>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba-spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-plugin-starter-nacos</artifactId>
<version>${discovery.version}</version>
</dependency>
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-plugin-strategy-starter-service</artifactId>
<version>${discovery.version}</version>
</dependency>
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-plugin-config-center-starter-nacos</artifactId>
<version>${discovery.version}</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>${spring.redission.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${spring-boot.mybatis}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${alibaba.druid}</version>
</dependency>
</dependencies>
</dependencyManagement>
目標1:使用nacos實現讀取配置
nacos和服務相關配置:
server:
port: 41111
servlet:
context-path: /customer
spring:
application:
name: yuyang-customer
cloud:
nacos:
config:
group: applications
file-extension: yml
encode: UTF-8
refresh-enabled: true
config-retry-time: 3
profiles:
active: dev
接下來我們看一下nacos配置中心的配置文件有哪些
通過nacos配置讀取規則=dataId-group.後綴的方式,我們知道這個配置是可以被讀取到的,下圖可以說明配置是正常可以讀取到的
總結:nacos作爲配置中心讀取配置,規則還是比較簡單的。那麼問題來了:一般我們會將多個服務的公共配置存放到一個配置項裏,作爲多個服務公共的配置。
目標2:使用nacos實現多配值文件讀取
首先我們先在nacos控制檯添加一個公共的配置
你會發現有個比較不太和諧的groupId:yuyang.yml。是的沒錯,就是這麼噁心,不這麼寫,沒有辦法讀取到這個配置。這就是因爲shared-configs裏的dataId要求必須加後綴造成的。
配置裏的內容,都是些公共配置:
feign:
httpclient:
enabled: false
okhttp:
enabled: true
sentinel:
enabled: true
spring:
application:
strategy:
sentinel:
enabled: true
cloud:
sentinel:
enabled: true
transport:
dashboard: xxxxx:xxx
heartbeat-interval-ms: 5000
port: 32223
log:
dir: \logs\sentinel\csp
switch-pid: true
redis:
host: www.javaavaj.com
lettuce:
pool:
max-active: 50
max-idle: 11
max-wait: 10000
password: yuyang
port: 31111
timeout: 3000
datasource:
url: jdbc:mysql://xxxxx:xxx/scyuyang?useSSL=false&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&autoReconnect=true
username: root
password: yuyang
maxActive: 100
initialSize: 2
minIdle: 8
maxWait: 60000
testOnBorrow: false
testWhileIdle: true
testOnReturn: false
management:
endpoints:
web:
exposure:
include: '*'
nacos中已經提供了共享配置的配置(有點繞),我們修改一下服務裏面的配置:
server:
port: 41111
servlet:
context-path: /customer
spring:
application:
name: yuyang-customer
cloud:
nacos:
config:
group: applications
file-extension: yml
encode: UTF-8
refresh-enabled: true
config-retry-time: 3
# 老版本shared-dataids 在這裏已經被廢棄
shared-configs[0]:
# data-id要求必須有後綴名(這個要求很正常,但是配合配置中心一點也不好用)
data-id: yuyang.yml
group: applications
refresh: true
profiles:
active: dev
shared-configs 就是我們要配置的屬性,我們來看一下這個配置項的源碼類型,更清晰一些
@ConfigurationProperties("spring.cloud.nacos.config")
public class NacosConfigProperties {
public static final String PREFIX = "spring.cloud.nacos.config";
public static final String COMMAS = ",";
public static final String SEPARATOR = "[,]";
private static final Pattern PATTERN = Pattern.compile("-(\\w)");
private static final Logger log = LoggerFactory.getLogger(NacosConfigProperties.class);
@Autowired
@JsonIgnore
private Environment environment;
private String serverAddr;
private String encode;
private String group = "DEFAULT_GROUP";
private String prefix;
private String fileExtension = "properties";
private int timeout = 3000;
private String maxRetry;
private String configLongPollTimeout;
private String configRetryTime;
private boolean enableRemoteSyncConfig = false;
private String endpoint;
private String namespace;
private String accessKey;
private String secretKey;
private String contextPath;
private String clusterName;
private String name;
//就是他
private List<NacosConfigProperties.Config> sharedConfigs;
private List<NacosConfigProperties.Config> extensionConfigs;
......
//靜態內部類
public static class Config {
private String dataId;
private String group;
//新版本新增的可以對共享的文件進行監聽配置刷新
private boolean refresh;
......
啓動項目:
再看一下nacos這個公共配置是否被監聽到了
ok,以上就是nacos 共享配置的配置,一定要注意的是一下幾點:
- 項目中shared-configs的配置方式
- nacos控制檯中公共配置的dataId=shared-configs.dataId。會帶後綴名!!