国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

編寫Spring boot自動(dòng)配置

PAMPANG / 2870人閱讀

摘要:背景學(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

步驟
1.創(chuàng)建一個(gè)普通的spring boot項(xiàng)目

注意其中的Group和Artifact,這兩項(xiàng)將對(duì)應(yīng)以后使用的依賴參數(shù)


            xyz.crabapple
            begonia
            0.0.1-SNAPSHOT
2.項(xiàng)目的目錄結(jié)構(gòu)

3.現(xiàn)在我們主要代碼需要寫在begonia目錄下

4.代碼解釋

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.AutoConfigurationReportLoggingInitializer
END

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/72958.html

相關(guān)文章

  • Spring Boot 入門(一)

    摘要:簡(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、微...

    zhaochunqi 評(píng)論0 收藏0
  • spring boot - 收藏集 - 掘金

    摘要:引入了新的環(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...

    rollback 評(píng)論0 收藏0
  • Spring Boot 最流行的 16 條實(shí)踐解讀!

    摘要:來(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...

    Ethan815 評(píng)論0 收藏0
  • 第二十八章:SpringBoot使用AutoConfiguration自定義Starter

    摘要:代碼如下所示自定義業(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...

    fasss 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Spring Boot熱部署》學(xué)習(xí)總結(jié)

    時(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)維成本 前置...

    Channe 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

PAMPANG

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<