Spring Boot非Web项目运行配置与实战

1星 12 下载量 160 浏览量 更新于2023-05-15 收藏 42KB PDF 举报
"这篇文章主要讲解了如何在Spring Boot环境下运行非Web项目,通过修改Maven依赖和使用CommandLineRunner接口来避免程序立即退出。" 在Spring Boot框架中,通常我们会使用`spring-boot-starter-web`依赖来构建Web应用程序,但有时我们可能需要创建一个不包含Web服务的项目,例如用来执行定时任务。在这种情况下,我们可以采取一些措施来适应这种非Web场景,以避免不必要的资源浪费。 首先,我们需要调整Maven的依赖配置。去掉`spring-boot-starter-web`,取而代之的是添加`spring-boot-starter`基础依赖,这是一个不包含Web组件的核心模块。修改后的`pom.xml`部分如下: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies> ``` 当移除`spring-boot-starter-web`后,启动Spring Boot应用会发现程序加载完毕后立即退出,这是因为没有Web服务器的监听,主程序执行完毕就没有后续任务,所以会自动终止。为了解决这个问题,我们需要让主程序的主线程保持运行状态,可以使用Spring Boot提供的`CommandLineRunner`接口来实现。 修改`SampleApplication`类如下: ```java @SpringBootApplication public class SampleApplication implements CommandLineRunner { public static void main(String[] args) throws Exception { SpringApplication.run(SampleApplication.class, args); } @Override public void run(String... args) throws Exception { Thread.currentThread().join(); } } ``` `CommandLineRunner`接口允许我们在Spring Boot应用程序启动后执行自定义的命令行操作。在这个例子中,我们覆盖了`run`方法,并使用`Thread.currentThread().join();`来阻塞当前线程,使得程序不会在主方法执行完毕后立即退出。这样,程序就会一直运行,直到被手动停止。 此外,如果你有多个实现了`CommandLineRunner`接口的类,Spring Boot会按照它们的`@Order`注解或实现的`Ordered`接口的顺序来调用`run`方法。你可以使用`@Order`注解来指定执行顺序,数值越小,执行优先级越高。 总结来说,通过不引入`spring-boot-starter-web`依赖并使用`CommandLineRunner`,我们可以成功地在Spring Boot环境中运行非Web项目,同时确保程序在启动后持续运行,直到被手动停止。这种方法对于那些只需要在后台运行的任务,如定时任务、数据处理等,是非常实用的。希望这个教程对你的学习和工作有所帮助。