MYSQL 8 上使用正则表达式获取字符串
问题
使用 Nacos 进行微服务配置管理的时候,要构建新的 docker container 用来打包所有的微服务,并暴露所有的端口。由于微服务数量比较多,其端口分别配置在自己所属的配置文件内。因此手工处理的话,耗时且难于保证准确。因此直接使用 nacos 的数据库,通过 sql 的办法取出端口号,就成为一个更好的解决方案。
解决
打开 nacos 的配置数据库,nacos 的配置文件存在于表his_config_info
,所以只要查询该表即可。
使用如下语句查看配置:
-- 我主要取的是测试服务的端口
SELECT h.data_id,h.content FROM his_config_info h where data_id LIKE '%-test1.yml';
得到如下图的配置结果记录集:
-- 使用 REGEXP_SUBSTR 函数进行正则表达式提取字符串,并使用REPLACE函数替换掉多余的内容
SELECT
REPLACE(data_id,'-test1.yml','') as service,
REPLACE(REGEXP_SUBSTR(h.content, 'port: [0-9]{5}'),'port:','') as port
FROM his_config_info h
WHERE h.data_id like '%-test1.yml';
因为我只想要端口号,因此执行:
SELECT
REPLACE(REGEXP_SUBSTR(h.content, 'port: [0-9]{5}'),'port:','') as port
FROM his_config_info h where h.data_id like '%-test1.yml';
然后撰写 docker-compose.yml 的时候使用编辑器,例如 vscode 的列模式,通过列模式的复制粘贴最后将代码修改如下图所示: