亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot解析自定義yml文件的流程步驟

 更新時間:2024年06月27日 10:02:47   作者:Winson.J  
這篇文章主要介紹了SpringBoot解析自定義yml文件的流程步驟,文章通過代碼示例和圖文結合的方式給大家介紹的非常詳細, 對大家的學習或工作有一定的幫助,需要的朋友可以參考下

背景

公司產品微服務架構下有十幾個模塊,幾乎大部分模塊都要連接redis。每次在客戶那里部署應用,都要改十幾遍配置,太痛苦了。當然可以用nacos配置中心的功能,配置公共參數。不過我是喜歡在應用級別上解決問題,因為并不是每個項目都會使用nacos,做個知識儲備還是不錯的。

公共配置文件位置

公共配置文件

啟動本地redis(windows版)

啟動redis

當前redis 沒有數據

在這里插入圖片描述

初始化redis

這里的初始化和正常把redis配置信息放到application.yml里的初始化是一樣的。

package cn.com.soulfox.common.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * 
 * @create 2024/4/11 10:48
 */
@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Slf4j
public class RedisTemplateConfig {

    @Bean
    @ConditionalOnMissingBean(name = "redisTemplate")
    public RedisTemplate<String, Object> getRedisTemplate(RedisConnectionFactory factory){
        log.info("開始初始化 RedisTemplate ------------------");
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // key的序列化類型
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setConnectionFactory(factory);
        log.info("初始化 RedisTemplate 結束------------------");
        return redisTemplate;
    }
}

解析自定義sf-redis.yml

package cn.com.soulfox.business.config;

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.FileSystemResource;
import org.springframework.stereotype.Component;

/**
 * 
 * @create 2024/6/26 16:41
 */
@Configuration
public class CommonConfig {
    
    @Bean("common-config")
    public static PropertySourcesPlaceholderConfigurer properties() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();

        YamlPropertiesFactoryBean redis = new YamlPropertiesFactoryBean();
        //文件路徑寫死的,真正做項目時,文件路徑可以配置到application.yml文件
        FileSystemResource redisResource = new FileSystemResource("../common-config/sf-redis.yml");
        redis.setResources(redisResource);
		configurer.setPropertiesArray(redis.getObject());
		
		//如果有多個配置文件,也是可以處理的。setPropertiesArray(Properties... propertiesArray)方法的參數是個數組,
		//如下還可以同時處理文件sf-ports.yml,此時configurer.setPropertiesArray(redis.getObject());代碼要注釋掉
		
		//YamlPropertiesFactoryBean ports = new YamlPropertiesFactoryBean();
//        FileSystemResource portsResource = new FileSystemResource("../common-config/sf-ports.yml");
//        ports.setResources(portsResource);
		//同時添加sf-redis.yml和sf-ports.yml的配置信息
//        configurer.setPropertiesArray(redis.getObject(), ports.getObject());
        return configurer;
    }
}

應用啟動類

注意一下,因為我已經搭建了完整的微服務,包括nacos,mybatis,feign等,所有啟動類上注解比較多。如果只是單純測試一下,引入springboot基礎框架和redis依賴,寫一個基礎啟動類就可以了。

package cn.com.soulfox.business;

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.PathResource;
import org.springframework.core.io.Resource;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import tk.mybatis.spring.annotation.MapperScan;

import java.io.File;

@SpringBootApplication
@EnableDiscoveryClient//nacos注冊中心
@EnableFeignClients(basePackages = {"cn.com.soulfox.common.feign.client"})//feign掃描
@MapperScan(basePackages={"cn.com.soulfox.*.mvc.mapper"})//mybatis mapper掃描
@EnableTransactionManagement//開啟數據庫事務
@ComponentScan("cn.com.soulfox")
public class BusinessApplicationRun {

	public static void main(String[] args) {
		SpringApplication.run(BusinessApplicationRun.class, args);
	}

}

啟動一下應用看看redis是否初始化成功

在這里插入圖片描述

測試一下是否可以正常使用

單元測試類

package cn.com.soulfox.common.config;

import cn.com.soulfox.business.BusinessApplicationRun;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * 
 * @create 2024/6/26 16:52
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = BusinessApplicationRun.class,
        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class CommonConfigTest {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    //文件sf-redis.yml里屬性的使用和applications.yml一樣
    @Value("${spring.redis.host}")
    private String redisHost;

    @Test
    public void test(){
        System.out.println("從文件取參數測試+++++++++++");
        System.out.println("redisHost: " + redisHost);
    }
}

測試sf-redis.yml屬性使用

使用方法和配置在application.yml文件是一樣,都是通過@Value注解獲取

測試結果

在這里插入圖片描述

測試redis是否可以正常使用

測試寫入數據,增加以下測試方法

	@Test
    public void testRedisSetValue(){
        this.redisTemplate.opsForValue().set("test", "test123");
    }

測試結果

在這里插入圖片描述

測試讀取數據,增加以下測試方法

	@Test
    public void testRedisGetValue(){
        Object testValue = this.redisTemplate.opsForValue().get("test");
        System.out.println(testValue);
    }

測試結果

在這里插入圖片描述

總結一下

現在的微服務,大多使用nacos作為注冊中心,同事nacos也能作為配置中心使用。公共配置一般放在nacos中,以上方法沒有什么用處。但總有項目可能不會使用nacos,比如使用eureka,這時候以上方法就有用武之地。這個方法可以作為知識儲備,了解一下總是有好處的 :–)

還有一點需要注意的,就是yml文件是在程序啟動后解析的,所以文件里的配置信息,在application.yml里是不能通過${xxx.xxx}使用的。

以上就是SpringBoot解析自定義yml文件的流程步驟的詳細內容,更多關于SpringBoot解析yml文件的資料請關注腳本之家其它相關文章!

相關文章

  • java 判斷兩個時間段是否重疊的案例

    java 判斷兩個時間段是否重疊的案例

    這篇文章主要介紹了java 判斷兩個時間段是否重疊的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java 實現線程池任務編排的示例代碼

    Java 實現線程池任務編排的示例代碼

    任務編排是將多個任務按照特定的依賴關系和執(zhí)行順序進行組織和管理的過程,以確保任務能按預定邏輯順序高效執(zhí)行,本文就來介紹一下Java 實現線程池任務編排的示例代碼,感興趣的可以了解一下
    2024-10-10
  • 淺談Spring的兩種事務定義方式

    淺談Spring的兩種事務定義方式

    下面小編就為大家?guī)硪黄獪\談Spring的兩種事務定義方式。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Spring如何基于aop實現操作日志功能

    Spring如何基于aop實現操作日志功能

    這篇文章主要介紹了Spring如何基于aop實現操作日志功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • springboot攔截器無法注入redisTemplate的解決方法

    springboot攔截器無法注入redisTemplate的解決方法

    在工作中我們經常需要做登錄攔截驗證或者其他攔截認證功能,但是在寫攔截器的時候發(fā)現redisTemplate一直無法注入進來,本文就詳細的介紹了解決方法,感興趣的可以了解一下
    2021-06-06
  • 帶你快速搞定java并發(fā)庫

    帶你快速搞定java并發(fā)庫

    本文主要介紹了java高并發(fā)寫入用戶信息到數據庫的幾種方法,具有很好的參考價值。下面跟著小編一起來看下吧,希望能給你帶來幫助
    2021-07-07
  • java中Locks的使用詳解

    java中Locks的使用詳解

    這篇文章主要介紹了java中Locks的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Java中將Html轉換為PDF的方法和步驟

    Java中將Html轉換為PDF的方法和步驟

    這篇文章主要介紹了Java中如何將Html轉換為PDF的方法,文中有相關的代碼示例和步驟講解,感興趣的同學可以參考閱讀
    2023-06-06
  • Java輸入三個整數并把他們由小到大輸出(x,y,z)

    Java輸入三個整數并把他們由小到大輸出(x,y,z)

    這篇文章主要介紹了輸入三個整數x,y,z,請把這三個數由小到大輸出,需要的朋友可以參考下
    2017-02-02
  • Spring中的@RestControllerAdvice注解使用方法解析

    Spring中的@RestControllerAdvice注解使用方法解析

    這篇文章主要介紹了Spring中的@RestControllerAdvice注解使用方法解析,@RestControllerAdvice是Controller的增強 常用于全局異常的捕獲處理 和請求參數的增強,需要的朋友可以參考下
    2024-01-01

最新評論