本章将介绍怎样在 Spring 中集成 Nacos,从 Nacos 中获取配置信息。
创建一个简单的标准 WEB 项目(Maven),项目结构如下图:
上图是一个标准的 WEB 项目。版本信息:
Spring 3.2.18.RELEASE
JDK 1.8 64bit
Nacos 2.2.3
nacos-spring-context 1.1.1
Tomcat 8.5.32
注意:在开始运行项目前,请先启动 Nacos 服务(如何启动 Nacos 请参考 “Nacos 快速开始” 章节)。
为了 Nacos 与 Spring 集成,我们需要在项目中引入 nacos-spring-context 依赖,如下:
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-spring-context</artifactId> <version>1.1.1</version> </dependency>
上面依赖 1.1.1 版本的 nacos-spring-context,而该依赖自身依赖 3.2.18.RELEASE 版的 Spring。如下图:
因此,项目完整的依赖如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.hxstrive.nacos</groupId> <artifactId>nacos_spring</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <dependencies> <!-- 引入 nacos 依赖 --> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-spring-context</artifactId> <version>1.1.1</version> </dependency> <!-- 引入 spring 依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.18.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> </dependencies> <build> <finalName>nacos_spring</finalName> </build> </project>
传统 Spring MVC 项目,我们需要通过 XML 来进行部分配置,因此我们在 resources 目录下面创建 application-context.xml 配置文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--配置spring创建容器时要扫描的包--> <context:component-scan base-package="com.hxstrive.nacos" /> <!--配置spring开启注解mvc的支持 默认就是开启的 ,要想让其他组件(不包含映射器、适配器、处理器)生效就必须需要配置了--> <mvc:annotation-driven /> </beans> 为了正确启动 Spring MVC 项目,我们还需要在项目的 web.xml 中配置 org.springframework.web.servlet.DispatcherServlet 控制器,如下: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>nacos-spring</display-name> <!--配置前端控制器,对浏览器发送的请求进行统一处理--> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--加载springmvc.xml配置文件的位置和名称,配置的是Spring配置--> <init-param> <!--contextConfigLocation:上下文配置路径,固定值--> <param-name>contextConfigLocation</param-name> <!--classpath:类路径,值得是Java和resources文件夹--> <!--springmvc.xml:指的是配置文件的名称:需要配置springmvc.xml,在下面--> <param-value>classpath:application-context.xml</param-value> </init-param> <!--配置启动加载--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
使用 @Configuration 注解创建一个配置类,并且添加 @EnableNacosConfig 注解启用 Nacos Spring 的配置管理服务。以下示例中,我们使用 @NacosPropertySource 加载了 dataId 为 example 的配置源,并开启自动更新:
package com.hxstrive.nacos; import com.alibaba.nacos.api.annotation.NacosProperties; import com.alibaba.nacos.spring.context.annotation.config.EnableNacosConfig; import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource; import org.springframework.context.annotation.Configuration; /** * Nacos 配置类 * @author hxstrive.com */ @Configuration @EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848")) @NacosPropertySource(dataId = "example", autoRefreshed = true) public class NacosConfiguration { }
创建一个简单的控制器,通过 Nacos 的 @NacosValue 注解设置 useLocalCache 属性的值。代码如下:
package com.hxstrive.nacos; import com.alibaba.nacos.api.config.annotation.NacosValue; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import static org.springframework.web.bind.annotation.RequestMethod.GET; /** * 配置控制器 * @author hxstrive.com */ @Controller @RequestMapping("config") public class ConfigController { @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true) private boolean useLocalCache; @RequestMapping(value = "/get", method = GET) @ResponseBody public boolean get() { return useLocalCache; } }
我们可以选择两种方式到 Nacos 创建配置信息:
方式一:使用 CURL 发起请求,如:curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP&content=useLocalCache=true",或者使用 ApiFox 工具调用该 URL,可参考 “Nacos 简单应用”。
方式二:访问 http://localhost:8848/nacos 地址,通过可视化页面创建配置信息,如下图:
创建完成的配置信息如下图:
通过 IDEA 配置一个 Tomcat,使用 Tomcat 启动该项目,启动成功后,使用浏览器访问 http://localhost:8080/config/get 地址,获取配置信息,如下图:
注意,你可以通过 Nacos 控制页面修改和发布配置,刷新上面地址,查看变化。