最近将一个旧的java项目转换为springboot,我在构建项目时遇到了一些问题,比如iderun和command run。我没有看到任何运行springboot非web或独立应用程序的官方进程。
我们有许多类通过调用main方法(nlp组件、与域相关的单词、短语检测器、mlpoc、业务流程复杂算法)独立运行,每个流程都要花费数小时。
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!");
}
}
下面是我如何运行应用程序的场景。
iderun:运行demoapplication也会调用my main()并显示信息记录器这没关系!
maven在ide上安装命令:触发demoapplication也调用my main()并显示信息记录器,这样也可以了!
有时,我的目标是构建和生成jar,然后在命令提示符下使用命令“java-jarapp.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应用程序-0.0.1-snapshot.jar
设置开始类是工作,但它显示调试日志,我不想。
java-jar app-0.0.1-snapshot.jar—信息
仍然显示调试日志,所以我删除了start类。
最后,当我想在另一台机器的命令提示符下运行构建的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();
}
}
命令run:java -jar app-0.0.1-snapshot.jar 1
正在打印信息记录器,但未按预期打印调试记录器。这就是我使用args在命令提示符下运行jar的方式,并且它按预期工作。
这是从其他类运行main方法的好方法吗?
提前谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!