摘要:背景學(xué)習(xí)的自動(dòng)配置對(duì)于了解整個(gè)后端代碼運(yùn)行流程非常重要只有在了解是如何配置的情況下才能在項(xiàng)目的配置中不那么舉步維艱假如我們編寫了一個(gè)用于處理文件信息的工具類那么我們可以如下操作工具步驟創(chuàng)建一個(gè)普通的項(xiàng)目注意其中的和這兩項(xiàng)將對(duì)應(yīng)以后使用的依賴
背景
學(xué)習(xí)spring boot的自動(dòng)配置對(duì)于了解整個(gè)后端代碼運(yùn)行流程非常重要,只有在了解spring boot是如何配置的情況下,才能在項(xiàng)目的配置中不那么舉步維艱.
START假如我們編寫了一個(gè)用于處理文件信息的工具類,那么我們可以如下操作
工具IntelliJ IDEA 2018
步驟注意其中的Group和Artifact,這兩項(xiàng)將對(duì)應(yīng)以后使用的依賴參數(shù)
xyz.crabapple begonia 0.0.1-SNAPSHOT
BegoniaApplication 為spring boot自己生成的入口類所在的java文件.
Tool 是我的工具類具體實(shí)現(xiàn)
public class Tool { public String prefix; public Tool(String prefix) { this.prefix = prefix; } /** * 計(jì)算時(shí)間戳 * @return 時(shí)間戳+五位隨機(jī)大寫字母 */ 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充當(dāng)配置類和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工具已啟動(dòng)"); System.out.println(toolProperties.getPrefix()); return new Tool(toolProperties.getPrefix()); } }
1.@Configuration 表示這是一個(gè)配置類,作用等同于@Component.
以下三個(gè)注解都是條件注解,如果有一個(gè)不滿足條件,自動(dòng)配置就不會(huì)運(yùn)行.
2.@EnableConfigurationProperties(ToolProperties.class)
表示配置類的自動(dòng)配置必須要求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拼湊起來(lái)表示application.properties的配置信息key,例如我的配置信息為Tool.open=true,那么@ConditionalOnProperty(prefix = "Tool", name="open" ,havingValue="true")就表示配置信息中有這個(gè)key就為true,即滿足條件,在此條件下若等于注解中havingValue的值,則該注解最終的結(jié)果為true.
最后我們需要注冊(cè)自己的配置類在/src/main目錄下創(chuàng)建META-INF目錄,并其下創(chuàng)建spring.factories文件,其實(shí)spring.factories文件就是一個(gè).properties文件.
新建好后,在其中按如下方式書(shū)寫
org.springframework.boot.autoconfigure.EnableAutoConfiguration= xyz.crabapple.begonia.ToolAutoConfiguration
第一行的org.springframework.boot.autoconfigure.EnableAutoConfiguration就是一個(gè)key,第二行的xyz.crabapple.begonia.ToolAutoConfiguration就是我們的自動(dòng)配置類,即value.配置類還可以按需添加.例如我們找一個(gè)依賴看一看
找到一個(gè)spring boot自帶的依賴,可以看到其書(shū)寫方式,供大家參考.
# Initializers org.springframework.context.ApplicationContextInitializer= org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer, org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializerEND
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/72958.html
摘要:簡(jiǎn)介簡(jiǎn)化應(yīng)用開(kāi)發(fā)的一個(gè)框架整個(gè)技術(shù)棧的一個(gè)大整合開(kāi)發(fā)的一站式解決方案微服務(wù),微服務(wù)架構(gòu)風(fēng)格服務(wù)微化一個(gè)應(yīng)用應(yīng)該是一組小型服務(wù)可以通過(guò)的方式進(jìn)行互通單體應(yīng)用微服務(wù)每一個(gè)功能元素最終都是一個(gè)可獨(dú)立替換和獨(dú)立升級(jí)的軟件單元環(huán)境準(zhǔn)備推薦及以上以上版 1、Spring Boot 簡(jiǎn)介簡(jiǎn)化Spring應(yīng)用開(kāi)發(fā)的一個(gè)框架; 整個(gè)Spring技術(shù)棧的一個(gè)大整合; J2EE開(kāi)發(fā)的一站式解決方案; 2、微...
摘要:引入了新的環(huán)境和概要信息,是一種更揭秘與實(shí)戰(zhàn)六消息隊(duì)列篇掘金本文,講解如何集成,實(shí)現(xiàn)消息隊(duì)列。博客地址揭秘與實(shí)戰(zhàn)二數(shù)據(jù)緩存篇掘金本文,講解如何集成,實(shí)現(xiàn)緩存。 Spring Boot 揭秘與實(shí)戰(zhàn)(九) 應(yīng)用監(jiān)控篇 - HTTP 健康監(jiān)控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...
摘要:來(lái)源是最流行的用于開(kāi)發(fā)微服務(wù)的框架。以下依次列出了最佳實(shí)踐,排名不分先后。這非常有助于避免可怕的地獄。推薦使用構(gòu)造函數(shù)注入這一條實(shí)踐來(lái)自的項(xiàng)目負(fù)責(zé)人。保持業(yè)務(wù)邏輯免受代碼侵入的一種方法是使用構(gòu)造函數(shù)注入。 showImg(https://mmbiz.qpic.cn/mmbiz_jpg/R3InYSAIZkHQ40ly9Oztiart2lESCyjCH0JwFRp3oErlYobhibM...
摘要:代碼如下所示自定義業(yè)務(wù)實(shí)現(xiàn)恒宇少年碼云消息內(nèi)容是否顯示消息內(nèi)容,我們內(nèi)的代碼比較簡(jiǎn)單,根據(jù)屬性參數(shù)進(jìn)行返回格式化后的字符串。 在我們學(xué)習(xí)SpringBoot時(shí)都已經(jīng)了解到starter是SpringBoot的核心組成部分,SpringBoot為我們提供了盡可能完善的封裝,提供了一系列的自動(dòng)化配置的starter插件,我們?cè)谑褂胹pring-boot-starter-web時(shí)只需要在po...
時(shí)間:2017年12月01日星期五說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:無(wú) 學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 熱部署的使用場(chǎng)景 本地調(diào)式 線上發(fā)布 熱部署的使用優(yōu)點(diǎn) 無(wú)論本地還是線上,都適用 無(wú)需重啟服務(wù)器:提高開(kāi)發(fā)、調(diào)式效率、提升發(fā)布、運(yùn)維效率、降低運(yùn)維成本 前置...
閱讀 2390·2019-08-30 15:56
閱讀 1049·2019-08-30 15:55
閱讀 3211·2019-08-30 15:44
閱讀 939·2019-08-30 10:53
閱讀 1895·2019-08-29 16:33
閱讀 2494·2019-08-29 16:13
閱讀 726·2019-08-29 12:41
閱讀 883·2019-08-26 13:56