介紹
在開發(fā)過程中,我們有時候會遇到非接口調用而出發(fā)程序執(zhí)行任務的一些場景,比如我們使用quartz定時框架通過配置文件來啟動定時任務時,或者一些初始化資源場景等觸發(fā)的任務執(zhí)行場景。
方法一:注解
方案
通過使用注解@Configuration和@Bean來初始化資源,配置文件當然還是通過@Value進行注入。
- @Configuration:用于定義配置類,可替換xml配置文件,被注解的類內部一般是包含了一個或者多個@Bean注解的方法。
- @Bean:產生一個Bean對象,然后將Bean對象交給Spring管理,被注解的方法是會被AnnotationConfigApplicationContext或者AnnotationConfgWebApplicationContext掃描,用于構建bean定義,從而初始化Spring容器。產生這個對象的方法Spring只會調用一次,之后Spring就會將這個Bean對象放入自己的Ioc容器中。
補充@Configuration加載Spring:
- @Configuration配置spring并啟動spring容器
- @Configuration啟動容器+@Bean注冊Bean
- @Configuration啟動容器+@Component注冊Bean
- 使用 AnnotationConfigApplicationContext 注冊 AppContext 類的兩種方法
- 配置Web應用程序(web.xml中配置AnnotationConfigApplicationContext)
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package com.example.andya.demo.conf; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author andya * @create 2020-06-24 14:37 */ @Configuration public class InitConfigTest { @Value ( "${key}" ) private String key; @Bean public String testInit(){ System.out.println( "init key: " + key); return key; } } |
方法二:CommandLineRunner
方案
實現CommandLineRunner接口,該接口中的Component會在所有Spring的Beans都初始化之后,在SpringApplication的run()之前執(zhí)行。
多個類需要有順序的初始化資源時,我們還可以通過類注解@Order(n)進行優(yōu)先級控制
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package com.example.andya.demo.service; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; /** * @author andya * @create 2020-06-24 14:47 */ @Component public class CommandLineRunnerTest implements CommandLineRunner { @Value ( "${key}" ) private String key; @Override public void run(String... strings) throws Exception { System.out.println( "command line runner, init key: " + key); } } |
兩個示例的運行結果
總結
到此這篇關于SpringBoot項目啟動時如何讀取配置以及初始化資源的文章就介紹到這了,更多相關SpringBoot啟動時讀取配置及初始化資源內容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/Andya/p/13187845.html