java.lang.NullPointerException: null
at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1288)
.....
在使用Docker容器運行springboot程序時,驗證碼請求需要使用到字體庫,本機運行沒有問題,放到服務器上在容器中運行出現NPE問題,由於openjdk9中默認不帶有awt字體庫,所以獲取字體出現NPE.
docker容器環環境openjdk9, Unbuntu18.04 , 解決方式就是安裝fontconfig字體庫,Dockerfile如下:
FROM adoptopenjdk/openjdk9
LABEL manitainer="tm<[email protected]>"
LABEL description="This is demo service."
ARG APP_HOME=/app/
ARG APP_NAME=demo-srv
ARG APP_BOOT=${APP_NAME}-boot
VOLUME /tmp
ADD ${APP_BOOT}.tar $APP_HOME
# for openjdk awt font solution 安裝fontconfig庫,處理NPE問題
RUN apt update && apt install fontconfig -y && apt install --fix-broken -y
RUN mkdir -p ${APP_HOME}log/ \
&& mv ${APP_HOME}${APP_BOOT}/bin/${APP_NAME} ${APP_HOME}${APP_BOOT}/bin/start \
&& mv ${APP_HOME}${APP_BOOT}/* ${APP_HOME} && rm -rf ${APP_HOME}${APP_BOOT}
ENV BOOT_ARG -Djava.security.egd=file:/dev/./urandom -Dlogging.path=/app/log/
EXPOSE 8000
WORKDIR ${APP_HOME}
ENTRYPOINT ./bin/start
通過apt 更新和安裝字體庫後,不再出現NPE問題。github上有人說openjdk的字體庫問題會在openjdk11解決,沒測試,有時間可以用openjdk11試一試。🤨