1. 程式人生 > 實用技巧 >java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion 驗證碼無法顯示

java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion 驗證碼無法顯示

本地沒問題,部署到伺服器上圖片驗證碼生成報錯。原來是圖形驗證碼依賴了系統元件,只需安裝依賴即可解決。

1、Centos 7.3系統:

yum install fontconfig
fc-cache --force

2、Alpine 系統:

apk add fontconfig
apk add --update ttf-dejavu
fc-cache --force

3、專案採用docker進行構建執行,如果每次都需要重新安裝此元件,很耗時。
採取另一種措施:重新構建一個基礎映象(安裝好依賴,用於支援驗證碼功能)。後續其他映象基於此基礎映象做構建。
參考Dockerfile如下:

FROM openjdk:8-jdk-alpine
RUN apk add --update --no-cache ttf-dejavu fontconfig && rm -rf /var/cache/apk/*

構建:docker build -t new/openjdk:8-jdk-alpine .

後續業務映象基於新的基礎映象構建:

# FROM openjdk:8-jdk-alpine
FROM new/openjdk:8-jdk-alpine
ADD *.jar app.jar
EXPOSE 8080
ENV MYSQL_SERVER="127.0.0.1:3306"
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08","-jar","/app.jar"]