docker run --env MODE=standalone --restart=always --name ybchen-nacos1 -d -p 8848:8848 nacos/nacos-server
至此nacos
启动成功
先搭建springboot
环境
pom.xml
导入依赖
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
<version>2021.1version>
dependency>
application.yml
server:
port: 8080
spring:
application:
name: springboot-nacos
profiles:
active: dev
application-dev.yml
spring:
datasource:
username: root
password: 123456
ConfigController.java
@RestController
@RequestMapping("config")
public class ConfigController {
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@GetMapping("/datasource")
public String getMessage() {
return "username:" + username + "password:" + password;
}
}
启动访问http://localhost:8080/config/datasource
pom.xml
加依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-bootstrapartifactId>
<version>3.0.4version>
dependency>
巨坑:这个依赖一定要加!!!springboot不会默认加载bootstrap 文件,需要这个依赖才能加载bootstrap文件,
新建bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
# 库存模块
group: stock
prefix: test
file-extension: yml
@RefreshScope
,否则不会自动刷新
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
- prefix 默认为 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。
- spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符-也将不存在,dataId 的拼接格式变成
p r e f i x . {prefix}. prefix.{file-extension}- file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持properties 和 yaml
类型。
group是在bootstrap.yml配置的
项目会根据Data ID+Group
找配置
访问http://localhost:8080/config/datasource
,修改配置后,再次访问
bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
# 库存模块
group: stock
prefix: test
file-extension: yml
namespace: a2c0357f-4e2b-4eb9-852b-b1ca2e8fb22c
选择命名空间后,创建配置文件,这个配置文件就归属到这个命名空间下了
项目根据命名空间名+Data ID+Group
找配置
namespcae分环境(开发环境、测试环境)
group分模块(库存模块、订单模块)
想通过test.yml线上改切换dev和pro,但没效果
pom.xml
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<version>2021.1version>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-bootstrapartifactId>
<version>3.0.4version>
dependency>
SpringbootNacosConsumerApplication.java
@SpringBootApplication
@EnableDiscoveryClient
public class SpringbootNacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootNacosConsumerApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
NacosConsumerController.java
@RestController
public class NacosConsumerController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
return restTemplate.getForObject("http://127.0.0.1:8080//echo/" + str, String.class);
}
}
bootstrap.yml
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
# 库存模块
group: order
namespace: a2c0357f-4e2b-4eb9-852b-b1ca2e8fb22c
application.yml
server:
port: 8081
spring:
application:
name: springboot-nacos-consumer
但是加上了@LoadBalanced
就报错,折腾了好久没找到原因
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
return restTemplate.getForObject("http://springboot-nacos//echo/" + str, String.class);
}
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-ribbonartifactId>
<version>2.2.4.RELEASEversion>
dependency>
有解决兄弟的留言,谢谢