以编程方式获取服务器端口和contextPath - springboot

时间:2016-10-29 02:24:21

标签: rest spring-boot

如何在运行时获取服务器端口和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";

3 个答案:

答案 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顺序   旨在允许明智地覆盖价值观。属性是   按以下顺序考虑:

     
      
  1. 您的主目录上的Devtools全局设置属性   (当devtools处于活动状态时,〜/ .spring-boot-devtools.properties。)
  2.   
  3. @TestPropertySource测试注释。
  4.   
  5. 测试时的@ SpringBootTest#properties annotation属性。
  6.   
  7. 命令行参数。
  8.   
  9. 来自SPRING_APPLICATION_JSON的属性(内嵌JSON嵌入在   环境变量或系统属性)
  10.   
  11. ServletConfig init参数。
  12.   
  13. ServletContext init参数。
  14.   
  15. 来自java:comp / env。
  16. 的JNDI属性   
  17. Java系统属性(System.getProperties())。
  18.   
  19. 操作系统环境变量。
  20.   
  21. 一个只有随机属性的RandomValuePropertySource。*。
  22.   
  23. 打包后的特定于配置文件的应用程序属性    jar(application- {profile} .properties和YAML variants)
  24.   
  25. 在jar中打包的特定于配置文件的应用程序属性    (application- {profile} .properties和YAML variants)
  26.   
  27. 打包jar外的应用程序属性    (application.properties和YAML变体)。
  28.   
  29. 包装在jar中的应用程序属性    (application.properties和YAML变体)。
  30.   
  31. @Configuration类上的@PropertySource注释。
  32.   
  33. 默认属性(使用指定    SpringApplication.setDefaultProperties)。
  34.         

    为了提供一个具体的例子,假设您开发了一个@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)

注入Spring Boot属性

您可以通过以下方式在代码中注入值:

{{# 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

或者,您可以查看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;
    }
}