У меня есть куча небольших сервисов, удобно называемых Microservices ;-), что все имеют одинаковое поведение при запуске. Они расположены в пакетах - каждый на одну услугу. Пакет именование, как это:java получить имя пакета класса
com.foo.bar.Application
где com.foo является доменной частью, бар фактического имени службы и приложение мой главным экземпляра класс с основным методом.
Теперь, когда я хотел бы сделать это, распечатайте стандартное сообщение журнала, когда они запущены, показывая URL-адрес, который пользователь может запросить, чтобы получить некоторую информацию об услуге. По определению URL-адрес, чтобы получить информацию о для службы должна быть сконструирована так:
IP:PORT/bar/admin/info
Я пытался получить эту bar.name с GetClass() ... и тому подобными, но это не работает. Так что я попытался это:
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];}
Но, как вы уже догадались, это печатает слишком много:
class com.foo.bar.Application
Где все, что я хотел бы получить это
bar
Как я могу это достичь?
Кстати, я использую Java 8 и Spring загрузки - если это помогает
С наилучшими пожеланиями,
Крис
Привет, Эрнест, спасибо. Это решило! – siliconchris