【发布时间】:2019-02-22 00:59:25
【问题描述】:
我有一个spring boot 2 应用程序,在/static 嵌入了vuejs font-end,使用gradle 5.1。该应用程序旨在托管在不同的服务器上,因此 vuejs 应用程序的 API url 必须是动态的。
我能想到的最合理的解决方案是在服务器上设置API_IP 环境变量,让vuejs 应用程序这样检索它们:
let url = `http://${process.env.API_IP}:9090/api`;
if (process.env.NODE_ENV === 'development') {
url = `http://localhost:8090/api`;
}
gradle 构建脚本:
bootJar {
dependsOn ':ui:jar'
into('BOOT-INF/classes/static') {
from "${project(':ui').projectDir}/dist"
}
launchScript {
properties 'inlinedConfScript': 'startScript'
}
}
但是,我无法将环境变量传递给 vue 应用程序。每次尝试都以process.env.API_IP 为undefined 结束。 process.env 始终只包含 BASE_URL 和 NODE_ENV。
试过了:
-
export API_IP=*ip*然后运行 spring boot 应用。 - 设置
/etc/environment中的变量,注销,登录,运行spring boot app - 将其作为运行参数传递
-DAPI_IP=*api* - 设置
JAVA_OPTS=-DAPI_IP=*api*
根据https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html:
- 为
inlinedConfScript创建文件,其中包含API_IP=*api*和JAVA_OPTS=-DAPI_IP=*api*或仅其中一个。 - 在与
.jar文件相同的目录中创建.conf文件,并使用与#5中相同的值选项。
请帮忙:)
【问题讨论】:
-
vue是build编译成静态文件的,所以我认为你尝试的对这些静态文件没有影响。(更改环境变量,重启spring...)
-
它是静态的,不能改变,不能读取环境变量。
proccess.env是环境,而您执行npm build。在您的情况下,如果您的 vue 由 springboot 提供服务,则它们位于同一主机上,无需特定ip:port,只需请求 '/path/url'。 -
但是确实需要指定端口,因为它不是典型的 80
标签: java spring spring-boot vue.js environment-variables