在spring boot中找到嵌入式tomcat的应用程序库

时间:2016-04-13 07:02:27

标签: java spring spring-mvc tomcat spring-boot

我正在使用春季靴子。我正在开发一个Web应用程序,我需要获取应用程序库以生成电子邮件的链接。为此我需要获取基本URL。由于嵌入了tomcat request.getContextpath() 返回null。我需要动态获取localhost:8080,以便在将其部署到服务器时,我不必更改代码。

2 个答案:

答案 0 :(得分:0)

在Spring启动应用程序中,您可以使用属性server.context-path = your-path

更改application.properties中的服务器上下文。

在您的代码中,您可以参考以下属性

@SpringBootApplication
@EnableConfigurationProperties(ServerProperties.class)
public class DemoApplication implements CommandLineRunner{

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Autowired
    ServerProperties serverProperties;

    @Override
    public void run(String... strings) throws Exception {
        System.out.println("serverProperties.getContextPath(): " + serverProperties.getContextPath());
    }
}

这里的关键点是在@EnableConfigurationProperties(ServerProperties.class)类上使用@Configuration,然后使用注入的fiels ServerProperties来消耗该值。

我希望这可以帮助你...

答案 1 :(得分:0)

嗯,这花了我一些时间到达那里但是:

@SpringBootApplication
public class TestServiceApplication {

public static void main(String[] args) {
    AnnotationConfigEmbeddedWebApplicationContext context = (AnnotationConfigEmbeddedWebApplicationContext)SpringApplication.run(TestServiceApplication.class, args);
    TomcatEmbeddedServletContainer tomcatContainer = (TomcatEmbeddedServletContainer)context.getEmbeddedServletContainer();

    String host = tomcatContainer.getTomcat().getHost().getName();
    int port = tomcatContainer.getPort();

    System.out.println("Host:port " + host + ":" + port);

}

}

输出:Host:port localhost:8080

这就是你想要的吗?