背景

做了一个抓取数据的任务,定在了凌晨5点,任务调度正常执行,但是看数据总是没有最新的

考虑事务切入点的问题,后来发现问题并不在这,因为手动执行调度时是正常的

在排查问题过程中,发现打印的日志时间不对,但在容器里看,时间是正确的物理机时间,所以就考虑到了应用或JVM时区的问题

经测试,问题解决

环境

使用spring-boot:build-image打包镜像

原因

在使用spring-boot插件打包时,是使用Paketo Buildpacks作为基底构建的目标镜像,有很多默认的参数,其中就有JVM的时区设置

解决方法

只需要将时区声明到自己所在的就好了

-Duser.timezone=Asia/Shanghai

再查询一下日志,日期时间就一致了

贴上我自己的插件配置

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <addResources>true</addResources>
    <image>
      <!-- <builder>openjdk:8-jdk-alpine</builder> -->
      <!-- <runImage>openjdk:8-jdk-alpine</runImage> -->
      <name>registry.cn-qingdao.aliyuncs.com/mobe/${project.artifactId}:${project.version}</name>
      <env>
        <BP_JVM_TYPE>JDK</BP_JVM_TYPE>
        <BPE_DELIM_JAVA_TOOL_OPTIONS xml:space="preserve"> </BPE_DELIM_JAVA_TOOL_OPTIONS>
        <BPE_APPEND_JAVA_TOOL_OPTIONS>-javaagent:/skywalking/agent/skywalking-agent.jar -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai -Xms${java.memory.min}m -Xmx${java.memory.max}m -XX:-OmitStackTraceInFastThrow -XX:-UseGCOverheadLimit -XX:+HeapDumpOnOutOfMemoryError</BPE_APPEND_JAVA_TOOL_OPTIONS>
      </env>
      <publish>${mobe.docker.publish}</publish>
    </image>
    <docker>
      <publishRegistry>
        <username>${mobe.docker.username}</username>
        <password>${mobe.docker.password}</password>
        <url>registry.cn-qingdao.aliyuncs.com</url>
        <email>${mobe.docker.email}</email>
      </publishRegistry>
    </docker>
  </configuration>
</plugin>

感谢大家的阅读, 如有疑问可以加我微信