欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot解析自定義yml方式

 更新時間:2023年08月28日 11:02:01   作者:lipengxs  
這篇文章主要介紹了springboot解析自定義yml方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

springboot解析自定義yml

在實(shí)際項(xiàng)目開發(fā)中我們經(jīng)常需要用到一些自定義配置,并且希望單獨(dú)配置,方便維護(hù),現(xiàn)在介紹下方式:

方式一:手動加載

對于一些不變動的配置,寫死在項(xiàng)目中維護(hù),如下

然后在啟動類中加載該配置

public class AAApplication {
    public static void main(String[] args) {
        SpringApplication.run(RecommendApplication.class, args);
    }
    @Bean
    public static PropertySourcesPlaceholderConfigurer properties() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource("siteuid-config.yml"));
        configurer.setProperties(yaml.getObject());
        return configurer;
    }
}

注意:

如果是啟動配置是properties文件,這里是無法加載yml,需要將配置的siteuid-config.yml轉(zhuǎn)成siteuid-config.properties

方式二:集成springcloud config

集成springcloud config后,默認(rèn)根據(jù)應(yīng)用名加載,如果需要加載多配置,需要修改相關(guān)配置:

spring:
  application:
    name: quote
  profiles:
    active: dev
  cloud:
    config:
      profile: dev
      name: quote,siteuid-config
      enabled: true
      discovery:
        service-id: config-server
        enabled: true

springbootyml文件詳解

獲取數(shù)據(jù)第三種方式

數(shù)據(jù)可能是一個對象形式, 不需要一個一個獲取, 定義一個對應(yīng)的類, 要求屬性與yml的數(shù)據(jù)的二級屬性名一樣, 使用springboot提供的注解@ConfigurationProperties,進(jìn)行屬性與yml數(shù)據(jù)的一一映射

多環(huán)境配置

三個環(huán)境:

  • 開發(fā)環(huán)境: dev
  • 測試環(huán)境: test
  • 生產(chǎn)環(huán)境: prod

每個環(huán)境不同的配置,分開寫, 相同的配置集中.

yml多環(huán)境配置:

  • 第一種方式:單個文件 application.yml的多環(huán)境配置
#全局配置文件: application.yml
#共同的配置,寫在全局配置文件中
spring:
  application:
    name: demo4
  profiles:
    active: prod
?
#激活某個環(huán)境: 使用那個環(huán)境
?
?
---
# 某個環(huán)境的配置文件
#給環(huán)境取名字  開發(fā)環(huán)境:  dev
spring:
  profiles: dev
#環(huán)境的配置
server:
  port: 8080
?
---
# 某個環(huán)境的配置文件
#測試環(huán)境  test
spring:
  profiles: test
server:
  port: 9090
?
---
# 某個環(huán)境的配置文件
#生產(chǎn)環(huán)境 prod   pro
spring:
  profiles: prod
server:
  port: 80

注意: 在Springboot高版本中, 定義環(huán)境名的配置已過時

#低版本
spring:
profiles: prod
在高版本變?yōu)?
#高版本
spring:
config:
activate:
?on-profile: test
  • 第二種方式:多個yml文件多環(huán)境配置

環(huán)境配置文件名: application-環(huán)境名.yml

Properties類型的配置文件多環(huán)境配置

多個properties文件多環(huán)境配置

日志打印

默認(rèn)情況下,Spring Boot會用Logback來記錄日志,并用INFO級別輸出到控制臺

logback,log4j,log4j2 都是同一個人開發(fā), log4j --> log4j2 --> logback(分布式日志)

設(shè)置日志輸出級別:

  • 第一種方式:
# 開啟debug模式,輸出調(diào)試信息,常用于檢查系統(tǒng)運(yùn)行狀況, 自己的日志還是info級別
debug: true
  • 第二種方式:
# 設(shè)置日志級別,root表示根節(jié)點(diǎn),即整體應(yīng)用日志級別
logging:
? ? level:
? ? ? ? root: debug
  • 第三種方式: 推薦
#單獨(dú)控制某個包下的日志輸出級別
#設(shè)置整個項(xiàng)目日志輸出級別
logging:
? #設(shè)置一個組
? group:
? ? demo4: com.fs
? level:
? ? root: info
? ? #com.fs包的日志輸出級別為debug
? ? demo4: debug

日志寫到控制臺, 在開發(fā)日志直接打印控制臺,但是,測試,生產(chǎn)環(huán)境, 日志 保存到日志文件中

第一種方式: 所有的日志保存到一個日志文件:

logging:
? ? file:
? ? ? ? #保存當(dāng)前項(xiàng)目下
? ? ? ? name: suke.log

問題:

  • 日志內(nèi)容大, 打開很慢, 寫也慢
  • 不方便查找某一天的日志
  • 日志無法歸檔

第二種方式: 每一天產(chǎn)生一個日志文件, 限制每個日志文件大小, 超出,新創(chuàng)建一個文件

對Logback日志專門編寫一個配置文件, logback-自定義名.xml 推薦使用名

除了: logback-logback.xml

對Logback日志專門編寫一個配置文件, logback-自定義名.xml 推薦使用名

除了: logback-logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果設(shè)置為WARN,則低于WARN的信息都不會輸出 -->
<!-- scan:當(dāng)此屬性設(shè)置為true時,配置文檔如果發(fā)生改變,將會被重新加載,默認(rèn)值為true -->
<!-- scanPeriod:設(shè)置監(jiān)測配置文檔是否有修改的時間間隔,如果沒有給出時間單位,默認(rèn)單位是毫秒。當(dāng)scan為true時,此屬性生效。默認(rèn)的時間間隔為1分鐘。 -->
<!-- debug:當(dāng)此屬性設(shè)置為true時,將打印出logback內(nèi)部日志信息,實(shí)時查看logback運(yùn)行狀態(tài)。默認(rèn)值為false。 -->
<configuration scan="true" scanPeriod="10 seconds" debug="false">
<!-- 日志路徑 部署在服務(wù)器 文件夾需要設(shè)計(jì)777權(quán)限
? linux服務(wù)器: 根目錄: / ? ?設(shè)置目錄訪問權(quán)限
? 目錄不存在,創(chuàng)建目錄
-->
<property name="log.base" value="C://logs/suke"/>
<!--日志存儲天數(shù)-->
<property name="log.max.days" value="30"/>
<!-- 日志文件大小 -->
<property name="log.max.size" value="500MB"/>
<!-- 輸出格式-->
<property name="log.pattern" value="%date{ISO8601} %level [%thread] %logger{56} : %msg%n"/>
<!--字符集-->
<property name="log.charset" value="UTF-8"/>
?
<!--控制臺-附加器 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
? ?<!--格式 -->
? ?<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
? ? ? ?<pattern>${log.pattern}</pattern>
? ? ? ?<charset>${log.charset}</charset>
? ?</encoder>
</appender>
?
<!--info-附加器-->
<appender name="infoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
? ?<file>${log.base}/info/_info.log</file><!--存儲路徑-->
? ?<!-- 輸出格式 -->
? ?<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
? ? ? ?<pattern>${log.pattern}</pattern>
? ? ? ?<charset>${log.charset}</charset>
? ?</encoder>
? ?<!-- 滾動記錄文件,先將日志記錄到指定文件,當(dāng)符合某個條件時,將日志記錄到其他文件。-->
? ?<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
? ? ? ?<!--按天回滾-->
? ? ? ?<fileNamePattern>${log.base}/info/archive/info_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
? ? ? ?<!--日志最大存儲天數(shù)-->
? ? ? ?<maxHistory>${log.max.days}</maxHistory>
? ? ? ?<!--當(dāng)天的日志 超過大小 壓縮日志并保存 -->
? ? ? ?<maxFileSize>${log.max.size}</maxFileSize>
? ?</rollingPolicy>
? ?<!--過濾器,只記錄INFO級別的日志-->
? ?<filter class="ch.qos.logback.classic.filter.LevelFilter">
? ? ? ?<level>INFO</level>
? ? ? ?<onMatch>ACCEPT</onMatch>
? ? ? ?<onMismatch>DENY</onMismatch>
? ?</filter>
</appender>
?
<!--warn-附加器-->
<appender name="warnFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
? ?<file>${log.base}/warn/_warn.log</file><!--存儲路徑-->
? ?<!--輸出格式-->
? ?<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
? ? ? ?<pattern>${log.pattern}</pattern>
? ? ? ?<charset>${log.charset}</charset>
? ?</encoder>
? ?<!-- 滾動記錄文件,先將日志記錄到指定文件,當(dāng)符合某個條件時,將日志記錄到其他文件。-->
? ?<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
? ? ? ?<fileNamePattern>${log.base}/warn/archive/warn_%d{yyyy-MM-dd}.%i.log.zip
? ? ? ?</fileNamePattern>
? ? ? ?<!--日志最大存儲天數(shù)-->
? ? ? ?<maxHistory>${log.max.days}</maxHistory>
? ? ? ?<!-- 當(dāng)天的日志 超過大小 壓縮日志并保存 -->
? ? ? ?<maxFileSize>${log.max.size}</maxFileSize>
? ?</rollingPolicy>
? ?<filter class="ch.qos.logback.classic.filter.LevelFilter">
? ? ? ?<level>WARN</level>
? ? ? ?<onMatch>ACCEPT</onMatch>
? ? ? ?<onMismatch>DENY</onMismatch>
? ?</filter>
</appender>
?
<!--error-附加器-->
<appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
? ?<file>${log.base}/error/_error.log</file><!--存儲路徑 -->
? ?<!--輸出格式-->
? ?<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
? ? ? ?<pattern>${log.pattern}</pattern>
? ? ? ?<charset>${log.charset}</charset>
? ?</encoder>
? ?<!-- 滾動記錄文件,先將日志記錄到指定文件,當(dāng)符合某個條件時,將日志記錄到其他文件。-->
? ?<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
? ? ? ?<fileNamePattern>${log.base}/error/archive/error_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
? ? ? ?<!--日志最大存儲天數(shù)-->
? ? ? ?<maxHistory>${log.max.days}</maxHistory>
? ? ? ?<!-- 當(dāng)天的日志 超過大小 壓縮日志并保存 -->
? ? ? ?<maxFileSize>${log.max.size}</maxFileSize>
? ?</rollingPolicy>
? ?<!--級別-過濾器 error-->
? ?<filter class="ch.qos.logback.classic.filter.LevelFilter">
? ? ? ?<level>ERROR</level>
? ? ? ?<onMatch>ACCEPT</onMatch>
? ? ? ?<onMismatch>DENY</onMismatch>
? ?</filter>
</appender>
?
<!-- 為某個包下的所有類的指定Appender 這里也可以指定類名稱例如:com.aa.bb.ClassName -->
<!--<logger name="org.springframework.aop.framework.CglibAopProxy" additivity="false">
? ?<level value="info" />
? ?<appender-ref ref="stdout" />
</logger>-->
<logger name="com.fs" additivity="false">
? ?<level value="debug" />
? ?<appender-ref ref="stdout" />
? ?<!--<appender-ref ref="infoFile" />-->
</logger>
<!-- root將級別為“DEBUG”及大于“DEBUG”的日志信息交給已經(jīng)配置好的名為“Console”的appender處理,“Console”appender將信息打印到Console -->
<root level="info">
? ?<appender-ref ref="stdout" /> <!-- 標(biāo)識這個appender將會添加到這個logger -->
? ?<appender-ref ref="infoFile" />
? ?<appender-ref ref="warnFile" />
? ?<appender-ref ref="errorFile" />
</root>
</configuration>

在application.yml文件中指定logback的配置文件

? #指定logback的配置文件
? logging:
? ? config: classpath:logback-demo4.xml

注意:

spring boot默認(rèn)會加載classpath:logback-spring.xml或者classpath:logback-spring.groovy或者:classpath:logback.xml

過濾器與攔截器的配置

過濾器配置:

第一種方式: 使用web3.0的注解方式: @WebFilter, javaWeb學(xué)習(xí)的

需要讓我們的springboot掃描這個注解, 以javaWeb的注解:

在啟動類, 使用@ServletComponentScan注解

第二種方式: 配置類

@SpringBootConfiguration
public class JavaWebConfig {
?
    //配置過濾器
    @Bean
    public FilterRegistrationBean<AFilter> configAFilter(){
        FilterRegistrationBean<AFilter> filterFilterRegistrationBean = new FilterRegistrationBean<>();
        //把過濾器對象設(shè)置給FilterRegistrationBean
        filterFilterRegistrationBean.setFilter(new AFilter());
        //過濾器的配置
        //設(shè)置過濾器攔截的url
        filterFilterRegistrationBean.addUrlPatterns("/*");
        //設(shè)置過濾器名字
        filterFilterRegistrationBean.setName("AFilter");
        //設(shè)置過濾器的執(zhí)行順序
        filterFilterRegistrationBean.setOrder(1);
        return filterFilterRegistrationBean;
    }
}

攔截器的配置:

只能通過配置類進(jìn)行配置

攔截器是屬于SpringMVC的技術(shù), SpringBoot 對SpringMVC提供自動配置類,我們不能配置一個springMVC的配置類,替換我們自動配置類,

配置類實(shí)現(xiàn)WebMvcConfigurer接口

@SpringBootConfiguration
public class MyWebMvcConfigretion implements WebMvcConfigurer {
//配置攔截器
?
@Override
public void addInterceptors(InterceptorRegistry registry) {
   registry.addInterceptor(new AInterceptor()).addPathPatterns("/**").excludePathPatterns("/testLog");
?
?
}
}

全局異常處理器

基于AOP的異常增強(qiáng): @ControllerAdvice

步驟:

1.新建一個全局的異常類

2.在class上添加注解,@ControllerAdvice

3.在class中添加一個方法

4.在方法上添加@ExceptionHandler攔截相應(yīng)的異常

5.如果返回的是View ---方法的返回值是ModelAndView

6.如果返回的是String或者是JSON數(shù)據(jù),那么需要在方法上添加@ResponseBody注解

@ControllerAdvice  //Controller的增強(qiáng)類
public class GlobalDefaultExceptionHandler {
?
    //這個方法處理Controller[拋出所有的異常類型
    @ExceptionHandler(Exception.class)
    public String handleException1(Exception ex){
        return ex.getMessage();
    }
?
   /* @ExceptionHandler(RuntimeException.class)
    public String handleException2(Exception ex){
        return ex.getMessage();
    }*/
}

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java接口的相關(guān)知識

    詳解Java接口的相關(guān)知識

    今天給大家?guī)淼氖顷P(guān)于Java基礎(chǔ)的相關(guān)知識,文章圍繞著Java接口展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • javaweb中mysql數(shù)據(jù)庫連接步驟方法及其實(shí)例

    javaweb中mysql數(shù)據(jù)庫連接步驟方法及其實(shí)例

    這篇文章主要介紹了使用java web 連接MySQL數(shù)據(jù)庫的驅(qū)動方法的相關(guān)知識,本文介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友可以參考下
    2017-04-04
  • SpringBoot實(shí)現(xiàn)短鏈接系統(tǒng)的使用示例

    SpringBoot實(shí)現(xiàn)短鏈接系統(tǒng)的使用示例

    由于短鏈接可能涉及到用戶隱私和安全問題,所以短鏈接系統(tǒng)也需要符合相關(guān)的數(shù)據(jù)保護(hù)和安全標(biāo)準(zhǔn),本文主要介紹了SpringBoot實(shí)現(xiàn)短鏈接系統(tǒng)的使用示例,感興趣的可以了解一下
    2023-09-09
  • 在Eclipse中運(yùn)行Solr 基礎(chǔ)知識

    在Eclipse中運(yùn)行Solr 基礎(chǔ)知識

    Solr我還是個菜鳥,寫這一些文章只是記錄一下最近一段時間學(xué)習(xí)Solr的心得,望各位同仁不要見笑,還希望多多指點(diǎn)
    2012-11-11
  • MyBatis各種類型查詢數(shù)據(jù)參數(shù)綁定的實(shí)現(xiàn)

    MyBatis各種類型查詢數(shù)據(jù)參數(shù)綁定的實(shí)現(xiàn)

    本文主要介紹了MyBatis各種類型查詢數(shù)據(jù)參數(shù)綁定的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java中的ThreadLocalMap源碼解讀

    Java中的ThreadLocalMap源碼解讀

    這篇文章主要介紹了Java中的ThreadLocalMap源碼解讀,ThreadLocalMap是ThreadLocal的內(nèi)部類,是一個key-value數(shù)據(jù)形式結(jié)構(gòu),也是ThreadLocal的核心,需要的朋友可以參考下
    2023-09-09
  • java飛行棋實(shí)現(xiàn)思路

    java飛行棋實(shí)現(xiàn)思路

    這篇文章主要為大家詳細(xì)介紹了java飛行棋的實(shí)現(xiàn)思路,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • SpringBoot?2.7.18?集成?Mybatis?Plus?+?Druid的實(shí)例詳解

    SpringBoot?2.7.18?集成?Mybatis?Plus?+?Druid的實(shí)例詳解

    Mybatis和MybatisPlus都是流行的持久層框架,MybatisPlus在Mybatis基礎(chǔ)上增加了更多便捷的功能,如自動CRUD、分頁插件等,文章還提到了Entity、Mapper、Service、Controller等組件的基本使用方法,為開發(fā)者提供了一套完整的集成方案
    2024-10-10
  • Java基于二維數(shù)組實(shí)現(xiàn)的數(shù)獨(dú)問題示例

    Java基于二維數(shù)組實(shí)現(xiàn)的數(shù)獨(dú)問題示例

    這篇文章主要介紹了Java基于二維數(shù)組實(shí)現(xiàn)的數(shù)獨(dú)問題,涉及java針對數(shù)組的遍歷、計(jì)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • 使用mongoTemplate實(shí)現(xiàn)多條件加分組查詢方式

    使用mongoTemplate實(shí)現(xiàn)多條件加分組查詢方式

    這篇文章主要介紹了使用mongoTemplate實(shí)現(xiàn)多條件加分組查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論