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

导读:本篇文章讲解 SpringBoot将配置文件的值加载到工具类的静态变量中(多环境运行加载),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

 

一.首先创建一个SpringBoot项目

项目结构:

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

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

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.csrcb</groupId>
    <artifactId>spring_static</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

二、创建配置文件

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

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

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

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

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

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

三.创建实体类

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将配置文件的值加载到工具类的静态变量中(多环境运行加载)

-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将配置文件的值加载到工具类的静态变量中(多环境运行加载)

再次启动环境(sit下)

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

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

再指定prod环境下的运行

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

 使用浏览器请求路由

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/12314.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!