黄埔区建设局网站,石家庄上门洗车,临淄关键词网站优化培训中心,徐州推广网络营销公司问题描述#xff1a;服务是基于springboot的Java服务#xff0c;在项目上是通过Maven的谷歌插件打包#xff0c;再由k8s部署的。k8s的镜像就是一个Java服务#xff0c;Java服务用到了中文字体。 解决这个问题首先需要搞定镜像字体的问题。有很多类似的解决方案#xff0c;…问题描述服务是基于springboot的Java服务在项目上是通过Maven的谷歌插件打包再由k8s部署的。k8s的镜像就是一个Java服务Java服务用到了中文字体。 解决这个问题首先需要搞定镜像字体的问题。有很多类似的解决方案解决的思路是ubuntu或者centos中改变某些配置去让系统能够支持中文字体。链接在这里 不过这种解决方式在服务器中能够生效在k8s的镜像中就不生效了。原因在于修改某些配置后需要重启生效但是通过Google插件打包的java镜像本身就是一个进程重启后原有的进程被杀死原有的配置也没有了。再此提供两种解决方法。 1 修改原本的打包镜像在原有镜像的基础上加上字体然后把字体打包。使用的打包文件结构如下 其中主文件夹为myimage下面有两个文件Dockerfile和字体Font字体文件新建了一个名为font的文件夹文件夹下是下载好的中文字体一般是在Windows系统的C:\Windows\Fonts路径下。我的font目录下存放了上述文件夹下的宋体。Dockerfile的内容如下 FROM xxxxxx/openjdk:oraclelinux7-tini
RUN 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.ttcString 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;}后续在使用字体时即可调用此方法