我想创建一个在启动时显示应用程序名称的框架。针对命令行界面应用程序。
问题:如何以通用方式获取这样的应用程序名称?
例如 spring 提供了一个属性,但默认情况下没有设置:
@Value("${spring.application.name}")
private String appname;
而且我不想显式设置该属性。寻找某种“默认应用程序名称”。
在 Java EE 容器中还有以下选项:
String myApplicationName = (String) initialContext.lookup("java:app/AppName");
但是 CLI
应用程序怎么样?如何获得某种通用应用程序名称?
最佳答案
如果我正确解释了你的问题,你能得到的最接近的是:
- 查找哪个类正在运行
public static void main(String [] args)
方法 - 获取其
simpleName
- 将上述名称存储到系统属性中
为此,您有两个选择:
- 调用
Thread.currentThread().getStackTrace()
,并检查其尾部元素。但这也必须在主线程中执行,否则您将无法检索正确的StackTraceElement
; - 调用 Thread:getAllStackTraces() ,并解析整个映射以识别主线程,获取相应的值,并选择其最后一个
StackTraceElement
一旦有了StackTraceElement
,您就可以调用 StackTraceElement:getClassName()这将返回类似的内容
scala.tools.nsc.MainGenericRunner
拆分字符串,将其保存到系统属性中,然后就可以开始了。
希望对您有帮助。
关于java - 如何在cli中获取默认应用程序名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45755773/