前言

如果springboot不是一个Web项目,大家知道,项目启动以后马上就会停止,并且 controller 等各层里面的方法也不会被执行,下面有两种方式可以运行容器里面的方法,测试类或者修改启动主类,都非常简单,几行代码的事情。


一、创建打开一个Springboot项目

使用idea,选择Spring Initializr进行创建

在这里插入图片描述

next,这一步不要勾选 Spring Web 依赖,不然就是个 Web 项目了

在这里插入图片描述

完成以后大家发现,已经为我们创建好了 测试类,那我们就先讲用测试类运行吧
在这里插入图片描述

先写好基本结构,我的这个 demo方法就是一个 System.out.println(“Hello World”);

在这里插入图片描述


二、运行项目

1、Test测试类运行

打开测试类,我的叫 UseToTestApplicationTests,不同项目名字不一样,里面的初始代码是这样的,每个人都一样

在这里插入图片描述

在里面直接 @Autowired 你的 controller 层的文件,在下面 contextLoads 里面调用方法,右键,运行 contextLoads 就可以了。然后输出了 HelloWorld

在这里插入图片描述
在这里插入图片描述

2、启动主类运行

下面使用 UseToTestApplication 启动主类来运行项目

修改代码为下图所示,要获取哪个容器就getBean哪个容器名,右键启动 UseToTestApplication

1
2
3
4
5
ConfigurableApplicationContext context = SpringApplication.run(UseToTestApplication.class, args);
//获取容器DemoController
DemoController demoController = (DemoController) context.getBean("demoController");
//DemoController获取成功,调用demo方法
demoController.demo();

在这里插入图片描述

输出 HelloWorld

在这里插入图片描述


三、持续运行不停止(定时任务、自动执行)

如果想要让项目不停止,一直打印HelloWorld,可以在启动类 UseToTestApplication 上添加注解 @EnableScheduling ,意思为开启定时任务,这个时候启动类就不能修改成上面的getBean那样了,要改回原来的样子

然后在 controller 层的DemoControlelr里面加上注解 @Component 可以确保这个类会被定时任务扫描到,然后在下面的 demo 方法上加上 @Scheduled(fixedRate = 3000),意思为每1000毫秒执行一次 demo 方法

在这里插入图片描述
在这里插入图片描述

启动主类,运行结果,每1秒打印一个 HelloWorld ,永不停止
在这里插入图片描述


总结

如果需要更详细的定时任务的操作,我的另一篇文章有详解,可以定制逻辑更复杂的定时任务

传送门:Java实现非Web项目的Springboot定时任务(每3秒自动执行一次)