SpringBoot系统启动任务(三十二)的方式(下)

简介: SpringBoot系统启动任务(三十二)的方式(下)

二.一.二 实现 CommandLineRunner 的 run 方法

package top.yueshushu.init.line;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.Base64Utils;
import org.springframework.util.StringUtils;
import top.yueshushu.init.util.HardwareUtil;
@Component
@Order(1)
public class InitCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) {
        //args 获取传入的参数。
        //容器启动时,进行的操作。 如获取计算机的 机器码
        String cpuId = HardwareUtil.getCpuId();
        if(!StringUtils.hasText(cpuId)){
            System.out.println(">>>没有机器码");
        }
        String singleSignature = Base64Utils.encodeToString(cpuId.getBytes());
        System.out.println(">>>机器码是:"+singleSignature);
    }
}


@Order(1) 表示顺序。 可以定义多个启动方法, 数据越小,越先启动。


参数 String … args 对应的就是 main 方法里面的参数,获取参数的方式也是相同的.


二.一.三 测试

image.png


是在服务启动之后,进行处理的. 这个时候,已经是拥有 @Component, @Controller,@Service,@Repository 相关的实例了


二.一.四 使用组件

@Component
@Order(2)
public class InitCommandLineRunner2 implements CommandLineRunner {
    @Autowired
    private UserService userService;
    @Override
    public void run(String... args) {
        userService.set();
        userService.get();
    }
}


启动服务

image.png


二.二 ApplicationRunner

将 InitCommandLineRunner 和 InitCommandLineRunner2 去掉 @Order 和 @Component 注解


二.二.一 实现 ApplicationRunner 的 run 接口

@Component
@Order(3)
public class InitApplicationRunner implements ApplicationRunner {
    @Autowired
    private UserService userService;
    @Override
    public void run(ApplicationArguments args) throws Exception {
        //在运行时,进行的操作.
        Random random=new Random();
        System.out.println(">>>输出值:"+random.nextInt(100));
        userService.set();
        userService.get();
    }
}


参数使用的是 ApplicationArguments args


  • args.getNonOptionArgs();`可以用来获取命令行中的无key参数(和CommandLineRunner一样)


  • args.getOptionNames();`可以用来获取所有key/value形式的参数的key


  • args.getOptionValues(key);可以根据key获取key/value 形式的参数的value


  • args.getSourceArgs();则表示获取命令行中的所有参数


二.二.二 测试

image.png


二.三 @PostConstruct 注解

@PostConstruct 注解,用于在依赖关系注入完成之后,需要执行的方法,用于执行初始化,只执行一次。


也就是说, 是在 @Autowired/@Resource 之后执行的注解


二.三.一 不需要继承接口

@Component
@Order(4)
public class InitMethod {
    @Autowired
    private UserService userService;
    @PostConstruct
    public void initName(){
        System.out.println(">>>>初始化名称模块");
    }
    @PostConstruct
    public void initSet(){
        userService.set();
    }
    @PostConstruct
    public void initGet(){
        userService.get();
    }
}


二.三.二 测试

image.png


在 ExecutorService 服务之前执行的。


与 init() 方法相同.


二.三.三 定义静态类

在实际项目中,一个相对完整的业务链,会有很多个 相关的 Service 。


通常会将相应的几个 Service进行封装,封装成一个工具类,对外提供方法.


先将 InitMethod 类上的 @Component 注解去掉


二.三.三.一 不使用 @PostConstructor 注解

定义工具类

@Component
public class MyUserServiceUtil {
   @Autowired
   private UserService userService;
    public   void handler(){
        //先设置值
        userService.set();
        //再获取值
        userService.get();
    }
}


使用工具类

先注入,再使用

@SpringBootTest
public class PostTest {
  //先注入
  @Autowired
  private MyUserServiceUtil myUserServiceUtil;
    @Test
    public void test(){
         System.out.println(">>>先注入,再使用");
        //再使用 
        myUserServiceUtil.handler();
    }
}

image.png

每次都需要先注入,再使用。


如果能够定义成相关的静态方法,就好了.


二.三.三.二 使用 @PostConstructor 注解处理成静态类

@Component
public class MyUserServiceUtil2 {
    //执行的顺序,先 Component, 再Autowired,后 PostConstruct
    //内部注入
    @Autowired
    private UserService userService;
    //定义代理的静态属性
   private static UserService userServiceImpl;
   @PostConstruct
   public void setComponent(){
       //赋予属性值
       userServiceImpl=userService;
   }
   //方法是静态的,那么 调用者必须是静态的.
    public static void handler(){
        //先设置值
        userServiceImpl.set();
        //再获取值
        userServiceImpl.get();
    }
}


在使用时,直接用静态方法的形式即可.

@SpringBootTest
public class PostTest {
  //先注入
  @Autowired
  private MyUserServiceUtil myUserServiceUtil;
    @Test
    public void test(){
        System.out.println(">>>先注入,再使用");
        //再使用
        myUserServiceUtil.handler();
    }
    @Test
    public void test2(){
        System.out.println("静态方法,直接使用");
        MyUserServiceUtil2.handler();
    }
}


运行 test2() 方法

image.png


这种形式,在开发中很常用,一定要记住.


这就是SpringBoot 系统启动任务的常用方法.


相关文章
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
145 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
7天前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
27 1
|
16天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
25天前
|
存储 安全 Java
打造智能合同管理系统:SpringBoot与电子签章的完美融合
【10月更文挑战第7天】 在数字化转型的浪潮中,电子合同管理系统因其高效、环保和安全的特点,正逐渐成为企业合同管理的新宠。本文将分享如何利用SpringBoot框架实现一个集电子文件签字与合同管理于一体的智能系统,探索技术如何助力合同管理的现代化。
58 4
|
25天前
|
前端开发 Java Apache
SpringBoot实现电子文件签字+合同系统!
【10月更文挑战第15天】 在现代企业运营中,合同管理和电子文件签字成为了日常活动中不可或缺的一部分。随着技术的发展,电子合同系统因其高效性、安全性和环保性,逐渐取代了传统的纸质合同。本文将详细介绍如何使用SpringBoot框架实现一个电子文件签字和合同管理系统。
46 1
|
28天前
|
文字识别 安全 Java
SpringBoot3.x和OCR构建车牌识别系统
本文介绍了一个基于Java SpringBoot3.x框架的车牌识别系统,详细阐述了系统的设计目标、需求分析及其实现过程。利用Tesseract OCR库和OpenCV库,实现了车牌图片的识别与处理,确保系统的高准确性和稳定性。文中还提供了具体的代码示例,展示了如何构建和优化车牌识别服务,以及如何处理特殊和异常车牌。通过实际应用案例,帮助读者理解和应用这一解决方案。
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
214 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的蛋糕商城管理系统
基于Java+Springboot+Vue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的蛋糕商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
140 3
基于Java+Springboot+Vue开发的蛋糕商城管理系统
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的美容预约管理系统
基于Java+Springboot+Vue开发的美容预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的美容预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
53 3
基于Java+Springboot+Vue开发的美容预约管理系统
|
2月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)