五、SpringBoot随系统启动任务的方式(SpringBoot系列)
不使用框架监听器实现
在servlet/Jsp项目中,可以通过监听器来实现,ServletContextListener
能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。
@Component
public class MyListener implements {
@Override
public void contextInitialized(ServletContextEvent sce) {
//在这里做数据初始化操作
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
//在这里做数据备份操作
}
}
## SpringBoo提供的系统启动任务两种解决方案
- CommandLineRunner
- ApplicationRunner
### CommandLineRunner
```java
@Component
// 可以配置多个,用@Order指定先后加载顺序,数字越大,加载的越晚
@Order(98)
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
// args这个参数就是启动类中的参数
System.out.println("MyCommandLineRunner2>>>"+Arrays.toString(args));
}
}
传入启动参数的两种方法:
- idea中这个启动参数,就是启动类中接收到的参数
- 用jar包启动的方式,参数直接跟在启动命令后面,多个参数用空格隔开即可
启动参数,有两种数据样式:
- kay-value:
java -jar hello.jar --name=三国演义
(CommandLineRunner接收这种数据格式的没办法区分什么是key-value,只会当作是一个字符串接收) - value:
java -jar hellp.jar 三国演义 西游记
- 两种数据格式可以同时出现:
java -jar hellp.jar --name=三国演义 西游记
ApplicationRunner
和CommandLineRunner使用方法基本一样,不过能够接收的参数形式更多
例如:jar包的启动 java -jar hello.jar --name=zy --age=2 hello word
@Component
@Order(99)
public class MyApplicationRunner01 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
String[] sourceArgs = args.getSourceArgs();//获取启动的所有参数
System.out.println("sourceArgs:" + Arrays.toString(sourceArgs));
List<String> nonOptionArgs = args.getNonOptionArgs(); // 获取没有key的值
System.out.println("nonOptionArgs:" + nonOptionArgs);
Set<String> optionNames = args.getOptionNames();// 获取key-vlue形式值的key
for (String optionName : optionNames) {
// 获取获取key-vlue的值
System.out.println(optionName + ":" + args.getOptionValues(optionName));
}
System.out.println(">>>>>>>>>>>>>>>MyApplicationRunner01结束>>>>>>>>>>>>>>>>");
}
}
输出结果如下: