如何在运行时获取服务器端口和contextPath?
在application.yml中,我正在设置这些值:
server:
port: 9300
contextPath: '/apis'
在代码中,我正在构建一个JSONAPI响应,以包含一个返回REST API的引用,因此需要以编程方式获取
{
"relationships": {
"company": {
"links": {
"related": "/api/v1/users/1/company"
}
},
"pets": {
"links": {
"related": "/api/v1/users/1/pets"
}
}
}
}
示例,
String related = port? + contextPath? + "/users" + userId + "company";
答案 0 :(得分:3)
以下摘自http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html:
Spring Boot允许您将配置外部化,以便您可以 在不同的环境中使用相同的应用程序代码。您可以 使用属性文件,YAML文件,环境变量和 外部化配置的命令行参数。财产价值 可以使用
@Value
直接注入您的bean 注释,通过Spring的Environment抽象访问或绑定到 结构化对象通过@ConfigurationProperties
。Spring Boot使用非常特殊的PropertySource顺序 旨在允许明智地覆盖价值观。属性是 按以下顺序考虑:
- 您的主目录上的Devtools全局设置属性 (当devtools处于活动状态时,〜/ .spring-boot-devtools.properties。)
- @TestPropertySource测试注释。
- 测试时的@ SpringBootTest#properties annotation属性。
- 命令行参数。
- 来自SPRING_APPLICATION_JSON的属性(内嵌JSON嵌入在 环境变量或系统属性)
- ServletConfig init参数。
- ServletContext init参数。
- 来自java:comp / env。
的JNDI属性- Java系统属性(System.getProperties())。
- 操作系统环境变量。
- 一个只有随机属性的RandomValuePropertySource。*。
- 打包后的特定于配置文件的应用程序属性 jar(application- {profile} .properties和YAML variants)
- 在jar中打包的特定于配置文件的应用程序属性 (application- {profile} .properties和YAML variants)
- 打包jar外的应用程序属性 (application.properties和YAML变体)。
- 包装在jar中的应用程序属性 (application.properties和YAML变体)。
- @Configuration类上的@PropertySource注释。
- 默认属性(使用指定 SpringApplication.setDefaultProperties)。
醇>为了提供一个具体的例子,假设您开发了一个@Component 使用名称属性:
import org.springframework.stereotype.* import org.springframework.beans.factory.annotation.* @Component public class MyBean { @Value("${name}") private String name; // ... }
在您的应用程序类路径上(例如在您的jar中),您可以拥有一个 application.properties,提供合理的默认属性值 为了名字。在新环境中运行时, application.properties可以在你的jar之外提供 覆盖名称;对于一次性测试,您可以使用 特定的命令行开关(例如java -jar app.jar --name =" Spring")。
[Tip]可以提供SPRING_APPLICATION_JSON属性 带有环境变量的命令行。例如在UN * X中 壳:
$ SPRING_APPLICATION_JSON='{"foo":{"bar":"spam"}}' java -jar myapp.jar
在这个例子中,你将在Spring中使用foo.bar = spam 环境。您还可以将JSON提供为spring.application.json 在一个系统变量中:
$ java -Dspring.application.json='{"foo":"bar"}' -jar myapp.jar
或命令行参数:
$ java -jar myapp.jar --spring.application.json='{"foo":"bar"}'
或作为JNDI变量
java:comp/env/spring.application.json.
答案 1 :(得分:1)
您可以通过以下方式在代码中注入值:
{{# each movies}}
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
<!--<img src="..." alt="...">-->
<div class="caption">
<h3><a href="/movie/{{this._id}}">{{this.title}}</a></h3>
<p>Rating :
{{#each ../ratings}}
{{this}}
{{/each}}
</p>
<p>Genre: <b>{{this.genre}}</b></p>
<p>{{this.description}}</p>
<p><a href="#" class="btn btn-default" role="button">Modify</a> <a href="delete/{{this._id}}" class="btn btn-primary" role="button">Delete</a></p>
</div>
</div>
</div>
{{/each}}
或者,您可以查看Hateoas项目,该项目可以为您生成链接部分:http://docs.spring.io/spring-hateoas/docs/current/reference/html
答案 2 :(得分:1)
使用@Value
注释将属性注入到类的成员变量中。你可以这样做:
@Component
public class Foo
{
@Value("${server.port}")
String serverPort;
@Value("${server.contextPath}")
String contextPath;
public void doSomething()
{
String str = "serverPort: " + serverPort + "; contextPath: " + contextPath;
}
}