频道栏目
首页 > 数据库 > 其他综合 > 正文
微服务配置中心实战:Spring+MyBatis+Druid+Nacos
2019-01-07 11:01:18           
收藏   我要投稿
在结合场景谈服务发现和配置中我们讲述了 Nacos 配置中心的三个典型的应用场景,包括如何在 Spring Boot 中使用 Nacos 配置中心将数据库连接信息管控起来,而在“原生”的 Spring 中可以怎么使用 Nacos 配置中心呢?很多基于 Spring MVC 框架的 Web 开发中,Spring + MyBatis + Druid 是一个黄金组合,在此基础上融入 Nacos 配置中心,将会发生什么特别的变化呢?

 

本文将通过一个用户信息查询示例,演示在 Spring Web 项目中如何将数据库连接池的配置存放到 Nacos 中,统一运维管控,达到配置治理与降低数据泄露风险的目的。

 

数据表

 

在测试数据库中新建 user 表,其中包含用户名称等字段,与接下来的 User model 类相对应。

 

CREATE TABLE user (

 

id bigint(20) unsigned NOT NULL AUTO_INCREMENT,

 

name varchar(10) NOT NULL DEFAULT '' COMMENT '名字',

 

create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

 

update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

 

PRIMARY KEY (id)

 

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

 

添加一行测试数据:

 

INSERT INTO user (name, create_time, update_time)

 

VALUES ('Nacos', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);

 

Spring

 

该示例是 Spring 常规的 Web 项目,项目结构如下:

 

 

 

 

pom.xml

 

引入 Nacos Spring 的依赖包 nacos-spring-context:

 

com.alibaba.nacos

 

nacos-spring-context

 

${latest.version}

 

笔者在撰写本文时,nacos-spring-context 的最新版本为:0.2.2-RC1

 

dispatcher-servlet.xml

 

dispatcher-servlet.xml 为示例中 Spring MVC 的入口配置,在其中通过 import 引入了 Nacos、Druid、MyBatis 的配置,其内容如下:

 

xmlns:context="https://www.springframework.org/schema/context"

 

xmlns:mvc="https://www.springframework.org/schema/mvc"

 

xmlns="https://www.springframework.org/schema/beans"

 

xsi:schemaLocation="https://www.springframework.org/schema/beans

 

https://www.springframework.org/schema/beans/spring-beans.xsd

 

https://www.springframework.org/schema/context

 

https://www.springframework.org/schema/context/spring-context.xsd

 

https://www.springframework.org/schema/mvc

 

;

 

nacos.xml

 

关键看 nacos.xml ,nacos-spring-context 的扩展了 Spring 的 XML Schema 机制,自定义了 等元素,详细配置内容如下:

 

xmlns="https://www.springframework.org/schema/beans"

 

xmlns:nacos="https://nacos.io/schema/nacos"

 

xsi:schemaLocation="https://www.springframework.org/schema/beans

 

https://www.springframework.org/schema/beans/spring-beans.xsd

 

https://nacos.io/schema/nacos

 

;

 

其中通过 设置 Nacos Server 的连接地址,通过 从 Nacos 配置中心加载了 dataId 为 datasource.properties 的配置,nacos-spring-context 会解析获取到的配置内容并添加到 Spring Environment 的 PropertySources 中,使得后续初始化 Druid 连接池的时候能获取到数据库连接地址、账号密码、初始连接池大小等信息。这就是 Nacos 配置中心与 Spring 结合的关键点。

 

datasource.xml

 

这是数据库连接池的配置,初始化了 DruidDataSource 的 Spring Bean,并将其通过 DataSourceTransactionManager 设置为 Spring 的数据库连接池。

 

xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"

 

xmlns:tx="https://www.springframework.org/schema/tx"

 

xsi:schemaLocation="https://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx.xsd

 

https://www.springframework.org/schema/beans ;

 

从上面的配置内容看一看到,数据库连接池不需要因为引入 Nacos 配置中做任何特殊的改变。

 

其他

 

User 的 Model、Service 等也跟不使用 Nacos 配置中心时完全一致,这里就不一一贴出,完整示例代码可以在 nacos-examples 获取:https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-example/nacos-spring-config-datasource-example

 

Nacos

 

参照 Nacos 官网的快速开始:https://nacos.io/zh-cn/docs/quick-start.html

 

从 Nacos 的 github 上下载最新稳定版本的 nacos-server:https://github.com/alibaba/nacos/releases

 

解压后到 Nacos 的 bin 目录下,执行 startup 启动脚本以单机模式启动 Nacos Server, Windows 请使用 cmd startup.cmd ,Linux/Unix/Mac 环境请使用 sh startup.sh -m standalone 。

 

启动后,浏览器访问:https://localhost:8848/nacos/index.html 就可以来到 Nacos 的控制台,新增 dataId 为 datasource.properties 的配置,对应上面 Spring 的 nacos.xml 中的 dataId。

 

配置内容则与 Spring 的 datasource.xml 中的连接池属性一一对应,示例如下:

 

datasource.url=jdbc:mysql://localhost:3306/test

 

datasource.username=root

 

datasource.password=root

 

datasource.initial-size=1

 

datasource.max-active=20

 

 

 

 

运行

 

示例中是 UserController#get() 通过 UserServce 调用 Mybatis 的 Mapper 类(UserMapper)从数据库中查询指定 ID 的用户信息,假设该示例是运行在端口为 8080 的 Tomcat 上,访问:https://localhost:8080/usersid=1 地址将返回:

 

{

 

"id": 1,

 

"name": "Nacos"

 

}

 

总结

 

本文通过一个示例演示在“原生” Spring 中如何使用 Nacos 配置中心,从示例可以看出,对原有的 Spring 项目基本没有任何侵入,只需在 pom.xml 中添加 nacos-spring-context 的依赖,然后再定义并引入 nacos.xml 配置,就可以将数据库连接池信息管控起来,做到统一运维,并降低数据泄露的风险。

 

试想,如果你有多个项目连接同一个数据库或一个项目部署很多实例,当数据库密码修改时,你不需要去修改每个项目的 datasource.properties 文件,再走一次应用的部署发布流程,而是到 Nacos 的控制台上修改一个配置项,再去重启应用实例即可。当然,如果你是自己管理数据库连接池,则可以做到连“重启应用实例”都不需要了,只需在监听到 Nacos 配置变化时重新初始化数据库连接池即可。

 

将 Spring 配置放置到 Nacos 配置中,还能用上“动态推送”、“版本管理”、“快速回滚”、“监听查询”,以及后续的 “灰度发布”、“配置加密”、“权限管控”等功能,为 Spring + MyBatis + Druid 插上“飞翔”的翅膀。

 

作为 Nacos 配置中心的阿里云免费产品 ACM:https://www.aliyun.com/product/acm,已经提供了上面所有的功能,如果您不想自己部署运维 Nacos Server 或者想使用“推送轨迹”、“细粒度权限控制”、“ECS 实例 RAM 角色”等高级特性,不妨尝试下免费的 ACM。

 

完整示例代码:

 

Nacos: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-example/nacos-spring-config-datasource-example

 

ACM: https://github.com/nacos-group/nacos-examples/tree/acm/nacos-spring-example/nacos-spring-config-datasource-example

点击复制链接 与好友分享!回本站首页
上一篇:数据库入门之RDS与各组件搭配
下一篇:mysql误删除ibdata1以及日志ib_logfile*
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站