我正在尝试在micronaut应用程序中获取当前的主机和端口。如何以动态方式获取它?
我已经尝试过@Value(“ {micronaut.server.host}”)和@Value(“ {micronaut.server.port}”),但没有用。
@Controller("/some/endpoint")
class SomeController {
@Value("{micronaut.server.host}")
protected String host;
@Value("{micronaut.server.port}")
protected Long port;
}
答案 0 :(得分:1)
我的错误。正如@JaredWare所说,我们应该使用Environment
来检索应用程序的属性。
@Controller("/some/endpoint")
class SomeController {
@Inject
protected Environment env;
@Get
public String someMethod () {
Optional<String> host = this.env.getProperty("micronaut.server.host", String.class);
return host.orElse("defaultHost");
}
}
答案 1 :(得分:1)
有很多方法可以做到这一点。一种是从EmbeddedServer
中检索它们。
import io.micronaut.http.HttpStatus;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.runtime.server.EmbeddedServer;
@Controller("/demo")
public class DemoController {
protected final String host;
protected final int port;
public DemoController(EmbeddedServer embeddedServer) {
host = embeddedServer.getHost();
port = embeddedServer.getPort();
}
@Get("/")
public HttpStatus index() {
return HttpStatus.OK;
}
}
答案 2 :(得分:1)
您拥有它的原始方式与从environment
检索它的方式相同。您只是在$
批注中丢失了@Value
。
@Value("${micronaut.server.host}")
等效于env.getProperty("micronaut.server.host", String.class)
这将检索配置的任何内容。相反,如果您想从嵌入式服务器本身检索它,则也可以这样做,因为实际端口可能与配置的端口不同。这是因为可以简单地不配置端口,或者因为配置的值为-1(表示随机端口)。