摘要:背景學習的自動配置對于了解整個后端代碼運行流程非常重要只有在了解是如何配置的情況下才能在項目的配置中不那么舉步維艱假如我們編寫了一個用于處理文件信息的工具類那么我們可以如下操作工具步驟創建一個普通的項目注意其中的和這兩項將對應以后使用的依賴
背景
學習spring boot的自動配置對于了解整個后端代碼運行流程非常重要,只有在了解spring boot是如何配置的情況下,才能在項目的配置中不那么舉步維艱.
START假如我們編寫了一個用于處理文件信息的工具類,那么我們可以如下操作
工具IntelliJ IDEA 2018
步驟注意其中的Group和Artifact,這兩項將對應以后使用的依賴參數
xyz.crabapple begonia 0.0.1-SNAPSHOT
BegoniaApplication 為spring boot自己生成的入口類所在的java文件.
Tool 是我的工具類具體實現
public class Tool { public String prefix; public Tool(String prefix) { this.prefix = prefix; } /** * 計算時間戳 * @return 時間戳+五位隨機大寫字母 */ public String getStamp() { String prefix = String.valueOf(new Date().getTime()); prefix=prefix.substring(2,prefix.length()); char[] arr = new char[5]; Random random = new Random(); for (int i = 0; i < 5; i++) arr[i] = (char) (65 + random.nextInt(26)); String Suffix = String.valueOf(arr); return prefix + Suffix; }
ToolProperties充當配置類和application.properties的橋,即它從application.properties中取具體的配置信息,而真正的配置類需要再到ToolProperties去取.
@ConfigurationProperties(prefix = "Tool") public class ToolProperties { private String prefix; public String getPrefix() { return prefix; } public void setPrefix(String path) { this.prefix = path; } }
ToolAutoConfiguration是我的具體配置類
@Configuration @EnableConfigurationProperties(ToolProperties.class) @ConditionalOnClass(Tool.class) @ConditionalOnProperty(prefix = "Tool", name="open" ,havingValue="true") public class ToolAutoConfiguration { @Autowired ToolProperties toolProperties; @Bean public Tool autoConfiger(){ System.out.println("Tool工具已啟動"); System.out.println(toolProperties.getPrefix()); return new Tool(toolProperties.getPrefix()); } }
1.@Configuration 表示這是一個配置類,作用等同于@Component.
以下三個注解都是條件注解,如果有一個不滿足條件,自動配置就不會運行.
2.@EnableConfigurationProperties(ToolProperties.class)
表示配置類的自動配置必須要求ToolProperties.class的存在
3.@ConditionalOnClass(Tool.class)
要求功能類存在.
4.@ConditionalOnProperty(prefix = "Tool", name="open" ,havingValue="true")
查看@ConditionOnProperty
@Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE, ElementType.METHOD }) @Documented @Conditional(OnPropertyCondition.class) public @interface ConditionalOnProperty { /** * Alias for {@link #name()}. * @return the names */ String[] value() default {}; /** * A prefix that should be applied to each property. The prefix automatically ends * with a dot if not specified. * @return the prefix */ String prefix() default ""; /** * The name of the properties to test. If a prefix has been defined, it is applied to * compute the full key of each property. For instance if the prefix is * {@code app.config} and one value is {@code my-value}, the fully key would be * {@code app.config.my-value} ** Use the dashed notation to specify each property, that is all lower case with a "-" * to separate words (e.g. {@code my-long-property}). * @return the names */ String[] name() default {}; /** * The string representation of the expected value for the properties. If not * specified, the property must not be equals to {@code false}. * @return the expected value */ String havingValue() default ""; /** * Specify if the condition should match if the property is not set. Defaults to * {@code false}. * @return if should match if the property is missing */ boolean matchIfMissing() default false; /** * If relaxed names should be checked. Defaults to {@code true}. * @return if relaxed names are used */ boolean relaxedNames() default true; }
prefix和name拼湊起來表示application.properties的配置信息key,例如我的配置信息為Tool.open=true,那么@ConditionalOnProperty(prefix = "Tool", name="open" ,havingValue="true")就表示配置信息中有這個key就為true,即滿足條件,在此條件下若等于注解中havingValue的值,則該注解最終的結果為true.
最后我們需要注冊自己的配置類在/src/main目錄下創建META-INF目錄,并其下創建spring.factories文件,其實spring.factories文件就是一個.properties文件.
新建好后,在其中按如下方式書寫
org.springframework.boot.autoconfigure.EnableAutoConfiguration= xyz.crabapple.begonia.ToolAutoConfiguration
第一行的org.springframework.boot.autoconfigure.EnableAutoConfiguration就是一個key,第二行的xyz.crabapple.begonia.ToolAutoConfiguration就是我們的自動配置類,即value.配置類還可以按需添加.例如我們找一個依賴看一看
找到一個spring boot自帶的依賴,可以看到其書寫方式,供大家參考.
# Initializers org.springframework.context.ApplicationContextInitializer= org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer, org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializerEND
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72958.html
摘要:簡介簡化應用開發的一個框架整個技術棧的一個大整合開發的一站式解決方案微服務,微服務架構風格服務微化一個應用應該是一組小型服務可以通過的方式進行互通單體應用微服務每一個功能元素最終都是一個可獨立替換和獨立升級的軟件單元環境準備推薦及以上以上版 1、Spring Boot 簡介簡化Spring應用開發的一個框架; 整個Spring技術棧的一個大整合; J2EE開發的一站式解決方案; 2、微...
摘要:引入了新的環境和概要信息,是一種更揭秘與實戰六消息隊列篇掘金本文,講解如何集成,實現消息隊列。博客地址揭秘與實戰二數據緩存篇掘金本文,講解如何集成,實現緩存。 Spring Boot 揭秘與實戰(九) 應用監控篇 - HTTP 健康監控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...
摘要:來源是最流行的用于開發微服務的框架。以下依次列出了最佳實踐,排名不分先后。這非常有助于避免可怕的地獄。推薦使用構造函數注入這一條實踐來自的項目負責人。保持業務邏輯免受代碼侵入的一種方法是使用構造函數注入。 showImg(https://mmbiz.qpic.cn/mmbiz_jpg/R3InYSAIZkHQ40ly9Oztiart2lESCyjCH0JwFRp3oErlYobhibM...
摘要:代碼如下所示自定義業務實現恒宇少年碼云消息內容是否顯示消息內容,我們內的代碼比較簡單,根據屬性參數進行返回格式化后的字符串。 在我們學習SpringBoot時都已經了解到starter是SpringBoot的核心組成部分,SpringBoot為我們提供了盡可能完善的封裝,提供了一系列的自動化配置的starter插件,我們在使用spring-boot-starter-web時只需要在po...
時間:2017年12月01日星期五說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com 教學源碼:無 學習源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 熱部署的使用場景 本地調式 線上發布 熱部署的使用優點 無論本地還是線上,都適用 無需重啟服務器:提高開發、調式效率、提升發布、運維效率、降低運維成本 前置...
閱讀 2380·2019-08-30 15:56
閱讀 1039·2019-08-30 15:55
閱讀 3203·2019-08-30 15:44
閱讀 933·2019-08-30 10:53
閱讀 1888·2019-08-29 16:33
閱讀 2470·2019-08-29 16:13
閱讀 719·2019-08-29 12:41
閱讀 874·2019-08-26 13:56