小说网站建设费用,it外包公司为什么不能去,做分类信息网站赚钱吗,平安保险网站一.Nacos配置管理
Nacos不仅可以作为注册中心#xff0c;可以进行配置管理
1.1 统一配置管理
统一配置管理可以实现配置的热更新#xff08;即不用重启当服务发生变更时也可以直接更新#xff09; dataId格式#xff1a;服务名-环境名.yaml#xff0c;分组一般使用默认…一.Nacos配置管理
Nacos不仅可以作为注册中心可以进行配置管理
1.1 统一配置管理
统一配置管理可以实现配置的热更新即不用重启当服务发生变更时也可以直接更新 dataId格式服务名-环境名.yaml分组一般使用默认即可配置内容只写有热更新需求的配置 1.2 拉取配置文件
在没有nacos配置文件时项目启动顺序为 项目启动读取本地配置文件创建spring容器加载bean 在有nacos配置文件之后项目启动顺序为 项目启动读取nacos配置文件读取本地配置文件创建spring容器加载bean 此时出现了一个问题**读取nacos配置文件需要知道nacos配置文件的地址而这个地址应该在application.yml中这是否造成了冲突**因此需要将nacos配置的地址提前此时使用bootstrap.yml引导文件该文件的优先级还要高于application.yml 执行步骤 1.在相应的服务中导入依赖比如user-service
!--nacos配置管理依赖--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId
/dependency2.导入并编写bootstrap.yml(该引导文件中会指明nacos配置文件所在位置)
spring:application:name: userserviceprofiles:active: dev # 环境cloud:nacos:server-addr: localhost:8848 # nacos地址config:file-extension: yaml # 文件后缀名3.删除application.yml中与bootstrap.yml中重复的配置
# application:
# name: userservice # user服务名称
# cloud:
# nacos:
# server-addr: localhost:8848 # nacos服务地址
# discovery:
# cluster-name: SH # 集群名称4.验证是否真的读取到nacos配置文件 在UserController中添加内容 Value(${pattern.dateformat}) //读取nacos配置文件中的内容,并将内容注入到dateformat中;private String dateformat;GetMapping(/now)public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}修改之后启动user-service,访问http://localhost:8081/user/now结果
1.3 配置文件热更新
Nacos中的配置文件变更之后微服务无需重启就可以感知。不过需要通过下面2种配置实现 方式一 在Value注入的变量所在类上添加注解RefreshScope
Slf4j
RestController
RequestMapping(/user)
RefreshScope
public class UserController {Autowiredprivate UserService userService;Value(${pattern.dateformat})private String dateformat;GetMapping(/now)public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}
}修改之前
热更新之后
方式二 使用ConfigurationProperties(prefix “pattern”)注解单独配置一个属性类读取配置文件中的内容 1.新建config.PatternProperties属性类
Data
Component
ConfigurationProperties(prefix pattern)
public class PatternProperties {private String dateformat;
}2.将PatternProperties bean注入到UserController中:
Slf4j
RestController
RequestMapping(/user)
//RefreshScope
public class UserController {Autowiredprivate UserService userService;Autowiredprivate PatternProperties patternProperties;// Value(${pattern.dateformat})
// private String dateformat;GetMapping(/now)public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));}
}最终实现效果同上
1.4 配置管理-多环境配置共享
微服务启动时会从nacos读取多个配置文件:
[spring.application.name]-[spring-profiles.active].yaml,例如userservice-dev.yaml这个是区分环境的。[spring.application.name].yaml,例如userservice.yaml这个不区分环境多环境共性。 无论profiles如何变化[spring.application.name].yaml该文件一定会被加载因此多环境共享分配置可以写入这个文件。 执行步骤 1.添加共享配置 2.采用第二种方式读入nacos配置文件属性
Data
Component
ConfigurationProperties(prefix pattern)
public class PatternProperties {private String dateformat;private String envShareValue;
}编写测试接口
GetMapping(/prop)
public PatternProperties prop(){return patternProperties;
}重启配置类访问结果:dev 访问结果:test
配置文件访问优先级
1.5 配置管理-nacos集群搭建
nacos在生产环境中必定是集群形式搭建集群的基本步骤
搭建数据库初始化数据库表结构下载nacos安装包配置nacos启动nacos集群nginx反向代理
1.新建数据库nacos初始化数据库表结构如果你使用的其他版本的nacos,记得使用里边自带的sql脚本初始化数据库
-- 新建查询
CREATE TABLE config_info (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT id,data_id varchar(255) NOT NULL COMMENT data_id,group_id varchar(255) DEFAULT NULL,content longtext NOT NULL COMMENT content,md5 varchar(32) DEFAULT NULL COMMENT md5,gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 修改时间,src_user text COMMENT source user,src_ip varchar(50) DEFAULT NULL COMMENT source ip,app_name varchar(128) DEFAULT NULL,tenant_id varchar(128) DEFAULT COMMENT 租户字段,c_desc varchar(256) DEFAULT NULL,c_use varchar(64) DEFAULT NULL,effect varchar(64) DEFAULT NULL,type varchar(64) DEFAULT NULL,c_schema text,PRIMARY KEY (id),UNIQUE KEY uk_configinfo_datagrouptenant (data_id,group_id,tenant_id)
) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin COMMENTconfig_info;/******************************************/
/* 数据库全名 nacos_config */
/* 表名称 config_info_aggr */
/******************************************/
CREATE TABLE config_info_aggr (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT id,data_id varchar(255) NOT NULL COMMENT data_id,group_id varchar(255) NOT NULL COMMENT group_id,datum_id varchar(255) NOT NULL COMMENT datum_id,content longtext NOT NULL COMMENT 内容,gmt_modified datetime NOT NULL COMMENT 修改时间,app_name varchar(128) DEFAULT NULL,tenant_id varchar(128) DEFAULT COMMENT 租户字段,PRIMARY KEY (id),UNIQUE KEY uk_configinfoaggr_datagrouptenantdatum (data_id,group_id,tenant_id,datum_id)
) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin COMMENT增加租户字段;/******************************************/
/* 数据库全名 nacos_config */
/* 表名称 config_info_beta */
/******************************************/
CREATE TABLE config_info_beta (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT id,data_id varchar(255) NOT NULL COMMENT data_id,group_id varchar(128) NOT NULL COMMENT group_id,app_name varchar(128) DEFAULT NULL COMMENT app_name,content longtext NOT NULL COMMENT content,beta_ips varchar(1024) DEFAULT NULL COMMENT betaIps,md5 varchar(32) DEFAULT NULL COMMENT md5,gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 修改时间,src_user text COMMENT source user,src_ip varchar(50) DEFAULT NULL COMMENT source ip,tenant_id varchar(128) DEFAULT COMMENT 租户字段,PRIMARY KEY (id),UNIQUE KEY uk_configinfobeta_datagrouptenant (data_id,group_id,tenant_id)
) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin COMMENTconfig_info_beta;/******************************************/
/* 数据库全名 nacos_config */
/* 表名称 config_info_tag */
/******************************************/
CREATE TABLE config_info_tag (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT id,data_id varchar(255) NOT NULL COMMENT data_id,group_id varchar(128) NOT NULL COMMENT group_id,tenant_id varchar(128) DEFAULT COMMENT tenant_id,tag_id varchar(128) NOT NULL COMMENT tag_id,app_name varchar(128) DEFAULT NULL COMMENT app_name,content longtext NOT NULL COMMENT content,md5 varchar(32) DEFAULT NULL COMMENT md5,gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 修改时间,src_user text COMMENT source user,src_ip varchar(50) DEFAULT NULL COMMENT source ip,PRIMARY KEY (id),UNIQUE KEY uk_configinfotag_datagrouptenanttag (data_id,group_id,tenant_id,tag_id)
) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin COMMENTconfig_info_tag;/******************************************/
/* 数据库全名 nacos_config */
/* 表名称 config_tags_relation */
/******************************************/
CREATE TABLE config_tags_relation (id bigint(20) NOT NULL COMMENT id,tag_name varchar(128) NOT NULL COMMENT tag_name,tag_type varchar(64) DEFAULT NULL COMMENT tag_type,data_id varchar(255) NOT NULL COMMENT data_id,group_id varchar(128) NOT NULL COMMENT group_id,tenant_id varchar(128) DEFAULT COMMENT tenant_id,nid bigint(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY (nid),UNIQUE KEY uk_configtagrelation_configidtag (id,tag_name,tag_type),KEY idx_tenant_id (tenant_id)
) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin COMMENTconfig_tag_relation;/******************************************/
/* 数据库全名 nacos_config */
/* 表名称 group_capacity */
/******************************************/
CREATE TABLE group_capacity (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 主键ID,group_id varchar(128) NOT NULL DEFAULT COMMENT Group ID空字符表示整个集群,quota int(10) unsigned NOT NULL DEFAULT 0 COMMENT 配额0表示使用默认值,usage int(10) unsigned NOT NULL DEFAULT 0 COMMENT 使用量,max_size int(10) unsigned NOT NULL DEFAULT 0 COMMENT 单个配置大小上限单位为字节0表示使用默认值,max_aggr_count int(10) unsigned NOT NULL DEFAULT 0 COMMENT 聚合子配置最大个数0表示使用默认值,max_aggr_size int(10) unsigned NOT NULL DEFAULT 0 COMMENT 单个聚合数据的子配置大小上限单位为字节0表示使用默认值,max_history_count int(10) unsigned NOT NULL DEFAULT 0 COMMENT 最大变更历史数量,gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 修改时间,PRIMARY KEY (id),UNIQUE KEY uk_group_id (group_id)
) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin COMMENT集群、各Group容量信息表;/******************************************/
/* 数据库全名 nacos_config */
/* 表名称 his_config_info */
/******************************************/
CREATE TABLE his_config_info (id bigint(64) unsigned NOT NULL,nid bigint(20) unsigned NOT NULL AUTO_INCREMENT,data_id varchar(255) NOT NULL,group_id varchar(128) NOT NULL,app_name varchar(128) DEFAULT NULL COMMENT app_name,content longtext NOT NULL,md5 varchar(32) DEFAULT NULL,gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,src_user text,src_ip varchar(50) DEFAULT NULL,op_type char(10) DEFAULT NULL,tenant_id varchar(128) DEFAULT COMMENT 租户字段,PRIMARY KEY (nid),KEY idx_gmt_create (gmt_create),KEY idx_gmt_modified (gmt_modified),KEY idx_did (data_id)
) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin COMMENT多租户改造;/******************************************/
/* 数据库全名 nacos_config */
/* 表名称 tenant_capacity */
/******************************************/
CREATE TABLE tenant_capacity (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 主键ID,tenant_id varchar(128) NOT NULL DEFAULT COMMENT Tenant ID,quota int(10) unsigned NOT NULL DEFAULT 0 COMMENT 配额0表示使用默认值,usage int(10) unsigned NOT NULL DEFAULT 0 COMMENT 使用量,max_size int(10) unsigned NOT NULL DEFAULT 0 COMMENT 单个配置大小上限单位为字节0表示使用默认值,max_aggr_count int(10) unsigned NOT NULL DEFAULT 0 COMMENT 聚合子配置最大个数,max_aggr_size int(10) unsigned NOT NULL DEFAULT 0 COMMENT 单个聚合数据的子配置大小上限单位为字节0表示使用默认值,max_history_count int(10) unsigned NOT NULL DEFAULT 0 COMMENT 最大变更历史数量,gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 修改时间,PRIMARY KEY (id),UNIQUE KEY uk_tenant_id (tenant_id)
) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin COMMENT租户容量信息表;CREATE TABLE tenant_info (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT id,kp varchar(128) NOT NULL COMMENT kp,tenant_id varchar(128) default COMMENT tenant_id,tenant_name varchar(128) default COMMENT tenant_name,tenant_desc varchar(256) DEFAULT NULL COMMENT tenant_desc,create_source varchar(32) DEFAULT NULL COMMENT create_source,gmt_create bigint(20) NOT NULL COMMENT 创建时间,gmt_modified bigint(20) NOT NULL COMMENT 修改时间,PRIMARY KEY (id),UNIQUE KEY uk_tenant_info_kptenantid (kp,tenant_id),KEY idx_tenant_id (tenant_id)
) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin COMMENTtenant_info;CREATE TABLE users (username varchar(50) NOT NULL PRIMARY KEY,password varchar(500) NOT NULL,enabled boolean NOT NULL
);CREATE TABLE roles (username varchar(50) NOT NULL,role varchar(50) NOT NULL,UNIQUE INDEX idx_user_role (username ASC, role ASC) USING BTREE
);CREATE TABLE permissions (role varchar(50) NOT NULL,resource varchar(255) NOT NULL,action varchar(8) NOT NULL,UNIQUE INDEX uk_role_permission (role,resource,action) USING BTREE
);INSERT INTO users (username, password, enabled) VALUES (nacos, $2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu, TRUE);INSERT INTO roles (username, role) VALUES (nacos, ROLE_ADMIN);2.安装nacos(略)
3.配置nacos(由于是集群所以我们配置多份),配置多份可以采用解压一次配置一次复制两份再依次修改。因为内存吃紧的原因我用2个nacos作为集群;
将nacos/conf/cluster.conf.example重命名为cluster.conf然后修改为,表示2台机器这里是只有一台机器所以用两个不同的端口号来模拟两台机器注意尽量使用你的本机IP地址cmd》》ipconfig可以查看本机IP地址。我的本机IP地址为10.81.62.166,所以cluster.conf中写的内容是
10.81.62.166:8848
10.81.62.166:8858修改nacos/conf/application.properties,添加数据库配置
1.打开数据源 spring.datasource.platformmysql2.指定数据库的数量 db.num13.指定数据库连接信息
db.url.0jdbc:mysql://127.0.0.1:3306/nacos?characterEncodingutf8connectTimeout1000socketTimeout3000autoReconnecttrueuseUnicodetrueuseSSLfalseserverTimezoneUTC
db.user.0root
db.password.0你的密码4.将nacos文件夹复制2份
5.分别修改三个nacos中的application.properties中的server-portserver-port对应的是你在cluster.conf中配置的内容比如让nacos1中的server-port8848,让nacos2中的server-port8858。
6.启动startup.cmd这次是集群启动默认区别之前的单点启动共同点是都要进入bin目录再打开cmd窗口.注意目录中不能出现中文目录。
//单点启动
startup.cmd -m standalone//集群启动
startup.cmd nacos1集群启动效果 nacos2集群启动效果: 可能遇到的问题1 由于vmware虚拟网卡的存在nacos启动时会获取虚拟网卡的IP地址而不会读取cluster.conf中IP地址。我之前明明配置好了IP地址但是一直读取的确实192.168.11.11这个地址后来发现这是一个虚拟网卡IP地址于是禁用了虚拟网络恢复了正常。
7.配置nginx
将Nginx解压到一个没有中文的目录修改conf/nginx.conf文件配置如下将如下配置内容复制到conf/nginx.conf中的任何一个位置即可只要包含在http下 upstream nacos-cluster {server 10.81.62.166:8848;server 10.81.62.166:8858;}server {listen 8088;server_name localhost;location /nacos {proxy_pass http://nacos-cluster;}}可能遇到的问题2 nginx进行反向代理的配置时一个http中只能有一个server{},所以像视频中老师那样直接复制进去是不行的需要删除之前的server即可。保存之后重启nginx,打开对应的端口。 Nacos集群启动成功
8.修改代码中配置文件 由于部署了集群因此访问地址发生了变更,修改bootstrap.yml文件中server-addr为nginx监听端口
spring:cloud:nacos:server-addr: localhost:8088 # nacos地址