SpringBoot非WebIDE运行、maven运行和命令行运行——让我知道正式的运行方式

rkkpypqq  于 2021-07-05  发布在  Java
关注(0)|答案(0)|浏览(171)

最近将一个旧的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方法的好方法吗?
提前谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题