Gradle Spring Boot将环境变量传递给嵌入式vuejs应用

时间:2019-02-22 00:59:26

标签: java spring spring-boot vue.js environment-variables

我有一个spring boot 2应用程序,它使用gradle vuejs/static处嵌入了5.1字体结尾。该应用程序旨在托管在不同的服务器上,因此vuejs应用程序的API网址必须是动态的。

我能想到的最合理的解决方案是在服务器上设置API_IP环境变量,并让vuejs应用程序像这样检索它们:

let url = `http://${process.env.API_IP}:9090/api`;

if (process.env.NODE_ENV === 'development') {
    url = `http://localhost:8090/api`;
}

渐变构建脚本:

bootJar {
    dependsOn ':ui:jar'

    into('BOOT-INF/classes/static') {
        from "${project(':ui').projectDir}/dist"
    }

    launchScript {
        properties 'inlinedConfScript': 'startScript'
    }
}

但是,我无法将环境变量传递给vue应用。每次尝试都以process.env.API_IPundefined结束。 process.env始终仅由BASE_URLNODE_ENV组成。

尝试过:

  1. export API_IP=*ip*,然后运行spring boot应用程序。
  2. /etc/environment中设置变量,注销,登录并运行spring boot应用程序
  3. 将其作为运行参数-DAPI_IP=*api*
  4. 传递
  5. 设置JAVA_OPTS=-DAPI_IP=*api*

根据https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html

  1. inlinedConfScript创建文件,其中包含API_IP=*api*JAVA_OPTS=-DAPI_IP=*api*或仅包含其中一个。
  2. 在与.conf文件相同的目录中创建.jar文件,并使用与#5中相同的值选项。

请帮助:)

2 个答案:

答案 0 :(得分:0)

如果您使用的是Vue-cli:

  

您可以通过将.env文件放入您的文件中来指定env变量   项目根目录

     

一个环境文件仅包含以下项的键=值对   环境变量:

对于每个环境,您可以具有不同的.env文件,例如: <% if current_user?(micro_post.user) %> <%= link_to ' | Delete', micro_post_path(micro_post), method: :delete , data: { confirm: "Are you sure" } %> <% end %> .env.production

https://cli.vuejs.org/guide/mode-and-env.html#environment-variables

答案 1 :(得分:0)

部分解决方案是从vuejs请求中删除IP /域作为@tianzhipeng的注释。但是在这种情况下,我只能在端口8080上运行后端。