java 项目启动初始化_Spring Boot解决项目启动时初始化资源的方法

前言

在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等。今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作。

这个神器就是 CommandLineRunner, CommandLineRunner 接口的 Component 会在所有 SpringBeans都初始化之后, SpringApplication.run()之前执行,非常适合在应用程序启动之初进行一些数据初始化的工作。

接下来我们就运用案例测试它如何使用,在测试之前在启动类加两行打印提示,方便我们识别 CommandLineRunner 的执行时机。

@SpringBootApplicationpublic class CommandLineRunnerApplication {

public static void main(String[] args) {

System.out.println("The service to start.");

SpringApplication.run(CommandLineRunnerApplication.class, args);

System.out.println("The service has started.");

}

}

接下来我们直接创建一个类继承 CommandLineRunner ,并实现它的 run() 方法。

@Component

public class Runner implements CommandLineRunner {

@Override

public void run(String... args) throws Exception {

System.out.println("The Runner start to initialize ...");

}

}

我们在 run() 方法中打印了一些参数来看出它的执行时机。完成之后启动项目进行测试:

...

The service to start.

____ __ _ _ /\\ / ___'_ __ _ _(_)_ __

__ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

\\/ ___)| |_)| | | | | || (_| | ) ) ) )

' |____| .__|_| |_|_| |_\__, | / / / /

=========|_|==============|___/=/_/_/_/

:: Spring Boot :: (v2.0.0.RELEASE)

...

2018-04-21 22:21:34.706 INFO 27016 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''

2018-04-21 22:21:34.710 INFO 27016 --- [ main] com.neo.CommandLineRunnerApplication : Started CommandLineRunnerApplication in 3.796 seconds (JVM running for 5.128)

The Runner start to initialize ...

The service has started.

根据控制台的打印信息我们可以看出 CommandLineRunner 中的方法会在 Spring Boot 容器加载之后执行,执行完成后项目启动完成。

如果我们在启动容器的时候需要初始化很多资源,并且初始化资源相互之间有序,那如何保证不同的 CommandLineRunner 的执行顺序呢?Spring Boot 也给出了解决方案。那就是使用 @Order 注解。

我们创建两个 CommandLineRunner 的实现类来进行测试:

第一个实现类:

@Component

@Order(1)

public class OrderRunner1 implements CommandLineRunner {

@Override

public void run(String... args) throws Exception {

System.out.println("The OrderRunner1 start to initialize ...");

}

}

第二个实现类:

@Component

@Order(2)

public class OrderRunner2 implements CommandLineRunner {

@Override

public void run(String... args) throws Exception {

System.out.println("The OrderRunner2 start to initialize ...");

}

}

添加完成之后重新启动,观察执行顺序:

...

The service to start

. ____ _ __ _ _

/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

\\/ ___)| |_)| | | | | || (_| | ) ) ) )

' |____| .__|_| |_|_| |_\__, | / / / /

=========|_|==============|___/=/_/_/_/

:: Spring Boot :: (v2.0.0.RELEASE)

...

2018-04-21 22:21:34.706 INFO 27016 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''

2018-04-21 22:21:34.710 INFO 27016 --- [ main] com.neo.CommandLineRunnerApplication : Started CommandLineRunnerApplication in 3.796 seconds (JVM running for 5.128)

The OrderRunner1 start to initialize ...

The OrderRunner2 start to initialize ...

The Runner start to initialize ...

The service has started.

通过控制台的输出我们发现,添加 @Order 注解的实现类最先执行,并且 @Order()里面的值越小启动越早。

在实践中,使用 ApplicationRunner也可以达到相同的目的,两着差别不大。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中的equals拿什么鞋的_java.中equals的使用

下面在Cat类里面重写这个继承下来的equals()方法:class Cat {int color, weight, height;public Cat(int color, int weight, int height) {this.color color;this.weight weight;this.height height;}/*** 这里是重写相等从Object类继承下来的equals()方法&…

java 弹出软键盘_Android开发之弹出软键盘工具类简单示例

本文实例讲述了Android开发之弹出软键盘工具类。分享给大家供大家参考,具体如下:package com.maobang.imsdk.util;import android.content.Context;import android.view.inputmethod.InputMethodManager;import android.widget.EditText;import java.uti…

百度编辑器图片上传 java_百度编辑器粘贴图片自动上传到服务器(Java版)

ChromeIE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能。但是无法处理多张图片。而且转换成BASE64后是作为内容…

matlab解方java_Java:调用window的matlab遇到的问题和解决方案

描述容易报错的问题和可能原因1.java.lang.NullPointerException解决途径:window和linux的文件路径不同,window分隔符是\\,linux是/2.Exception in thread “main” java.lang.ExceptionInInitializerError解决途径:matlab生成的j…

java里面add报错_java.util.Arrays$ArrayList addAll报错

执行下面代码时报错:List centerList WebConstants.SUPPORT_BIG_CENTERS_LIST; // WebConstants.SUPPORT_BIG_CENTERS_LIST是Arrays.asList转化来的centerList.removeAll(WebConstants.SUPPORT_CENTERS_LIST);centerList.addAll(WebConstants.SUPPORT_CENTERS_LIST);最后一行报…

java中的输入语句判断正负_在java中使用方法调用统计数组中正数的个数,将判断数据的正负功能定义成方法...

满意答案donglin820推荐于 2018.04.21public class TestDemo {static int count 0;// 统计整数的个数public static void main(String[] args) {int[] number new int[10];// 动态生成一个整数数组(长度为10)Scanner s new Scanner(System.in);for (int i 0; i < 10; i)…

java 压缩加密 github_关于Java:使用github中的AES-256-CBC加密

本问题已经有最佳答案&#xff0c;请猛点这里访问。我想使用这些课程https://github.com/fukata/AES-256-CBC-示例在我的项目中&#xff0c;但是即使我不进行任何更改而对其进行编译&#xff0c;也会导致错误&#xff1a;Exception in thread"main" java.lang.Runtim…

java二级考试有草稿纸吗_“大型考试”为什么需要回收草稿纸?学生:这么多年也没整明白!...

在大家的求学生涯中&#xff0c;肯定不难发现这个事情&#xff0c;那就是学生考完试不能带走草稿纸&#xff0c;尤其是高考、中考这种全国统一大型考试&#xff0c;英语四六级等等&#xff0c;而一些初中高中、大学院校内部期末考试也是这样。学校和考场提供统一草稿纸目的是非…

expressjs如何做mysql注入_Node.js+Express+Mysql 实现增删改查

这次选用nodejsexpressmysql 使用http作为客户端&#xff0c;express框架搭建服务端&#xff0c;从而实现数据的增删改查。这篇文章可以算作上篇文章的升级篇&#xff0c;加入了和数据库的交互。安装node 直接去官网下载选择下载即可https://nodejs.org/en/download/current/cn…

docker pxc mysql_docker安装pxc集群的详细教程

前言现在mysql自建集群方案有多种&#xff0c;keepalived、MHA、PXC、MYSQL主备等&#xff0c;但是目前根据自身情况和条件&#xff0c;选择使用pxc的放来进行搭建&#xff0c;最大的好处就是&#xff0c;多主多备&#xff0c;即主从一体&#xff0c;没有同步延时问题&#xff…

java双击添加文本框_java图形界面 怎么文本框要用鼠标点一下才出来

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;public class BuildMaze extends JFrame implements ActionListener{private JButton random,Return,display,choice;private ImageIcon icon…

php图形验证码验证,php生成图形验证码几种方法小结

我们先来检查一下自己的php是不是打开了gd库。复制代码 代码如下:if(extension_loaded(gd)) {echo 你可以使用gd;foreach(gd_info() as $cate>$value)echo "$cate: $value";}elseecho 你没有安装gd扩展;?>如果有返回信息就正确可以常用使用了例1复制代码 代码…

php new static,PHP中new self()和new static()的区别用法

浅谈PHP中new self()和new static()的区别&#xfeff;本文介绍了PHP中new self()和new static()的区别&#xff0c;分享给大家&#xff0c;也给自己留个笔记。1.new static()是在PHP5.3版本中引入的新特性。2.无论是new static()还是new self()&#xff0c;都是new了一个新的对…

php微信开源框架,SOPHP免费微信开源框架 php版 v4.5

SOPHP是一款稳定开源的微信公众平台开发系统,也是基于weiphp开发的第一款商业系统。依托自身强大的钩子功能&#xff0c;她可以帮助大家快速开发出自己想要的微信功能插件&#xff0c;运营近两年来我们收获了上千用户与良好的口碑。作为一个开源产品&#xff0c;希望大家都能参…

php搜索文件名,window_Windows7内置搜索如何同时搜索文件名与内容,  Win7的搜索功能效果非常强 - phpStudy...

Windows7内置搜索如何同时搜索文件名与内容Win7的搜索功能效果非常强大&#xff0c;不但比WinXP快上许多&#xff0c;而且还能即输即显。不过我们在平时使用的时候大家会发现&#xff0c;Win7搜索只能搜索目录中的文件名&#xff0c;却搜索不到文件中的内容。其实不然&#xff…

php去掉编辑器自带样式,phpcms去掉CKEditor编辑器上传图片的宽高样式

phpcms V9后台富文本编辑器使用的是CKEditor&#xff0c;在编辑器上传图片后会自动添加图片宽高的style属性&#xff0c;如何去掉这个属性&#xff1f;找到以下文件&#xff1a;statics\js\ckeditor\plugins\image\dialogs\image.js打开后是压缩包的js文件&#xff0c;用javasc…

java系统管理员停用,为什么犯错让我成为一个更好的系统管理员

诀窍就是同一个错误不要犯两次。到目前为止&#xff0c;我已做了十多年 Fedora 贡献者。 Fedora 有一个由开发者和用户组成的大型社区&#xff0c;其中每一个人&#xff0c;不管是极富洞察力的用户还是出色的程序员&#xff0c;都有一些独有的技能。我喜欢这样的社区&#xff0…

php ajax json 实例,php+ajax+json 详解及实例代码

phpajaxjson 实例代码html页面&#xff1a;$(function(){$("#send").click(function(){var cont $("input").serialize();$.ajax({url:ab.php,type:post,dataType:json,data:cont,success:function(data){var str data.username data.age data.job;$(&…

如何访问静态成员php,php – 如何访问类的静态成员?

如果A是一个类&#xff0c;你可以通过A :: $ strName直接访问它。class A {public static $strName A is my name;}echo A::$strName; // outputs "A is my name"更新&#xff1a;根据你的数组内容&#xff0c;不管我喜欢将其定义为类对象还是类文字&#xff0c;都可…

php.ini用哪个,php.ini:哪一个?

一般来说&#xff0c;当从命令行调用PHP二进制文件时&#xff0c;使用cli / php.ini文件。您可以从命令行检查运行php –ini。当PHP作为FPM运行时将使用fpm / php.ini – 这是nginx安装的情况。您可以检查从您的网络服务器服务的php页面调用phpinfo()。cgi / php.ini&#xff0…