1
votes

Comment obtenir l'hôte et le port actuels dans micronaut?

J'essaye d'obtenir l'hôte et le port actuels dans l'application micronaut. comment puis-je l'obtenir de manière dynamique?

J'ai essayé @Value ("{micronaut.server.host}") et @Value ("{micronaut.server.port}") mais ne fonctionne pas.

@Controller("/some/endpoint")
class SomeController {
    @Value("{micronaut.server.host}")
    protected String host;

    @Value("{micronaut.server.port}")
    protected Long port;
}


4 commentaires

Je n'ai pas utilisé le service depuis un moment, mais pouvez-vous essayer: protected String host = environment.getProperty ("micronaut.server.host", String.class); protected Long port = environment.getProperty ("micronaut.server.port", Long.class);


Ça marche! Merci. Je le vois maintenant. Donc @Value est utilisé uniquement pour obtenir la valeur de configuration que nous avons spécifiée dans application.yml?


Je suis content que cela ait fonctionné @ below-1


Pour autant que je sache, @Value a de nombreux objectifs, mais Micronaut suggère d'obtenir les valeurs d'hôte du port et du serveur via l'environnement


3 Réponses :


0
votes

Mon erreur. Comme le dit @JaredWare, nous devrions utiliser Environment pour récupérer la propriété de l'application.

@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");
   }
}


0 commentaires

3
votes

Il existe plusieurs façons de procéder. La première consiste à les récupérer depuis le 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 commentaires

Eh bien, cela me semble plus propre. Merci


Il y a des avantages et des inconvénients à différentes approches, dont certains ne sont pas très importants dans les deux cas. Pour moi, cela me semble juste si ce que je veux vraiment savoir c'est "sur quel hôte et quel port le serveur fonctionne-t-il?" par opposition à "Quelles sont les valeurs des paramètres de configuration micronaut.server.host et micronaut.server.port ?". Si je veux savoir sur quel port le serveur fonctionne, demander au serveur semble logique. Aller aux paramètres de configuration est également très bien.



1
votes

La façon dont vous l'avez utilisée à l'origine est la même que pour la récupérer à partir de l ' environnement . Il vous manquait simplement le $ dans votre annotation @Value .

@Value ("$ {micronaut.server.host}") équivaut à env.getProperty ("micronaut.server.host", String.class)

Cela récupérera tout ce qui est configuré. Si à la place vous souhaitez le récupérer à partir du serveur intégré lui-même, vous pouvez le faire également car le port réel peut être différent du port configuré. En effet, il est tout simplement possible de ne pas configurer le port ou parce que la valeur configurée est -1, ce qui indique un port aléatoire.


0 commentaires