如何解决Spring Boot非Web IDE运行,Maven运行和命令行运行器-让我知道运行的正式方式
最近将一个旧的Java项目转换为Spring启动,在构建项目,IDE运行,命令运行时遇到了一些问题。我看不到运行Spring Boot非网络或独立应用程序的任何正式流程。
我们通过调用Main方法(NLP组件,与域相关的Word,词组检测器,ML POC,业务流程复杂算法)来独立运行许多类,每个过程耗时数小时。
Spring Boot主要应用程序
import com.example.demo.service.MyMain2;
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
private static final Logger logger = LoggerFactory.getLogger(DemoApplication.class);
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class,args);
}
@Override
public void run(String... args) throws Exception {
System.out.println("run..");
new MyMain2().process();
}
}
使用Main方法假设一个类。
@Component
public class MyMain implements CommandLineRunner {
private static final Logger logger = LoggerFactory.getLogger(MyMain.class);
@Override
public void run(String... args) {
this.process();
}
public void process() {// takes 6 to 8 hrs
System.out.println("MyMain!");
logger.debug("MyMain!");
logger.info("MyMain!");
}
}
另一个带有Main方法的类(它可以运行很长时间)。
@Component
public class MyMain2 {
private static final Logger logger = LoggerFactory.getLogger(MyMain2.class);
public static void main(String[] args) {
new MyMain2().process();
}
public void process() {//takes 6 to 8 hrs
System.out.println("MyMain 2!");
logger.debug("MyMain 2!");
logger.info("MyMain 2!");
}
}
以下是我运行应用程序的情况。
IDE运行::运行DemoApplication也在调用我的main()并显示信息记录器,这很好!
在IDE上进行Maven安装命令:触发DemoApplication还会调用我的main()并显示信息记录器,所以也可以!
有时候,我的目标是构建并生成Jar,然后使用命令“ java -jar app.jar”在命令提示符下从类运行main方法。在这一点上,我不希望在构建项目时调用MyMain2.main()方法的构建过程,但是在命令提示符下运行时应该调用它。
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
private static final Logger logger = LoggerFactory.getLogger(DemoApplication.class);
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class,args);
}
@Override
public void run(String... args) throws Exception {
System.out.println("run..");
}
}
在IDE中运行MyMain2.java中的main方法:这也打印了调试记录器,这很烦人。
POM.xml
<properties> <java.version>1.8</java.version> <start-class>com.example.demo.service.MyMain2</start-class> </properties>
java -jar app-0.0.1-SNAPSHOT.jar
设置开始类正在运行,但是显示不需要的调试记录器。
java -jar app-0.0.1-SNAPSHOT.jar --info
仍然显示调试记录器,因此我删除了起始类。
最后,当我想在另一台计算机的命令提示符下运行生成的jar文件时,我正在采用以下方法。
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
private static final Logger logger = LoggerFactory.getLogger(DemoApplication.class);
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class,args);
}
@Override
public void run(String... args) throws Exception {
System.out.println("run..");
System.out.println(args.length);
System.out.println(Arrays.deepToString(args));
if (args.length > 0 && args[0].equals("1"))
new MyMain2().process();
}
}
命令运行: java -jar app-0.0.1-SNAPSHOT.jar 1
打印信息记录器,而不按预期打印调试记录器。 这就是我使用args在命令提示符下运行Jar的方式,并且按预期方式工作。
这是从其他类运行main方法的好方法吗?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。