下面就详细讲解“spring boot项目中如何使用nacos作为配置中心”的完整攻略。
什么是Nacos
Nacos是一个基于DNS和HTTP的动态服务发现、配置管理和服务管理平台,致力于帮助用户更好的构建、演进、治理微服务生态系统。Nacos提供了服务发现、配置管理、动态DNS服务以及数据共享和元数据管理等基础设施功能。
在Spring Boot项目中集成Nacos
接下来介绍如何在Spring Boot项目中使用Nacos作为配置中心。
1. 引入依赖
在 pom.xml
文件中添加以下依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2. 配置Nacos地址
在 application.properties
或 application.yaml
文件中配置Nacos Server地址:
spring.cloud.nacos.config.server-addr=nacos服务器地址
3. 创建配置文件
在Nacos Server的配置管理模块中,创建一个名为 example.yml
的yml格式配置文件,内容如下:
user:
name: "Alice"
age: 18
4. 加载配置
创建一个配置类 NacosConfig
,使用 @RefreshScope
注解实现动态刷新配置,代码如下:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@Component
@RefreshScope
public class NacosConfig {
@Value("${user.name}")
private String userName;
@Value("${user.age}")
private int userAge;
// getter and setter
}
5. 测试获取配置
在 RestController
中测试获取配置,代码如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private NacosConfig nacosConfig;
@GetMapping("/user")
public String getUser() {
return "name: " + nacosConfig.getUserName() + ", age: " + nacosConfig.getUserAge();
}
}
访问 http://localhost:8080/user
,可以看到返回结果为:
name: Alice, age: 18
6. 动态刷新配置
修改Nacos配置文件内容,例如将年龄改为20,保存并发布,然后调用接口 http://localhost:8080/actuator/refresh
刷新配置。
重新调用接口 http://localhost:8080/user
,可以看到返回结果为:
name: Alice, age: 20
至此,Spring Boot项目就成功集成了Nacos作为配置中心。
示例说明
下面举两个使用Nacos作为配置中心的示例:
示例一 - 使用Nacos作为Spring Cloud Gateway网关的配置中心
- 引入依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 配置Nacos Server地址:
spring.cloud.nacos.config.server-addr=nacos服务器地址
- 创建一个
gateway.yaml
配置文件,内容如下:
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://localhost:8081
predicates:
- Path=/user/**
filters:
- StripPrefix=1
- 在
GatewayConfig
类中加载gateway.yaml
文件,代码如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.cloud.gateway.route.builder.routes.RouteLocatorBuilder;
import org.springframework.cloud.gateway.route.builder.routes.SimpleRouteBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.ClassPathResource;
@Configuration
public class GatewayConfig {
@Autowired
private NacosConfig nacosConfig;
@Bean
@Primary
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
SimpleRouteBuilder routeBuilder = builder.routes();
ClassPathResource resource = new ClassPathResource("gateway.yaml");
Properties properties = new Properties();
try {
properties.load(resource.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
for (String key : properties.stringPropertyNames()) {
String value = properties.getProperty(key);
routeBuilder.route(key, r -> r.path(key).uri(value));
}
return routeBuilder.build();
}
}
示例二 - 将Nacos配置注入到Spring Boot的Environment中
- 引入依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 配置Nacos Server地址:
spring.cloud.nacos.config.server-addr=nacos服务器地址
- 创建一个
example.yaml
配置文件,内容如下:
greeting: "Hello world!"
- 在
@SpringBootApplication
中添加@EnableConfigurationProperties
注解:
@EnableConfigurationProperties
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 在
application.properties
或application.yaml
中添加以下配置:
spring.main.allow-bean-definition-overriding=true
- 在
NacosConfig
中添加以下代码:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Configuration
@ConfigurationProperties(prefix = "example")
@RefreshScope
public class NacosConfig {
private String greeting;
public String getGreeting() {
return greeting;
}
public void setGreeting(String greeting) {
this.greeting = greeting;
}
}
- 在
SpringBootApplication
中添加以下代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;
@SpringBootApplication
public class Application {
@Autowired
private Environment environment;
@Autowired
private NacosConfig nacosConfig;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
ApplicationRunner applicationRunner() {
return args -> {
System.out.println("================================");
System.out.println("Greeting from application.yml:");
System.out.println(environment.getProperty("example.greeting"));
System.out.println("Greeting from Nacos:");
System.out.println(nacosConfig.getGreeting());
System.out.println("================================");
};
}
}
使用以上示例,就可以将Nacos的配置注入到Spring Boot的Environment中了。
希望以上内容能帮助您快速上手在Spring Boot项目中使用Nacos作为配置中心。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot项目中如何使用nacos作为配置中心 - Python技术站