美文网首页
springboot启动时指定jar包内部或者外部的配置文件以及

springboot启动时指定jar包内部或者外部的配置文件以及

作者: 猫尾草 | 来源:发表于2020-04-27 23:06 被阅读0次

1. 直接启动jar包

1.2 指定jar包内配置文件

  做这个的前提是你打jar包时里面就包含了不同环境配置的配置文件,主要的问题在于用-Dspring.profiles.active还是--spring.profiles.active=dev,这两个使用上有区别。
  命令:

java -jar -Dspring.profiles.active=dev {your jar}.jar

-Dspring.profiles.active=dev如果放到后面,无效,但是不会报错,此时加载的就是打包时预设置的配置文件。
  或者命令:

java -jar {your jar}.jar --spring.profiles.active=dev

--spring.profiles.active=dev如果放到前面,直接报错。
  目前发现一个特例,Dockerfile里面使用ENTRYPOINT时-Dspring.profiles.active=dev不讲究位置在哪,使用CMD时不行。

1.2 直接指定配置文件,不使用jar包内置的配置文件

  这个其实和上面的类似。
  命令:
java -jar {your jar}.jar --spring.config.location={file path}
  或者命令:
java -jar -Dspring.config.location={file path} {your jar}.jar

2. 用容器运行jar包打成的镜像

2.1 套用1的方法

  无论是在docker的CMD、ENTRYPOINT还是k8s的command命令中,都可以按照1.1的做法直接写命令。
  这里还需要注意一点,ENTRYPOINT中可以直接执行java命令,CMD和command命令则需要写/bin/sh -c java,因为使用的基础镜像不同,有的可能需要使用/bin/bash。
  如果需要1.2的做法,那么可以有两种选择:

1. 打包镜像时直接把配置文件放到镜像中,这样每个环境都要单独打镜像,麻烦;
2. 如果是只使用docker,可以把配置文件写好放在宿主机或者nfs等,然后直接挂载到容器中,启动时指定使用哪那个配置文件,这样就不用每次修改镜像;如果使用的是k8s,因为宿主机和pod通常都不是绑定的,所以只能把配置文件放到nfs这些共享文件系统中。

  这里要注意一下springboot读取配置文件的位置有如下优先级,依次降低:

1. 在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下。
2. 直接把配置文件放到jar包的同级目录。
3. 在classpath下建一个config文件夹,然后把配置文件放进去。
4. 在classpath下直接放配置文件。

  优先级最高的时命令行中指定的配置文件。

2.2 k8s使用包含配置文件的configmap

  2.1的做法的缺点是需要额外使用nfs之类的文件来保存配置文件,通过configmap可以把配置文件直接交给k8s来管理。


  如果不需要k8s或者对k8s的yaml脚本没有了解,下面的就不需要看了。
  写一个创建configmap的脚本:

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-configmap
  namespace: test-namespace
data:
  application.properties: |
    server.port=8080
    server.servlet.context-path=/test-srv
  application-dev.properties: |
    server.port=8081
    server.servlet.context-path=/test-srv

  这样就在test-namespace下的test-configmap里面创建了一个文件,文件名叫做application.properties,文件内容就是|后面的内容。这样的文件可以创建多个,例如在下面继续写的application-dev.properties。
  在k8s的Deployment脚本中,可以用上面的文件来创建一个volume,例如命名为config-volume:

volumes:
  - name: config-volume
    configMap:
      name: notify-configmap

  在Deployment脚本中使用:

volumeMounts:
  - name: config-volume
    mountPath: {容器挂载的目录1}
    subPath: application.properties
  - name: config-volume
    mountPath: {容器挂载的目录2}
    subPath: application-dev.properties

  上面的文件就挂载到了容器中,这样在启动jar包的时候就可以指定使用这些文件了。
  容器处理的顺序时先挂载目录,后执行启动命令。

相关文章

网友评论

      本文标题:springboot启动时指定jar包内部或者外部的配置文件以及

      本文链接:https://www.haomeiwen.com/subject/ojniwhtx.html