如何在k8s的Java服务镜像(Linux)中设置中文字体
最佳答案 问答题库718位专家为你答疑解惑
问题描述:服务是基于springboot的Java服务,在项目上是通过Maven的谷歌插件打包,再由k8s部署的。k8s的镜像就是一个Java服务,Java服务用到了中文字体。
解决这个问题首先需要搞定镜像字体的问题。有很多类似的解决方案,解决的思路是ubuntu或者centos中改变某些配置去让系统能够支持中文字体。链接在这里
不过这种解决方式在服务器中能够生效,在k8s的镜像中就不生效了。原因在于修改某些配置后,需要重启生效,但是通过Google插件打包的java镜像本身就是一个进程,重启后原有的进程被杀死,原有的配置也没有了。再此提供两种解决方法。
1 修改原本的打包镜像:在原有镜像的基础上加上字体,然后把字体打包。使用的打包文件结构如下:
其中主文件夹为myimage,下面有两个文件:Dockerfile和字体Font文件夹。文件夹下是下载好的中文字体,一般是在Windows系统的C:\Windows\Fonts路径下。我的font目录下存放了上述文件夹下的宋体。Dockerfile的内容如下:
# Java服务的镜像地址,按照自己使用的镜像进行修改
FROM xxxxxx/openjdk:oraclelinux7-tiniRUN yum -y install fontconfig
COPY ./fonts /usr/share/fonts
RUN yum -y install ttmkfdir && ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir && fc-cache
使用Docker将上述的文件进行打包再推送到docker的镜像仓库,然后把上推镜像仓库重新取个名字,在Maven仓库重新引用新的镜像地址就可以了。如下图:
旧镜像支持的字体如下:
新镜像支持的字体如下:
可以明显看到,新镜像支持的字体包含了宋体
2 引入外部字体,即先将下好的字体放在某一个目录下,再根据这个字体使用Font类新建一个字体。实现如下:
import java.io.InputStream;
import java.awt.Font;private Font getFont(int style, int size) {// 字体在Linux镜像下的路径根据实际情况来。我的服务器在root/logs下面已有了宋体字体(simsun.ttc)String path = "/root/logs/simsun.ttc";InputStream imputstream= this.getClass().getResourceAsStream(path);Font font = null;try {font = Font.createFont(Font.TRUETYPE_FONT, imputstream);} catch (Exception e) {logger.error("新建字体异常", e);return null;}Font newFont = font.deriveFont(style, size);return newFont;}
后续在使用字体时即可调用此方法
99%的人还看了
相似问题
- 树莓派镜像安装 + 设置 + 镜像批量化操作 - 自动化烧写工具 (四)
- composer切换全局镜像源的方法
- 推荐一个windows上传linux服务器/linux服务器的docker镜像的工具,摆脱docker cp,以及解决常见问题。
- docker下移除不使用的镜像、容器、卷、网络
- 一起学docker系列之四docker的常用命令--系统操作docker命令及镜像命令
- qcow2、raw、vmdk等镜像格式工具
- 获取阿里云Docker镜像加速器
- 3.8-镜像的发布
- 【备忘录】Docker容器、镜像删除与资源清理命令
- 8.jib-maven-plugin构建springboot项目镜像,docker部署配置
猜你感兴趣
版权申明
本文"如何在k8s的Java服务镜像(Linux)中设置中文字体":http://eshow365.cn/6-27383-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 综合OA管理系统源码 OA系统源码
- 下一篇: 2-多媒体数据压缩国际标准