使用 bitnami/postgresql-repmgr 镜像快速设置 PostgreSQL HA
什么是 PostgreSQL HA?
此 PostgreSQL 集群解决方案包括 PostgreSQL 复制管理器(replication manager
),这是一种用于管理 PostgreSQL 集群上的复制(replication
)和故障转移(failover
)的开源工具。
获取此镜像
获取 Bitnami PostgreSQL HA Docker 镜像的推荐方法是从 Docker Hub Registry 中提取预构建的镜像。
$ docker pull bitnami/postgresql-repmgr:latest
要使用特定版本,您可以拉取版本化标签。 您可以在 Docker Hub Registry
中查看可用版本的列表。
$ docker pull bitnami/postgresql-repmgr:[TAG]
如果您愿意,您也可以自己构建镜像。
$ docker build -t bitnami/postgresql-repmgr:latest 'https://github.com/bitnami/bitnami-docker-postgresql-repmgr.git#master:14/debian-10'
持久化您的应用程序
如果删除容器,所有数据都将丢失,下次运行镜像时,数据库将重新初始化。 为避免这种数据丢失,您应该挂载一个即使在容器被删除后仍将持续存在的卷。
对于持久性,您应该在 /bitnami/postgresql
路径上挂载一个目录。 如果挂载的目录是空的,它将在第一次运行时被初始化。
$ docker run \
-v /path/to/postgresql-repmgr-persistence:/bitnami/postgresql \
bitnami/postgresql-repmgr:latest
此存储库中的 docker-compose.yml
文件已经配置了持久性。
注意:由于这是一个非 root 容器,因此挂载的文件和目录必须具有 UID
1001
的适当权限。
连接到其他容器
使用 Docker 容器网络,您的应用程序容器可以轻松访问在容器内运行的 PostgreSQL
服务器,反之亦然。
连接到同一网络的容器可以使用容器名称作为主机名相互通信。
使用命令行
在此示例中,我们将创建一个 PostgreSQL
客户端实例,该实例将连接到与客户端在同一 docker
网络上运行的服务器实例。
Step 1: 创建 network
$ docker network create my-network --driver bridge
Step 2: 在您的 network 中启动 postgresql-repmgr 容器
使用 docker run
命令的 --network <NETWORK>
参数将容器附加到 my-network
网络。
$ docker run --detach --rm --name pg-0 \
--network my-network \
--env REPMGR_PARTNER_NODES=pg-0 \
--env REPMGR_NODE_NAME=pg-0 \
--env REPMGR_NODE_NETWORK_NAME=pg-0 \
--env REPMGR_PRIMARY_HOST=pg-0 \
--env REPMGR_PASSWORD=repmgrpass \
--env POSTGRESQL_PASSWORD=secretpass \
bitnami/postgresql-repmgr:latest
Step 3: 运行你的 PostgreSQL client 实例
最后,我们创建一个新的容器实例来启动 PostgreSQL client
并连接到上一步中创建的服务器:
$ docker run -it --rm \
--network my-network \
bitnami/postgresql:10 \
psql -h pg-0 -U postgres
使用 Docker Compose
如果未指定,Docker Compose
会自动设置一个新网络并将所有已部署的服务附加到该网络。 但是,我们将明确定义一个名为 my-network
的新 bridge
网络。 在此示例中,我们假设您希望从您自己的自定义应用程序镜像连接到 PostgreSQL
服务器,该镜像在以下代码段中由服务名称 myapp
标识。
version: '2'
networks:
my-network:
driver: bridge
services:
pg-0:
image: 'bitnami/postgresql-repmgr:latest'
networks:
- my-network
environment:
- POSTGRESQL_PASSWORD=custompassword
- REPMGR_PASSWORD=repmgrpassword
- REPMGR_PRIMARY_HOST=pg-0
- REPMGR_NODE_NETWORK_NAME=pg-0
- REPMGR_NODE_NAME=pg-0
- REPMGR_PARTNER_NODES=pg-0
myapp:
image: 'YOUR_APPLICATION_IMAGE'
networks:
- my-network
重要的:
- 请使用您的应用程序镜像更新上述代码段中的 YOUR_APPLICATION_IMAGE 占位符
- 在您的应用程序容器中,使用主机名
pg-0
连接到PostgreSQL
服务器
使用以下命令启动容器:
$ docker-compose up -d
配置
初始化一个新实例
第一次执行容器时,它将执行位于 /docker-entrypoint-initdb.d
的扩展名为 .sh
、.sql
和 .sql.gz
的文件。
为了将您的自定义文件放入 docker
镜像中,您可以将它们挂载为卷。
在首次运行时设置 root 和 repmgr 密码
在上述命令中,您可能已经注意到 POSTGRESQL_PASSWORD
和 REPMGR_PASSWORD
环境变量的使用。 第一次运行镜像时传递 POSTGRESQL_PASSWORD
环境变量会将 postgres
用户的密码设置为 POSTGRESQL_PASSWORD
的值(或 POSTGRESQL_PASSWORD_FILE
中指定的文件内容)。同样,传递 REPMGR_PASSWORD
环境变量将 repmgr
用户的密码设置为 REPMGR_PASSWORD
的值(或 REPMGR_PASSWORD_FILE
中指定的文件内容)。
$ docker run --name pg-0 --env REPMGR_PASSWORD=repmgrpass --env POSTGRESQL_PASSWORD=secretpass bitnami/postgresql-repmgr:latest
或通过修改此存储库中存在的 docker-compose.yml
文件:
...
services:
pg-0:
...
environment:
- - POSTGRESQL_PASSWORD=adminpassword
+ - POSTGRESQL_PASSWORD=password123
- - REPMGR_PASSWORD=repmgrpassword
+ - REPMGR_PASSWORD=password123
...
pg-1:
...
environment:
- - POSTGRESQL_PASSWORD=adminpassword
+ - POSTGRESQL_PASSWORD=password123
- - REPMGR_PASSWORD=repmgrpassword
+ - REPMGR_PASSWORD=password123
...
Note!postgres
和 repmgr
用户都是超级用户,并且对 PostgreSQL
数据库具有完全的管理访问权限。
如果要为 postgres
用户设置非特权用户和密码,请参阅在首次运行时创建数据库用户。
首次运行时创建数据库
通过在第一次运行镜像时传递 POSTGRESQL_DATABASE
环境变量,将创建一个数据库。 如果您的应用程序要求数据库已经存在,这将非常有用,您不必使用 PostgreSQL
客户端手动创建数据库。
$ docker run --name pg-0 --env POSTGRESQL_DATABASE=my_database bitnami/postgresql-repmgr:latest
首次运行时创建数据库用户
您还可以创建一个受限数据库用户,该用户仅对使用 POSTGRESQL_DATABASE
环境变量创建的数据库具有权限。 为此,请提供 POSTGRESQL_USERNAME
环境变量。
$ docker run --name pg-0 --env POSTGRESQL_USERNAME=my_user --env POSTGRESQL_PASSWORD=password123 --env POSTGRESQL_DATABASE=my_database bitnami/postgresql-repmgr:latest
此存储库中的 docker-compose.yml
文件已配置此设置。
Note!指定 POSTGRESQL_USERNAME
时,不会为 postgres
用户分配密码,因此您无法以 postgres
用户身份远程登录 PostgreSQL
服务器。如果您仍想使用用户 postgres
访问,请设置 POSTGRESQL_POSTGRES_PASSWORD
环境变量(或 POSTGRESQL_POSTGRES_PASSWORD_FILE
中指定的文件内容)。
使用流复制和 repmgr 设置 HA PostgreSQL 集群
使用以下环境变量,可以使用 Bitnami PostgreSQL HA Docker
镜像轻松设置具有[流复制](Streaming replication)和 repmgr
的 HA PostgreSQL
集群:
- POSTGRESQL_PASSWORD:postgres 用户的密码。没有默认值。
- POSTGRESQL_PASSWORD_FILE:包含 postgres 用户密码的文件的路径。 这将覆盖 POSTGRESQL_PASSWORD 中指定的值。 没有默认值。
- REPMGR_USERNAME:
repmgr
用户的用户名。默认为repmgr
。 - REPMGR_PASSWORD_FILE:包含
repmgr
用户密码的文件的路径。这将覆盖REPMGR_PASSWORD
中指定的值。 没有默认值。 - REPMGR_PASSWORD:
repmgr
用户的密码。没有默认值。 - REPMGR_USE_PASSFILE:配置
repmgr
以在其配置中使用passfile
和PGPASSFILE
而不是纯文本密码。 - REPMGR_PASSFILE_PATH:密码文件的位置,如果它不存在,它将使用
REPMGR
凭据创建。 - REPMGR_PRIMARY_HOST:初始主节点的主机名。没有默认值。
- REPMGR_PARTNER_NODES:集群中的伙伴节点的逗号分隔列表。没有默认值。
- REPMGR_NODE_NAME:节点名称。没有默认值。
- REPMGR_NODE_NETWORK_NAME:节点主机名。没有默认值。
- REPMGR_PGHBA_TRUST_ALL:这将在生成的
pg_hba.conf
中设置auth-method
。仅当您使用带有LDAP
身份验证的pgpool
时才将其设置为yes
。默认为no
。
在 HA PostgreSQL
集群中,您可以拥有一个主节点和零个或多个备用节点。主节点处于读写模式,而备用节点处于只读模式。为获得最佳性能,建议将读取限制在备用节点。
注意:对于 9.6 版之前的 Postgresql,REPMGR_USE_PASSFILE 和 REPMGR_PASSFILE_PATH 将被忽略。
使用 REPMGR_PASSFILE_PATH 挂载外部密码文件时,还需要相应地配置 REPMGR_PASSWORD 和 REPMGR_USERNAME。
Step 1: 创建 network
$ docker network create my-network --driver bridge
Step 2: 创建初始主节点
第一步是启动初始主节点:
$ docker run --detach --name pg-0 \
--network my-network \
--env REPMGR_PARTNER_NODES=pg-0,pg-1 \
--env REPMGR_NODE_NAME=pg-0 \
--env REPMGR_NODE_NETWORK_NAME=pg-0 \
--env REPMGR_PRIMARY_HOST=pg-0 \
--env REPMGR_PASSWORD=repmgrpass \
--env POSTGRESQL_PASSWORD=secretpass \
bitnami/postgresql-repmgr:latest
Step 3: 创建备用节点
接下来我们启动一个备用节点:
$ docker run --detach --name pg-1 \
--network my-network \
--env REPMGR_PARTNER_NODES=pg-0,pg-1 \
--env REPMGR_NODE_NAME=pg-1 \
--env REPMGR_NODE_NETWORK_NAME=pg-1 \
--env REPMGR_PRIMARY_HOST=pg-0 \
--env REPMGR_PASSWORD=repmgrpass \
--env POSTGRESQL_PASSWORD=secretpass \
bitnami/postgresql-repmgr:latest
使用这三个命令,您现在可以启动并运行一个两节点 PostgreSQL 主备流复制集群。 您可以通过添加/删除备用节点来扩展集群,而不会导致任何停机时间。
注意:集群会完整地复制主节点,其中包括所有用户和数据库。
如果主节点宕机,repmgr
将确保任何备用节点担任主节点,从而保证高可用性。
注意:集群中其他节点的配置需要更新,以便它们知道它们。这将需要重新启动旧节点,以适应 REPMGR_PARTNER_NODES 环境变量。
使用 Docker Compose
,可以使用此存储库中的 docker-compose.yml
文件设置 HA PostgreSQL
集群:
$ curl -sSL https://raw.githubusercontent.com/bitnami/bitnami-docker-postgresql-repmgr/master/docker-compose.yml > docker-compose.yml
$ docker-compose up -d
保护 PostgreSQL 流量
PostgreSQL
支持使用 SSL/TLS
协议对连接进行加密。如果您希望启用此可选功能,您可以使用以下环境变量来配置应用程序:
- POSTGRESQL_ENABLE_TLS:是否为流量启用
TLS
。默认为no
。 - POSTGRESQL_TLS_CERT_FILE:包含
TLS
流量证书文件的文件。没有默认值。 - POSTGRESQL_TLS_KEY_FILE:包含证书密钥的文件。没有默认值。
- POSTGRESQL_TLS_CA_FILE:包含证书
CA
的文件。如果提供,PostgreSQL
将通过向TLS/SSL
客户端请求证书来对其进行身份验证(请参阅ref)。没有默认值。 - POSTGRESQL_TLS_CRL_FILE:包含证书吊销列表的文件。没有默认值。
- POSTGRESQL_TLS_PREFER_SERVER_CIPHERS:是否使用服务器的
TLS
密码首选项而不是客户端的。默认为yes
。
启用 TLS
时,PostgreSQL
默认支持标准流量和加密流量,但更喜欢后者。下面是一些关于如何快速设置 TLS
流量的示例:
- 使用
docker run
$ docker run \
-v /path/to/certs:/opt/bitnami/postgresql/certs \
-e POSTGRESQL_ENABLE_TLS=yes \
-e POSTGRESQL_TLS_CERT_FILE=/opt/bitnami/postgresql/certs/postgres.crt \
-e POSTGRESQL_TLS_KEY_FILE=/opt/bitnami/postgresql/certs/postgres.key \
bitnami/postgresql-repmgr:latest
- 修改此存储库中存在的
docker-compose.yml
文件:
services:
pg-0:
...
environment:
...
- POSTGRESQL_ENABLE_TLS=yes
- POSTGRESQL_TLS_CERT_FILE=/opt/bitnami/postgresql/certs/postgres.crt
- POSTGRESQL_TLS_KEY_FILE=/opt/bitnami/postgresql/certs/postgres.key
...
volumes:
...
- /path/to/certs:/opt/bitnami/postgresql/certs
...
或者,您也可以在自定义配置文件中提供此配置。
配置文件
该镜像在 /opt/bitnami/repmgr/conf/
和 /opt/bitnami/postgresql/conf/
中查找 repmgr.conf
、postgresql.conf
和 pg_hba.conf
文件。您可以在 /bitnami/repmgr/conf/
挂载一个卷,并复制/编辑 /path/to/custom-conf/
中的配置文件。 如果 /bitnami/repmgr/conf/
为空,默认配置将填充到 conf/
目录。
/path/to/custom-conf/
└── postgresql.conf
由于带有 Replication manager
镜像的 PostgreSQL
是非 root 用户,因此您需要为主机中的挂载目录设置适当的权限:
$ sudo chgrp -R root /path/to/custom-conf/
$ sudo chmod -R g+rwX /path/to/custom-conf/
Step 1: 运行 PostgreSQL 镜像
运行 PostgreSQL 镜像,从您的主机挂载一个目录。
$ docker run --name pg-0 \
-v /path/to/custom-conf/:/bitnami/repmgr/conf/ \
bitnami/postgresql-repmgr:latest
或者使用 Docker Compose
:
version: '2'
services:
pg-0:
image: bitnami/postgresql-repmgr:latest
ports:
- '5432:5432'
volumes:
- /path/to/custom-conf/:/bitnami/repmgr/conf/
pg-1:
image: bitnami/postgresql-repmgr:latest
ports:
- '5432:5432'
volumes:
- /path/to/custom-conf/:/bitnami/repmgr/conf/
Step 2: 编辑配置
使用您喜欢的编辑器编辑主机上的配置。
vi /path/to/custom-conf/postgresql.conf
Step 3: 重启 PostgreSQL
更改配置后,重新启动 PostgreSQL
容器以使更改生效。
$ docker restart pg-0
或者使用 Docker Compose
:
$ docker-compose restart pg-0
$ docker-compose restart pg-1
有关配置选项的完整列表,请参阅服务器配置手册。
允许从默认 postgresql.conf
以外的文件加载设置。
除了使用自定义的 repmgr.conf
、postgresql.conf
或 pg_hba.conf
,您还可以在 /bitnami/postgresql/conf/
的卷中包含 conf.d
目录中以 .conf
结尾的文件。为此,默认的 postgresql.conf
包含以下部分:
##------------------------------------------------------------------------------
## CONFIG FILE INCLUDES
##------------------------------------------------------------------------------
## These options allow settings to be loaded from files other than the
## default postgresql.conf.
include_dir = 'conf.d' # Include files ending in '.conf' from directory 'conf.d'
如果您使用自定义 postgresql.conf
,您应该在配置文件中创建(或取消注释)上述部分,在这种情况下,结构应该类似于
/path/to/custom-conf/
└── postgresql.conf
/path/to/extra-custom-conf/
└── extended.conf
请记住为主机中的挂载目录设置适当的权限:
$ sudo chgrp -R root /path/to/extra-custom-conf/
$ sudo chmod -R g+rwX /path/to/extra-custom-conf/
Step 1: 运行 PostgreSQL 镜像
运行 PostgreSQL
镜像,从您的主机挂载一个目录。
$ docker run --name pg-0 \
-v /path/to/extra-custom-conf/:/bitnami/postgresql/conf/conf.d/ \
-v /path/to/custom-conf/:/bitnami/repmgr/conf/ \
bitnami/postgresql-repmgr:latest
或者使用 Docker Compose
:
version: '2'
services:
pg-0:
image: bitnami/postgresql-repmgr:latest
ports:
- '5432:5432'
volumes:
- /path/to/extra-custom-conf/:/bitnami/postgresql/conf/conf.d/
- /path/to/custom-conf/:/bitnami/repmgr/conf/
pg-1:
image: bitnami/postgresql-repmgr:latest
ports:
- '5432:5432'
volumes:
- /path/to/extra-custom-conf/:/bitnami/postgresql/conf/conf.d/
- /path/to/custom-conf/:/bitnami/repmgr/conf/
Step 2: 编辑配置
使用您喜欢的编辑器编辑主机上的配置。
vi /path/to/extra-custom-conf/extended.conf
Step 3: 重启 PostgreSQL
更改配置后,重新启动 PostgreSQL
容器以使更改生效。
$ docker restart pg-0
或者使用 Docker Compose:
$ docker-compose restart pg-0
$ docker-compose restart pg-1
环境变量
请在下表中查看 Bitnami PostgreSQL HA
容器中可用的环境变量列表:
Environment Variable | Default value |
---|---|
REPMGR_NODE_ID | nil |
REPMGR_NODE_ID_START_SEED | 1000 |
REPMGR_NODE_NAME | nil |
REPMGR_NODE_NETWORK_NAME | nil |
REPMGR_NODE_PRIORITY | 100 |
REPMGR_PARTNER_NODES | nil |
REPMGR_PRIMARY_HOST | nil |
REPMGR_NODE_LOCATION | default |
REPMGR_PRIMARY_PORT | 5432 |
REPMGR_PORT_NUMBER | 5432 |
REPMGR_LOG_LEVEL | NOTICE |
REPMGR_START_OPTIONS | nil |
REPMGR_CONNECT_TIMEOUT | 5 |
REPMGR_RECONNECT_ATTEMPTS | 3 |
REPMGR_RECONNECT_INTERVAL | 5 |
REPMGR_USE_REPLICATION_SLOTS | 1 |
REPMGR_MASTER_RESPONSE_TIMEOUT | 20 |
REPMGR_DEGRADED_MONITORING_TIMEOUT | 5 |
REPMGR_USERNAME | repmgr |
REPMGR_DATABASE | repmgr |
REPMGR_PASSWORD | nil |
REPMGR_PASSWORD_FILE | nil |
REPMGR_FENCE_OLD_PRIMARY | no |
REPMGR_CHILD_NODES_CHECK_INTERVAL | 5 |
REPMGR_CHILD_NODES_CONNECTED_MIN_COUNT | 1 |
REPMGR_CHILD_NODES_DISCONNECT_TIMEOUT | 30 |
REPMGR_USE_PASSFILE | nil |
POSTGRESQL_USERNAME | postgres |
POSTGRESQL_DATABASE | nil |
POSTGRESQL_PASSWORD | nil |
POSTGRESQL_PASSWORD_FILE | nil |
POSTGRESQL_POSTGRES_PASSWORD | nil |
POSTGRESQL_POSTGRES_PASSWORD_FILE | nil |
POSTGRESQL_PORT_NUMBER | 5432 |
POSTGRESQL_INITDB_ARGS | nil |
POSTGRESQL_PGCTLTIMEOUT | 60 |
POSTGRESQL_SHUTDOWN_MODE | fast |
POSTGRESQL_ENABLE_TLS | no |
POSTGRESQL_TLS_CERT_FILE | nil |
POSTGRESQL_TLS_KEY_FILE | nil |
POSTGRESQL_TLS_CA_FILE | nil |
POSTGRESQL_TLS_CRL_FILE | nil |
POSTGRESQL_TLS_PREFER_SERVER_CIPHERS | yes |
日志
Bitnami PostgreSQL HA Docker
镜像将容器日志发送到 stdout
。查看日志:
$ docker logs pg-0
如果您希望以不同的方式使用容器日志,则可以使用 --log-driver
选项配置容器 logging driver。在默认配置中,docker
使用 json-file
driver。
维护
升级这个镜像
Bitnami
提供了 PostgreSQL HA
的最新版本,包括安全补丁,这些补丁在上游发布后很快就会发布。我们建议您按照以下步骤升级容器。
Step 1: 获取更新的镜像
$ docker pull bitnami/postgresql-repmgr:latest
或者,如果您使用的是 Docker Compose
,请将 image
属性的值更新为 bitnami/postgresql-repmgr:latest
。
Step 2: 停止正在运行的容器
使用命令停止当前运行的容器
$ docker stop pg-0
或者使用 Docker Compose:
$ docker-compose stop pg-0
$ docker-compose stop pg-1
接下来,使用以下命令对持久卷 /path/to/postgresql-persistence
进行快照:
$ rsync -a /path/to/postgresql-persistence /path/to/postgresql-persistence.bkp.$(date +%Y%m%d-%H.%M.%S)
Step 3: 移除当前运行的容器
$ docker rm -v pg-0
或者使用 Docker Compose:
$ docker-compose rm -v pg-0
$ docker-compose rm -v pg-1
Step 4: 运行新镜像
从新镜像重新创建容器。
$ docker run --name pg-0 bitnami/postgresql-repmgr:latest
或者使用 Docker Compose:
$ docker-compose up pg-0
$ docker-compose up pg-1
更多
- Pgpool-II 4.3 中文手册-前言
- pgpool-II 4.3 中文手册 - 入门教程
- 「在 Kubernetes 上运行 Pgpool-Il」实现 PostgreSQL 查询(读)负载均衡和连接池
使用 bitnami/postgresql-repmgr 镜像快速设置 PostgreSQL HA的更多相关文章
- 使用 Bitnami PostgreSQL Docker 镜像快速设置流复制集群
bitnami-docker-postgresql 仓库 源码:bitnami-docker-postgresql https://github.com/bitnami/bitnami-docker- ...
- postgresql数据库linux下设置开机自启动
设置PostgreSQL开机自启动PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下cd /opt/soft_bak/postgre ...
- CentOS7下安装并简单设置PostgreSQL笔记
为什么是PostgreSQL? 在.NET Core诞生之前,微软平台上最常见的开发组件便是.NET Framework + SQL Server了,但是现在.NET Core终于让跨平台部署成为了现 ...
- Linux怎么设置PostgreSQL远程访问
原文链接: Linux怎么设置PostgreSQL远程访问 安装PostgreSQL数据库之后,默认是只接受本地访问连接.如果想在其他主机上访问PostgreSQL数据库服务器,就需要进行相应的配置. ...
- win10镜像重装,快速设置之后无限重启怎么办?
我得操作过程: 1.下载老毛桃最win8pe装机版 2.安装老毛桃到U盘, 3.格式化U盘,用extFat格式,拷贝win10镜像文件(你也可以拷贝到硬盘上) 4.插入电脑,通过U盘启动,进入PE 5 ...
- Linux下设置postgresql数据库开机启动
PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下,linux文件即为linux系统上的启动脚本: 1.将Linux文件复制到 /e ...
- [转帖]Postgresql的csv日志设置
Postgresql的csv日志设置 2012年06月16日 09:27:00 weixin_34406796 阅读数 24 原文链接:https://my.oschina.net/Kenyon/ ...
- 使用VMDepot镜像快速部署CKAN开放数据门户
最新发布的CKAN VMDepot镜像针对中国用户强化了中文支持,提升了与MS Office办公软件的互操作性,并集成了常用插件和最佳实践配置参数. 使得CKAN原本十分复杂繁琐的部署流程变得非常简单 ...
- PostgreSQL自学笔记:1 初识 PostgreSQL
博主教材:李小威.清华大学出版社.<PostgreSQL 9.6 从零开始学> 博主操作系统系统:Windows10 博主PostgreSQL版本:PostgreSQL 9.6 和 Pos ...
随机推荐
- 面向对象编程(C++篇4)——RAII
目录 1. 概述 2. 详论 2.1. 堆.栈.静态区 2.2. 手动管理资源的弊端 2.3. 间接使用 2.4. 自下而上的抽象 3. 总结 4. 参考 1. 概述 在前面两篇文章<面向对象编 ...
- SpringBoot bean映射yml中的属性举例
pom:导入配置文件处理器,配置文件进行绑定就会有提示 <dependency> <groupId>org.springframework.boot</groupId&g ...
- consumer 是推还是拉?
Kafka 最初考虑的问题是,customer 应该从 brokes 拉取消息还是 brokers 将消 息推送到 consumer,也就是 pull 还 push.在这方面,Kafka 遵循了一种大 ...
- spring中bean的五种作用域?Spring中的bean是线程安全的吗?
spring中bean的五种作用域 当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域.Spring支持如下5种作用域: singleto ...
- java集合类框架的基本接口有哪些
集合类接口指定了一组叫做元素的对象.集合类接口的每一种具体的实现类都可以以他自己的方式对元素进行保存和排序.有的集合允许重复的键,有些不允许. java集合类里面最基本 的接口: Collection ...
- Spring官宣网传大漏洞,并提供解决方案
Spring沦陷了!这样的标题这几天是不是看腻了?然而,仔细看看都是拿着之前的几个毫不相干的CVE来大吹特吹.所以,昨天发了一篇关于最近网传的Spring大漏洞的文章,聊了聊这些让人迷惑的营销文.以及 ...
- Proxy相比于defineProperty的优势
本文原链接:https://www.jianshu.com/p/860418f0785c https://blog.csdn.net/sinat_17775997/article/details/83 ...
- 从问题找原因之CSS浮动清除
问题描述 浮动元素导致的后面img标签居中对齐"失败",如下图 <div> <div class="content1"> <div ...
- html简单响应式滚动条置顶
简单响应式滚动条置顶 一般的,让页面出现滚动条的常见方法有: overflow:auto||overflow:scroll 或者overflow-x水平滚动条和overflow-y垂直滚动条 那么现在 ...
- 使用jquery-webcam插件,实现人脸采集并转base64
项目需求:在ie或chrome浏览器下,调用电脑摄像头(确保使用的是笔记本电脑,或者摄像头功能正常使用的台式机),进行人脸图像采集预览,并将图片的base64码传入到后台进行后续操作.该demo适用于 ...