概述
我的 springboot
项目在 win
电脑开发打包为 jar
上传到 centos7
的腾讯云服务器。java
项目的配置文件如下application.yml
的代码如下
spring:
profiles:
# active: dev,primarydb-dev,dbconfig-dev,shiro # 测试服务器
# active: dev,primarydb-dev,dbconfig-local,shiro # 本地
active: pro,primarydb,dbconfig,shiro # 正式服务器
指定了使用多个配置文件。active
后面 pro
指定了使用 application-pro.yml
文件,primarydb
指定了使用 application-primarydb.yml
,dbconfig
指定了使用 application-dbconfig.yml
,shiro
指定了使用 application-shiro.yml
。
打包 jar
并上传,通过下面的命令运行
nohup java -jar /usr/local/wxxxt/wxxxt.jar > /usr/local/wxxxt/runtime.log 2>&1 &
可以正常启动。之后在目录 /usr/lib/systemd/system
制作了守护进程 wxxxt.service
,代码如下
[Unit]
Description=wxxxt # 服务描述,自定义
After=syslog.target
[Service]
Type=forking # 表示后台执行
# -DSERVICE_LOG_FOLDER 表示日志文件的存放路径
# --spring.config.location 表示使用的配置文件所在的路径
# 推荐使用外部配置文件的方式,万一端口号冲突方便修改
ExecStart=/usr/local/jdk1.8/jre/bin/java -DSERVICE_LOG_FOLDER=/usr/local/wxxxt -jar /usr/local/wxxxt/wxxxt.jar
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
此后通过 systemctl start wxxxt.service
启动项目。测试通过
遇到的问题
进行测试时我将配置文件 application.yml
中测试服务器一行取消注释,并注释其他的行,然后打包上传进行测试。当要部署到正式服务器时,我又要到 application.yml
中通过取消注释的方法开放正式服务器的配置,然后打包上传。感觉很麻烦。
我的目标
我想要在 centos 的守护进程脚本中指定使用外部配置文件,即将 wxxxt.service
修改为如下
Type=forking # 表示后台执行
# -DSERVICE_LOG_FOLDER 表示日志文件的存放路径
# --spring.config.location 表示使用的配置文件所在的路径
# 推荐使用外部配置文件的方式,万一端口号冲突方便修改
ExecStart=/usr/local/jdk1.8/jre/bin/java -DSERVICE_LOG_FOLDER=/usr/local/wxxxt -jar /usr/local/wxxxt/wxxxt.jar --spring.config.location=/usr/local/wxxxt/application.yml
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
同时将所有 application 开头的 yml 文件都拷贝到 centos7 的 jar 所在的同目录下
然后通过 systemctl start wxxxt.service
启动项目,但是项目没有成功启动并且 ssh
上没有任何提示。我要如何做才能指定使用外部配置文件启动该项目?
我感觉最佳的方式应该是使用环境变量指定active的值来控制使用的配置文件,这样你就可以通过不同的变量启动不同的环境,连service文件也不需要每次更改了,你的项目为啥要分开那么多配置文件?集中成dev、test、prod三个配置文件不可以吗?