Portainer使用docker compose搭建nacos并初始化MySQL、Portainer stack搭建nacos并初始化MySQL

news2024/11/24 19:58:49

Portainer使用docker compose搭建nacos初始化MySQL、Portainer stack搭建nacos初始化MySQL

  • 新建stack(堆栈)
    • 添加stack(堆栈)名称
    • 添加docker-compose规则
  • 配置环境变量
  • 上传初始化sql文件
    • 找初始化sql文件
    • nacos初始化mysql-schema.sql文件内容
    • 上传sql文件到初始化挂载目录
  • 部署stack(堆栈)
    • 如果MySQL部署成功,nacos启动失败,可以检查下是否初始化挂载目录有问题
  • 访问nacos

新建stack(堆栈)

在这里插入图片描述

添加stack(堆栈)名称

这里要注意下,你的名字会影响你的挂载目录生成的路径

docker-compose volumes解析、docker-compose volumes目录路径生成规则

在这里插入图片描述

我这里取名nacos,如果你要改,则初始化脚本的上传目录需要同步替换

添加docker-compose规则

使用nacos2.2.0版本

# compose版本,向下兼容,我选的最高版本
version: '3.9'
# 定义服务
services:
  nacos:
    image: nacos/nacos-server:v2.2.0
    container_name: nacos
    ports:
      - "8848:8848"
    environment:
      MODE: standalone
      SPRING_DATASOURCE_PLATFORM: mysql
      MYSQL_SERVICE_HOST: nacos-mysql
      MYSQL_SERVICE_USER: "${NACOS_DB_USER}"
      MYSQL_SERVICE_PASSWORD: "${NACOS_DB_PASSWORD}"
      MYSQL_SERVICE_DB_NAME: nacos_config
      MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=100000&socketTimeout=300000&autoReconnect=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
    depends_on:
      - nacos-mysql
    links:
      - nacos-mysql:nacos-mysql
    volumes:
      # 具名挂载数据卷,后面为对应容器内部地址,具名挂载数据卷,后面为对应容器内部地址
      # 生成的本机目录格式:/var/lib/docker/volumes/当前docker-compose.yml所在文件夹名称(根目录的话为default)_卷名/_data
      # 日志挂载
      - nacos_log:/home/nacos/logs
      # 配置挂载
      - nacos_conf:/home/nacos/conf

  nacos-mysql:
    image: mysql:5.7
    container_name: nacos-mysql
    ports:
      - "3306:3306"
    # 重启策略
    restart: always
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      # root 密码
      MYSQL_ROOT_PASSWORD: "${NACOS_DB_ROOT_PASSWORD}"
      # 初始化数据库(后续的初始化sql会在这个库执行)
      MYSQL_DATABASE: nacos_config
      # 初始化用户(不能是root 会报错, 后续需要给新用户赋予权限)
      MYSQL_USER: nacos
      # 用户密码
      MYSQL_PASSWORD: nacos
      # 映射端口
    volumes:
      # 数据挂载          data 文件夹是数据存储目录  (如果mysql初始化错误  需要将文件夹内部全部删除)
      - mysql_data:/var/lib/mysql/
      # 配置挂载          conf 文件夹 放置 my.cnf 配置文件
      - mysql_conf:/etc/mysql/conf.d/
      # 初始化目录挂载    init 文件夹可以放置 .sh .sql 文件 在初始化容器时会执行
      # nacos为当前堆栈(stack)的命名:/var/lib/docker/volumes/nacos_mysql_init/_data
      - mysql_init:/docker-entrypoint-initdb.d/
# 其他配置 网络/卷、全局规则
volumes:
  # 如果有xxx_data这个卷就会直接使用它,否则会创建一个新的卷并使用
  nacos_log: { }
  nacos_conf: { }
  mysql_data: { }
  mysql_conf: { }
  mysql_init: { }

配置环境变量

docker-compose配置中有几项使用环境变量配置,可以根据自己情况去调整

在这里插入图片描述

上传初始化sql文件

找初始化sql文件

先去官网下载nacos安装包

官方github地址:https://github.com/alibaba/nacos/releases

我用的2.2.0版本

在这里插入图片描述
随便下一个,解压后去conf下找初始化sql文件
在这里插入图片描述

nacos初始化mysql-schema.sql文件内容

/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info   */
/******************************************/
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(128) 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,
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_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(128) 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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_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 '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(20) 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 '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_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');

上传sql文件到初始化挂载目录

所以要把sql文件上传到挂载之后的目录上,否则nacos是起不来的。
我配置的stack(堆栈)名称是nacos
级联创建挂载目录

mkdir -p /var/lib/docker/volumes/nacos_mysql_init/_data

把sql文件复制到这个目录,文件叫什么无所谓。

部署stack(堆栈)

在这里插入图片描述

配置即sql文件上传之后,点击部署堆栈即可
部署成功后,可以在容器列表进行查看

在这里插入图片描述

如果MySQL部署成功,nacos启动失败,可以检查下是否初始化挂载目录有问题

在这里插入图片描述

访问nacos

保证你的相关端口正常对外开放
访问ip:8848会404,访问ip:8848/nacos即可
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/154474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打印机不打印故障简单排除方法

日常工作中经常会遇到打印机不能打印的情况,那么又没有专业的技术人员在场帮忙的情况下我们也可以自己动手简单的处理一下故障,可以尝试以下的方法进行简单的故障排除; 一、使打印机处于联机状态,如果打印机没有处于联机状态&…

医疗影像工具LEADTOOLS 入门教程: 检测和提取 MICR - 控制台 C#

LEADTOOLS是一个综合工具包的集合,用于将识别、文档、医疗、成像和多媒体技术整合到桌面、服务器、平板电脑、网络和移动解决方案中,是一项企业级文档自动化解决方案,有捕捉,OCR,OMR,表单识别和处理&#x…

基于STM32或STC的手势控制MP3语音播放器的设计

一. 系统设计框图 区别于传统设计中的按键开关控制,本设计可以实现通过手势控制MP3播放器。采用STM32或STC15单片机和PAJ7620手势模块,能够识别九种手势,分别为上下左右前后,顺时针,逆时针,挥动。在本设计…

SpringBoot视图解析与模板引擎

目录 1、视图解析 1、视图解析原理流程 2、模板引擎-Thymeleaf 1、thymeleaf简介 2、基本语法 3、设置属性值-th:attr 4、迭代 5、条件运算 6、属性优先级 3、thymeleaf使用 1、引入Starter 2、自动配置好了thymeleaf 3、页面开发 4、构建后台管理系统 1、项目…

Java基础03——数组

Java基础03——数组一、数组介绍二、数组的定义与静态初始化1. 定义数组2. 数组静态初始化三、数组元素访问1. 数组的地址值2. 数组访问四、数组遍历五、数组动态初始化六、数组常见问题1. 索引越界异常七、数组常见操作1. 求最值2. 求和3. 交换数据4. 打乱数据八、数组内存图九…

java企业人事管理系统企业工资考勤系统

简介 Java基于ssm开发的企业人事考勤工资系统,员工可以打卡、请假。系统根据员工的打卡情况自动计算工资(全勤、请假、旷工、加班、迟到、早退等计算出最终实发工资),员工还可以查看自己的考勤记录工资具体组成等。升级版加了部长…

Linux——信号知识归纳(中)

目录 一.信号与硬件异常 二.阻塞信号和信号结构 (一).信号状态 (二).信号结构 ①pending表 ②block表 ③handler表 (三).信号处理过程 (四).阻塞与忽略的区别 &#xff08…

Linux 中断子系统(二):GIC 中断控制器

GIC 是 ARM 公司给 Cortex-A/R 内核提供的一个中断控制器,类似 Cortex-M 内核(STM32)中的 NVIC。 GIC:Generic Interrupt Controller,通用中断控制器 NVIC:Nested Vectored. Interrupt Controller,嵌套向量中断控制器目前 GIC 有 4 个版本:V1 ~ V4,V1 是最老的版本,已…

react源码解析20.总结第一章的面试题解答

总结 至此我们介绍了react的理念,如果解决cpu和io的瓶颈,关键是实现异步可中断的更新 我们介绍了react源码架构(uifn(state)),从scheduler开始调度(根据过期事件判断优先级),经过r…

测试开发 | Jenkins job 机制该如何使用?

Jenkins 像老板一样管理各种 job 。job 是 Jenkins 的一个执行计划,是一系列操作的集合,Jenkins 里的最常用的功能就是 job 的构建,即任务的构建。通过构建 job 即可让工人为你工作。 image806387 84.3 KB 创建 job及配置步聚 可以通过如下步…

C#,图像二值化(20)——全局阈值的耶恩算法(Yen Thresholding)及源代码

1 全局阈值的耶恩算法(Yen Throsholding)常见阈值算法1.1黄算法HuangThresholdImageFilter使用Shannon的熵函数实现Huang的模糊阈值[1]。模糊性度量表示原始图像与其二进制版本之间的差异。对于给定的阈值级别,像素的模糊隶属度函数由像素灰度…

Java中常用API总结(7)—— BigDecimal类

BigDecimal类一、前言二、概述1.API帮助文档2.使用方法三、常见方法1.格式2.实例3.报错4.解决方法四、结语一、前言 在使用float或者double类型的数据在进行数学运算的时候,很有可能会产生 精度丢失问题 我们都知道计算机底层在进行运算的时候,使用的都…

Echarts image 使用

通过image://...xx.png 在扇形图中可能会失败,可以将需要载入的img转换成base64直接载入可以通过背景色来载入图片 backgroundColor: {image: xxx/xxx.jpg },实例(扇形图):var option {tooltip: {trigger: "item",show…

如何用用C++实现通达信接口调用?有哪些技巧

c作为三大计算机语言之一,在编程时很受投资者的偏爱,特别是在通达信接口软件开发时C更是担任着重要的开发角色,今天小编就来和大家说一下如何用C实现通达信接口调用? 用C查询股份数据代码(部分) std::cou…

C4D和Maya哪个学起来更容易

Maxon Cinema 4D和 Autodesk Maya 是最著名的两种 3D 软件,艺术家和工作室经常在许多领域使用它们。它们都有不同的功能,在本文中,让我们对它们进行比较。我们将尝试向您概述它们之间的主要区别,以及这两者的功能。哪一个更容易使…

2: [SpringData集成Elasticsearch] --- 配置打印命令日志

文章目录一:引入SpringDataElasticsearch依赖二:创建RestHighLevelClient配置类三:配置YML: logging.level --- 日志等级三:请求接口,查看日志3.1:请求代码3.2:Postman请求地址3.3&a…

LayoutInflater学习(一)之布局解析

LayoutInflater的创建与实例化 LayoutInflater是位于 "android.view" 包下的一个抽象类,同样它也是一个系统级服务 package android.view; SystemService(Context.LAYOUT_INFLATER_SERVICE) public abstract class LayoutInflater { LayoutInflater是用来解析 xml…

桌面录屏软件,分享3个十分便捷的录屏软件

​图片和视频都是人们传播信息的方式,不过相比于图片,视频能够更加直观生动的表达信息。在日常生活中,除了屏幕上记录一些应用程序的内容外,有时我们还需要记录电脑桌面。有更好的桌面录屏软件吗?当然,小编…

Git操作不规范,战友提刀来相见!

年终奖都没了,还要扣我绩效,门都没有,哈哈。 这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。 文末留言抽奖,聊聊你的年终奖。 问题描述 小A和…

C++多线程(并发、进程、线程的基本概念和综述)

并发、进程、线程的基本概念和综述 并发 并发表示两个或者更多任务(独立的活动)同时发生(进行)。例如,一面唱歌一面弹琴,一面走路一面说话,画画的时候听小说等。回归到计算机领域,所谓并发,就是一个程序同时执行多个…