SpringBoot将配置文件的值加载到工具类的静态变量中(多环境运行加载)

 

一.首先创建一个SpringBoot项目

项目结构:

SpringBoot将配置文件的值加载到工具类的静态变量中(多环境运行加载)_第1张图片

创建pom文件,映入maven工程依赖



    4.0.0

    com.csrcb
    spring_static
    1.0-SNAPSHOT

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.6.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.projectlombok
            lombok
        
    

二、创建配置文件

在resource目录下,创建配置文件application.yml,创建几个不同环境的application-dev,application-sit、application-prod.yml的配置文件,稍后做测试使用,看是否加载不同环境下的配置参数的值

application.yml很简单就一个端口号的配置:

SpringBoot将配置文件的值加载到工具类的静态变量中(多环境运行加载)_第2张图片

在application-dev.yml(开发环境的配置参数的值)、以及sit(测试)、uat(验证)、prod(生产)环境设置一些值

SpringBoot将配置文件的值加载到工具类的静态变量中(多环境运行加载)_第3张图片

不同环境下的测试的配置参数的值不一致,为了测试参数名设置相同下,是否取得对应运行环境的值

三.创建实体类

1.创建加载配置文件的配置类

/**
 * @Classname TestConfig
 * @Description 加载配置文件的配置类
 * @Date 2020/6/16 16:28
 * @Created by gangye
 */
@Configuration
@Data
public class TestConfig {
    @Value("${ftp.username}")
    private String username;

    @Value("${ftp.passwd}")
    private String passwd;

    @PostConstruct
    public void init(){
        ClientUtil.setConfigInfo(this);
    }
}

2.创建工具类,工具类获得配置类的参数值

/**
 * @Classname ClientUtil
 * @Description 工具类,将配置文件的数据通过config引入到静态变量中
 * @Date 2020/6/16 16:29
 * @Created by gangye
 */
@Slf4j
public class ClientUtil {

    private static String USERNAME;
    private static String PASSWD;

    public static void setConfigInfo(TestConfig testConfig) {
        ClientUtil.USERNAME = testConfig.getUsername();
        ClientUtil.PASSWD = testConfig.getPasswd();
    }

    public static String getValue(){
        log.info("获得配置文件的username的值:{}",USERNAME);
        return USERNAME;
    }
}

3.创建路由,模拟调用

/**
 * @Classname controller
 * @Date 2020/6/16 16:35
 * @Created by gangye
 */
@RestController
@RequestMapping(value = "/test")
public class TestController {

    @GetMapping("/getvalue")
    public String getValue(){
        return ClientUtil.getValue();
    }
}

4.创建启动类,在启动类中添加Bean,为了防止启动时配置类的@Value注解找不到配置文件中的值,一个配置文件找不到继续找

/**
 * @Classname AppStart
 * @Description 启动类
 * @Date 2020/6/16 16:26
 * @Created by gangye
 */
@SpringBootApplication
public class AppStart {
    public static void main(String[] args) {
        SpringApplication.run(AppStart.class,args);
    }
}

 启动时添加对应的运行环境设置

SpringBoot将配置文件的值加载到工具类的静态变量中(多环境运行加载)_第4张图片

-Dspring.profiles.active=sit

 若springboot版本低可能会出现java.lang.IllegalArgumentException: Could not resolve placeholder ‘username’ in value “${ftp.username}”这样的报错

解决办法:在启动类中添加下面的代码

    /**
     * Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder ‘name’ in value “${name}”
     * @Description 为了防止启动时配置类的@Value注解找不到配置文件中的值,一个配置文件找不到继续找
     * @Date 2020年6月17日14:40:08
     * @return
     */
    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer(){
        PropertySourcesPlaceholderConfigurer c = new PropertySourcesPlaceholderConfigurer();
        c.setIgnoreUnresolvablePlaceholders(true);
        return c;
    }

SpringBoot将配置文件的值加载到工具类的静态变量中(多环境运行加载)_第5张图片

再次启动环境(sit下)

在浏览器中输入:http://localhost:8000/test/getvalue

SpringBoot将配置文件的值加载到工具类的静态变量中(多环境运行加载)_第6张图片

再指定prod环境下的运行

SpringBoot将配置文件的值加载到工具类的静态变量中(多环境运行加载)_第7张图片

 使用浏览器请求路由

关键使用了@Value注解以及@PostConstruct注解

你可能感兴趣的:(springboot,spring,spring,boot,后端)