J'ai un tas de petits services, commodément appelés Microservices ;-), qui ont tous le même comportement de démarrage. Ils sont disposés en paquets - chacun pour un service. La désignation du paquet est comme ceci:Java obtenir le nom du paquet de la classe
com.foo.bar.Application
où com.foo est la partie de domaine, un bar est le nom du service et l'application réelle est ma classe principale instance avec la principale méthode.
Maintenant, ce que je voudrais faire est d'imprimer un message de journal standardisé quand ils sont démarrés, montrant l'URL qu'un utilisateur peut demander pour obtenir des informations sur le service. Par définition, l'URL pour obtenir d'infos pour le service doivent être construits comme ceci:
IP:PORT/bar/admin/info
J'ai essayé d'obtenir ce bar.name avec getClass() ... etc., mais cela ne fonctionne pas. J'ai donc essayé ceci:
LOG.info("Access URLs:\n----------------------------------------------------------\n" +
"\tLocal: \t\thttp://127.0.0.1:{}/" + getMyClass() + "/info\n" +
"\tExternal: \thttp://{}:{}/" + getMyClass() + "/info\n----------------------------------------------------------",
env.getProperty("server.port"),
InetAddress.getLocalHost().getHostAddress(),
env.getProperty("server.port")
);
/**
* Get the name of the application class as a static value, so we can show it in the log
*/
public static final Class[] getClassContext() {
return new SecurityManager() {
protected Class[] getClassContext(){return super.getClassContext();}
}.getClassContext();
};
public static final Class getMyClass() { return getClassContext()[2];}
Mais comme vous avez déjà deviné, ce imprime beaucoup trop:
class com.foo.bar.Application
Où tout ce que je voudrais faire est
bar
Comment puis-je atteindre cet objectif???
Soit dit en passant, j'utilise Java 8 et démarrage de printemps - si cela aide
Meilleures salutations,
Quelque chose comme Chris
Salut Ernest, merci. Cela a résolu! – siliconchris