在使用之前如nacos环境搭建,mysql持久化配置等一系列问题就不再这里赘述了。下面直接上实战使用方法,演示使用的是单机环境此处我们以配置datasource来进行使用的案例演示。
引入相关依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
配置Nacos Server 地址
spring:
application:
name: business-order-service
cloud:
nacos:
username: xxx
password: xxxx
discovery:
server-addr: xxxx:8848
config:
server-addr: xxxxx:8848
file-extension: yaml
enabled: true
management:
endpoints:
web:
exposure:
include: '*'
这里要注意文件后缀是:yaml,而不是yml。
在nacos创建配置文件
配置文件的创建有着严格要求,并且nacos可支持profile粒度的配置:
spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以 dataid 为
s
p
r
i
n
g
.
a
p
p
l
i
c
a
t
i
o
n
.
n
a
m
e
.
{spring.application.name}.
spring.application.name.{file-exte nsio n:prop erties} 为前缀的基础配置,还加载了dataid为
s
p
r
i
n
g
.
a
p
p
l
i
c
a
t
i
o
n
.
n
a
m
e
−
{spring.application.name}-
spring.application.name−{profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的
s
p
r
i
n
g
.
p
r
o
f
i
l
e
s
.
a
c
t
i
v
e
这
个
配
置
项
来
配
置
。
下
面
演
示
我
们
就
采
用
{spring.profiles.active} 这个配置项来配置。下面演示我们就采用
spring.profiles.active这个配置项来配置。下面演示我们就采用{spring. app lication.name}-
p
r
o
f
i
l
e
.
{profile}.
profile.{file-extension:properties}的形式。切记需要在本地配置文件中切换到dev
编写本地java配置文件从nacos获取配置:
下面只是个简单的演示正常开发中我们不需要手动注册datasource,spring会直接获取从nacos拿到的信息帮我们完成bean的注入。一些我们自定义的数据可以通过@value @ConfigurationProperties等进行获取其实跟配置文件放在本地没有区别我们都是无感知的。
@Configuration
@RefreshScope
public class DataSourceConfig {
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Bean
public DataSource getDataSource() {
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName(driverClassName);
dataSourceBuilder.url(url);
dataSourceBuilder.username(username);
dataSourceBuilder.password(password);
return dataSourceBuilder.build();
}
}
更好的方案是使用@ConfigurationProperties注解一步到位
@RefreshScope
@Configuration
public class DataSourceConfig {
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
DataSource datasource() {
return new HikariDataSource();
}
}
这个时候启动服务没有异常发生,也可以通过单元测试来获取下值进行测试。这个过程就不进行展示了。
这样一个简单使用案例就完成了,这个只是单一环境的形式。当我们有多个服务,需要进行多环境配置是可以通过Group,namespace等方式来进行细粒度控制:
1.通过Data ID 和profiles实现
我们可以在配置文件中指定spring.profiles.active = **,然后在nocas客户端新建对应的 s p r i n g . c l o u d . n a c o s . c o n f i g . p r e f i x − {spring.cloud.nacos.config.prefix}- spring.cloud.nacos.config.prefix−{spring.profiles.active}.${spring.cloud.nacos.config.file-extension}配置来区分不同的环境。
2.通过Group实现
我们可以为不同的环境新建不同的分组,然后的配置文件中指定spring.cloud.nacos.config.group=组名,这样也可以实现不同环境的区分。
3.通过Namespace实现
这种方式是官方建议的方式,在nacos客户端中新建不同的分组,然后再配置文件中指定namespace就可以区分不同的环境了。
具体使用方式可以参考官方:go ——》