当前位置: 首页 > 后端技术 > Node.js

SpringCloud微服务实践——搭建企业级开发框架(十):使用Nacos分布式配置中心

时间:2023-04-03 12:31:25 Node.js

随着业务的发展和微服务架构的升级,服务和程序配置越来越多(各种微服务,各种服务器地址,各种参数),传统的配置文件方式和数据库方式已经不能满足开发者对配置管理的要求:安全性:配置随源代码存放在代码库中,容易造成配置泄露.及时性:修改配置需要重启服务才能生效。局限性:不能支持动态调整:比如日志开关,功能开关。于是,分布式配置中心应运而生!在使用Nacos之前,先了解一下SpringBoot配置文件bootstrap和application的加载顺序:bootstrap.yml(bootstrap.properties)先加载application.yml(application.properties),然后为应用的bootstrap.yml加载bootstrap.ymlcontext父SpringApplicationContext加载的Nacos的Config默认读取bootstrap.yml配置文件。如果将NacosConfig的配置写到application.yml中,项目启动时总会报错。1.在GitEgg-Platform项目的子项目gitegg-platform-cloud中引入spring-cloud-starter-alibaba-nacos-config依赖,重新安装GitEgg-Platform项目,然后在IDEA中重新执行ReloadAll即可GitEgg-Cloud项目Maven项目。GitEgg-Platformcom.gitegg.platform1.0-SNAPSHOT4.0.0gitegg-platform-cloud<名称>${project.artifactId}${project.parent.version}jarcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery</artifactId>com.alibaba.cloudspring-cloud-starter-alibaba-nacos-config2.因为Nacos读取服务配置默认是写在bootstrap.yml中,所以我们在gitegg-service-system项目下新建一个bootstrap.yml文件,同时bootstrap.yml配置NacosConfigserver:port:8001spring:application:name:gitegg-service-systemcloud:nacos:discovery:server-addr:127.0.0.1:8848config:server-addr:127.0.0.1:8848file-extension:ymlgroup:DEFAULT_GROUPenabled:true3.在Nacos服务器上新建gitgg-service-system.yaml配置,将application.yml中的配置信息复制到Nacos服务器上的配置信息中,并然后删除application.yml,在NacosSpringCloud中,dataId的完整格式如下:${prefix}-${spring.profiles.active}.${file-extension}prefix默认为spring.application的值。name,也可以通过配置项spring进行配置。云.nacos.config.prefix配置spring.profiles.active是当前环境对应的profile。有关详细信息,请参阅SpringBoot文档。注意:当spring.profiles.active为空时,对应的connector-将不存在,dataId的拼接格式变为${prefix}。${file-extension}file-exetension为配置内容的数据格式,即可以通过配置项spring.cloud.nacos.config.file-extension进行配置。目前仅支持属性和yaml类型。详细配置信息请参考SpringBoot文档spring:datasource:type:com.alibaba.druid.pool.DruidDataSourceurl:jdbc:mysql://127.0.0.1/gitegg_cloud?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&allowMultiQueries=trueusername:rootpassword:rootinitialSize:1minIdle:3maxActive:20#配置等待超时获取连接的时间maxWait:60000#配置间隔多长时间检测和检测需要关闭的空闲连接,inmillisecondstimeBetweenEvictionRunsMillis:60000#配置一个连接在pool中的最小存活时间,以毫秒为单位minEvictableIdleTimeMillis:30000validationQuery:select'x'testWhileIdle:truetestOnBorrow:falsetestOnReturn:false#打开PSCache并在每个连接上指定PSCache的大小poolPreparedStatements:truemaxPoolPreparedStatementPerConnectionSize:20#配置监控统计拦截过滤器,去掉后监控接口sql不能统计,'wall'用于防火墙过滤器:config,stat,slf4j#通过connectProperties属性开启mergeSql功能;慢SQL记录connectionProperties:druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;#合并监控多个DruidDataSources数据使用GlobalDataSourceStat:truemybatis-plus:mapper-locations:classpath*:/com/gitegg/*/*/mapper/*Mapper.xmltypeAliasesPackage:com.gitegg.*.*.entityglobal-config:#primarykeytype0:"数据库ID自增",1:"用户输入ID",2:"全局唯一ID(数字类型唯一ID)",3:"全局唯一IDUUID";id-type:2#字段策略0:"忽略判断",1:"非空判断"),2:"非空判断"field-strategy:2#驼峰式下划线转换db-column-underline:true#刷新映射器调试神器refresh-mapper:true#数据库大写下划线转换#capital-mode:true#逻辑删除配置logic-delete-value:1logic-not-delete-value:0配置:map-underscore-to-camel-case:truecache-enabled:false4,上面可以读取配置文件,我们在SystemController.java中添加读取配置的测试代码,读取配置的某个属性,如果需要读取实时刷新数据,可以添加@RefreshScope注解包com.gitegg.service.system.controller;importcom.gitegg.platform.boot.common.base.Result;importcom.gitegg.platform.boot.common.exception.BusinessException;importcom.gitegg.service.system.dto.SystemDTO;导入com.gitegg.service.system.service.ISystemService;导入io.swagger.annotations.Api;导入io.swagger.annotations.ApiOperation;导入lombok.AllArgsConstructor;导入lombok.RequiredArgsConstructor;导入org.springframework.beans。factory.annotation.Autowired;导入org.springframework.beans.factory.annotation.Value;导入org.springframework.web.bind.annotation.*;导入javax.validation.Valid;@RestController@RequestMapping(value="system")@RequiredArgsConstructor(onConstructor_=@Autowired)@Api(tags="gitegg-system")@RefreshScopepublicclassSystemController{privatefinalISystemServicesystemService;@Value("${spring.datasource.maxActive}")privateStringnacosMaxActiveType;@GetMapping(value="list")@ApiOperation(value="systemlist接口")publicObjectlist(){returnsystemService.list();}@GetMapping(value="page")@ApiOperation(value="系统页面接口")publicObjectpage(){返回systemService.page();}@GetMapping(value="exception")@ApiOperation(value="自定义异常并返回测试接口")publicResultexception(){returnResult.data(systemService.exception());}@PostMapping(value="valid")@ApiOperation(value="参数验证测试接口")publicResultvalid(@Valid@RequestBodySystemDTOsystemDTO){returnResult.data(systemDTO);}@PostMapping(value="nacos")@ApiOperation(value="Nacos读取配置文件测试接口")publicResultnacos(){returnResult.data(nacosMaxActiveType);}}5.启动项目,打开浏览器设备访问:http://127.0.0.1:8001/doc.html,点击Nacos读取配置文件测试界面菜单,测试,可以查看读取配置信息,因为@RefreshScope添加后,我们测试实时刷新功能,手动修改Nacos中的spring.datasource.maxActive配置,再次执行测试界面,可以看到读取的配置信息已经刷新。本文源码在https://gitee.com/wmz1930/GitEgg的chapter-10分支