Angularjs 弹簧&x2B;角度+;使用命令行参数构建JAR

Angularjs 弹簧&x2B;角度+;使用命令行参数构建JAR,angularjs,spring,Angularjs,Spring,我正在为Spring服务器将UI构建到JAR中。我有一堆有棱角的JS页面。我想向我的jar传递一个命令行参数,告诉它API服务器的位置如下: java -jar application.jar --api=http://ip:9000 因此,我的application.properties文件具有: url=${api:http://localhost:9000} 我目前的做法是,在我的每个.html页面上都有一个硬编码的js配置文件: <script src="../js/appNa

我正在为Spring服务器将UI构建到JAR中。我有一堆有棱角的JS页面。我想向我的jar传递一个命令行参数,告诉它API服务器的位置如下:

java -jar application.jar --api=http://ip:9000
因此,我的application.properties文件具有:

url=${api:http://localhost:9000}
我目前的做法是,在我的每个.html页面上都有一个硬编码的js配置文件:

<script src="../js/appName/config.angular.js"></script>
并在每个文件中调用:

$scope.apiUrl  = configData.url;

如何在运行时使用JAR命令行参数替代applications.properties文件,而不是现在的编码方式

我是否理解正确:客户端部分由应用程序交付?所以最后一句的“在运行时”部分更像是“引导/初始加载”,对吗?一种(老式)方法是通过应用程序(一个简单的模板引擎)提供条目html(例如index.html),并通过JS配置对象中的setter提供所需信息:

// pseudo js code with thymeleaf
<script th:inline="javascript">
/*<![CDATA[*/

  myConfig.url = [[${#httpServletRequest.remoteHost}]];

/*]]>*/
</script>
//带有thymeleaf的伪js代码
/**/
这只是一个只设置远程主机名的示例,但我想您已经明白了


旁注:我还是不明白你为什么要设置这个。如果应用程序包含客户端代码,为什么要使用远程调用的绝对URL?(免责声明:我只有Angular(2)方面的经验,没有AngularJS方面的经验)

当您从命令行传递一个值,并且属性文件中存在相同的属性名称时,spring boot将覆盖命令行中的值。所以为了达到你的目的,你可以做这样的事情

在application.properties中

#this is default value
app.url=localhost:8080
创建一个类来映射属性值,或者可以根据项目结构使用现有类或其他类

@Component
public class Sample {

    @Value("${app.url}")
    private String url;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }   
}
现在,当您使用参数
--app.url=“someserver:9090”
执行jar时,该值将被覆盖,您可以在任何地方使用该值

请注意,如果您试图使用表达式直接在jsp中访问属性值,它也会起作用

试试看,它很管用。我在最新的项目中使用了相同的东西,这是一个复合微服务,每个组件都需要彼此的url

[编辑]
参考资料:

您在使用maven吗?然后您可以使用配置文件,它们为您提供每个环境(测试、生产)的参数值选择,您可以从此链接中检出,因为我有多个不同的API服务器,具体取决于数据类型、访问等,而且IP会不断旋转,所以我需要一种在UI启动时传递API服务器地址和端口的方法。你需要知道如何覆盖属性文件中的值,还是需要知道如何在js文件中访问它?如何在js文件中访问它。我需要设置它,因为这个UI将像笔记本一样。我可以将其分发给用户,他们可以根据希望查看/访问的数据类型连接到几个不同的API服务器。所以不要做一堆罐子。另外,IP不是静态的,我们经常让它旋转。我不认为你的解决方案对我有效,因为我上面提到的原因。我会尝试一下。
@Component
public class Sample {

    @Value("${app.url}")
    private String url;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }   
}