如何在k8s的Java服务镜像(Linux)中设置中文字体

问题描述:服务是基于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;}

后续在使用字体时即可调用此方法

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

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

相关文章

图解java.util.concurrent并发包源码系列——深入理解ConcurrentHashMap并发容器,看完薪水涨一千

图解java.util.concurrent并发包源码系列——深入理解ConcurrentHashMap并发容器 HashMap简单介绍HashMap在并发场景下的问题HashMap在并发场景下的替代方案ConcurrentHashMap如何在线程安全的前提下提升并发度1.71.8 JDK1.7的ConcurrentHashMap源码JDK1.8的ConcurrentHashMap源…

python 字符串str与字典dict转换

目录 python 字符串str与字典dict转换 字典转字符串字符串转字典 带引号不带引号 python 字符串str与字典dict转换 字典转字符串 c {a: 1, b: 1} bstr(c) print(b,type(b)) 字符串转字典 字符串转字典分两种情况,需要根据你的字符串内容是否带引号决定,…

网络流学习笔记

网络流基础 基本概念 源点(source) s s s,汇点 t t t。 容量:约等于边权。不存在的边流量可视为 0 0 0。 ( u , v ) (u,v) (u,v) 的流量通常记为 c ( u , v ) c(u,v) c(u,v)(capacity)。 流&#xff…

解决MySQL大版本升级导致.Net(C#)程序连接报错问题

数据库版本从MySQL 5.7.21 升级到 MySQL8.0.21 数据升级完成后&#xff0c;直接修改程序的数据库连接配置信息 <connectionStrings> <add name"myConnectionString" connectionString"server192.168.31.200;uidapp;pwdFgTDkn0q!75;databasemail;&q…

C# 超链接 LinkLabel 类 控件

LinkLabel 类 参考 反馈 定义 命名空间: System.Windows.Forms 程序集: System.Windows.Forms.dll 表示可显示超链接的 Windows 标签控件。 C#复制 public class LinkLabel : System.Windows.Forms.Label, System.Windows.Forms.IButtonControl 继承 Object Marsh…

【语义分割】语义分割概念及算法介绍

文章目录 一、基本概念二、研究现状2.1 传统算法2.2 深度学习方法 三、数据集及评价指标3.1 常用数据集3.2 常用指标 四、经典模型参考资料 一、基本概念 语义分割是计算机视觉中很重要的一个方向。不同于目标检测和识别&#xff0c;语义分割实现了图像像素级的分类。它能够将…

使用langchain-chatchat里,faiss库中报错: AssertionError ,位置:assert d == self.d

发生报错&#xff1a; AssertionError&#xff0c;发生位置&#xff1a;class_wrappers.py里 assert d self.d&#xff0c;假如输出语句&#xff0c;查看到是因为d和self.d维度不匹配造成&#xff0c;解决方式&#xff1a; 删除langchain-chatchat/knowledge_base里的info.db…

【iOS免越狱】利用IOS自动化web-driver-agent_appium-实现自动点击+滑动屏幕

1.目标 在做饭、锻炼等无法腾出双手的场景中&#xff0c;想刷刷抖音 刷抖音的时候有太多的广告 如何解决痛点 抖音自动播放下一个视频 iOS系统高版本无法 越狱 安装插件 2.操作环境 MAC一台&#xff0c;安装 Xcode iPhone一台&#xff0c;16 系统以上最佳 3.流程 下载最…

Python 算法高级篇:堆排序的优化与应用

Python 算法高级篇&#xff1a;堆排序的优化与应用 引言 1. 什么是堆&#xff1f;2. 堆的性质3. 堆排序的基本原理4. 堆排序的 Python 实现5. 堆排序的性能和优化6. 堆排序的实际应用7. 总结 引言 堆排序是一种高效的排序算法&#xff0c;它基于数据结构中的堆这一概念。堆排序…

C++进阶语法——OOP(面向对象)【学习笔记(四)】

文章目录 1、C OOP⾯向对象开发1.1 类&#xff08;classes&#xff09;和对象&#xff08;objects&#xff09;1.2 public、private、protected访问权限1.3 实现成员⽅法1.4 构造函数&#xff08;constructor&#xff09;和 析构函数&#xff08;destructor&#xff09;1.4.1 构…

Java基础 多线程

1.多线程创建方式1&#xff0c;继承Thread类&#xff1a; 2.多线程创建方式2&#xff1a; 匿名内部类写法 package thread;public class ThreadTest {public static void main(String[] args) {Runnable runnable new Runnable() {Overridepublic void run() {for (int i 0…

笔记本电脑的摄像头找不到黑屏解决办法

这种问题一般来说就是缺少驱动&#xff0c;就要下载驱动。 问题&#xff1a; 解决办法&#xff1a; 1.进入联想官网下载驱动 网站&#xff1a;https://newsupport.lenovo.com.cn/driveDownloads_index.html?v9d9bc7ad5023ef3c3d5e3cf386e2f187 2.下载主机编号检测工具 3.下…

虚幻中的网络概述一

前置&#xff1a;在学习完turbo强大佬的多人fps之后发觉自己在虚幻网络方面还有许多基础知识不太清楚&#xff0c;结合安宁Ken大佬与虚幻官方文档进行补足。 补充&#xff1a;官方文档中的描述挺好的&#xff0c;自己只算是搬运和将两者结合加强理解。 学习虚幻中的网络先从虚…

【Python机器学习】零基础掌握KNNImputer缺失值填充

面临数据不完整怎么办? 在日常生活和工作中,不完整或者缺失的数据是一个很常见的问题。例如,在医疗研究中,由于各种原因,如失访、设备故障等,数据集中可能存在一些缺失值。这些缺失值会影响后续的数据分析和模型训练。 KNNImputer(K-近邻插补)是一个非常实用的工具,…

【Docker】Python Flask + Redis 练习

一、构建flask镜像 1.准备文件 创建app.py,内容如下 from flask import Flask from redis import Redis app Flask(__name__) redis Redis(hostos.environ.get(REDIS_HOST,127.0.0.1),port6379)app.route(/) def hello():redis.incr(hits)return f"Hello Container W…

深度学习中的epoch, batch 和 iteration

名词定义epoch使用训练集的全部数据进行一次完整的训练&#xff0c;称为“一代训练”batch使用训练集中的一小部分样本对模型权重进行一次反向传播的参数更新&#xff0c;这样的一部分样本称为&#xff1a;“一批数据”iteration使用一个batch的数据对模型进行一次参数更新的过…

串行原理编程,中文编程工具中的串行构件,串行连接操作简单

串行通信原理编程&#xff0c;中文编程工具中的串行通信构件&#xff0c;串行通信连接设置简单 编程系统化课程总目录及明细&#xff0c;点击进入了解详情。https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502 串行端口 是串行的基础&#…

【C++】类与对象 第二篇(构造函数,析构函数,拷贝构造,赋值重载)

目录 类的6个默认成员函数 初始化和清理 1.构造函数 2.析构函数 3.共同点 拷贝复制 1.拷贝构造 使用细节 2.赋值重载 运算符重载 < < > > ! 连续赋值 C入门 第一篇(C关键字&#xff0c; 命名空间&#xff0c;C输入&输出)-CSDN博客 C入门 第二篇( 引…

Python学习笔记--类和对象

五、类和对象 1、类和对象之间的关系 这部分内容主要讲类和对象,我们先来说说类和对象之间的关系。 类是对象的模板 我们得先有了类,才能制作出对象。 类就相对于工厂里面的模具,对象就是根据模具制造出来的产品。 从模具变成产品的过程,我们就称为类的实例化。 类实…

POJ 3981:字符串替换 ← C++

【题目来源】http://poj.org/problem?id3981【题目描述】 编写一个C程序实现将字符串中的所有"you"替换成"we"。【输入格式】 输入包含多行数据。 每行数据是一个字符串&#xff0c;长度不超过1000。 数据以EOF结束。【输出格式】 对于输入的每一行&#…