SpringBoot——配置文件注入静态变量

本文介绍如何在SpringBoot项目中利用YAML配置文件为静态变量赋值,包括配置文件的设置、配置类的定义及测试方法。通过具体实例展示了如何将YAML配置映射到静态变量上,并在测试类中验证配置的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过配置文件,给静态变量赋值

一、配置文件(yaml)

xml:
  url:
    source-file: D:\AA\User.xml
    target-file: D:\BB
    listening-file: D:\AA
    listening-file-suffix: .xml
    listening-cycle: 5

二、配置类

@Configuration
public class YamlFromConstant {
    public static String SOURCE_FILE;
    public static String TARGET_FILE;
    public static String LISTENING_FILE;
    public static String LISTENING_FILE_SUFFIX;
    public static long LISTENING_CYCLE;

    @Value("${xml.url.listening-cycle}")
    public void setListeningCycle(long listeningCycle) {
        LISTENING_CYCLE = listeningCycle;
    }

    @Value("${xml.url.source-file}")
    public void setSourceFile(String sourceFile) {
        SOURCE_FILE = sourceFile;
    }

    @Value("${xml.url.target-file}")
    public void setTargetFile(String targetFile) {
        TARGET_FILE = targetFile;
    }

    @Value("${xml.url.listening-file}")
    public void setListeningFile(String listeningFile) {
        LISTENING_FILE = listeningFile;
    }

    @Value("${xml.url.listening-file-suffix}")
    public void setListeningFileSuffix(String listeningFileSuffix) {
        LISTENING_FILE_SUFFIX = listeningFileSuffix;
    }

}

这里要记住,属性是静态的,但是setter不是。

三、测试类

这里使用的是SpringBoot,需要组件

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

测试类使用如下

import com.hello.HelloMainApplication;
import com.hello.util.YamlFromConstant;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {HelloMainApplication.class})
public class TestHello {
    @Test
    public void test02() {
        System.out.println(YamlFromConstant.SOURCE_FILE);
        System.out.println(YamlFromConstant.TARGET_FILE);
        System.out.println(YamlFromConstant.LISTENING_FILE);
        System.out.println(YamlFromConstant.LISTENING_FILE_SUFFIX);
        System.out.println(YamlFromConstant.LISTENING_CYCLE);
    }
}

运行结果:


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.1.RELEASE)

2020-01-19 21:59:28.241  INFO 20956 --- [           main] TestHello                                :  ··· ···
2020-01-19 21:59:28.242  INFO 20956 --- [           main] TestHello                                :  ··· ···
2020-01-19 21:59:29.303  INFO 20956 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  :  ··· ···
2020-01-19 21:59:29.533  INFO 20956 --- [           main] TestHello                                :  ··· ···
D:\AA\User.xml
D:\BB
D:\AA
.xml
5
2020-01-19 21:59:29.696  INFO 20956 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  :  ··· ···

我们发现启动了SpringBoot,原因是注解@SpringBootTest(classes = {HelloMainApplication.class}) 我们的运行器使用的是Spring的环境,启动器使用的是HelloMainApplication.class
如果你使用的时候出现报错
java.lang.Exception: No runnable methods
请检测你的@Test 的报路径是否是org.junit.Test 如果使用的是 org.junit.jupiter.api.Test 就会报错, 前者一般配合@RunWith 使用,后者可以直接使用,因为我们要测试配置文件需要在spring下测试,所以使用前面的测试方式。

### 如何在Spring Boot中使用配置文件来设置注解参数 #### 配置文件概述 默认情况下,Spring Boot生成的全局配置文件是`application.properties`[^2]。此文件用于存储应用程序的各种属性和配置。 #### 注解与配置文件集成 为了使工具类中的方法能够从配置文件读取参数,在静态上下文中访问这些值,则不仅需要使用`@Value`注解绑定特定键到字段上,还需要采取额外措施确保该字段本身被声明为静态成员变量以便于静态环境中调用[^4]。 下面是一个具体的例子展示如何通过这种方式工作: ```java @Component public class Common { private static String platformID; @Value("${base.param.platformID}") public void setPlatformID(String platformID) { Common.platformID = platformID; } } ``` 这段代码展示了怎样利用`setPlatformID()`方法接收由`@Value`注入来自`application.properties`文件内的`platformID`值,并将其赋给静态域`Common.platformID`。这使得任何其他地方只要能看见这个类就可以直接引用`Common.platformID`而无需实例化对象即可获得所需数据。 #### application.properties 文件示例 对于上述案例而言,对应的`application.properties`应该包含如下条目以提供必要的输入: ```properties base.param.platformID=your_platform_id_value_here ``` 这样就完成了整个流程——即定义了一个可被静态访问的方法级依赖注入机制,它可以从外部资源加载并应用运行时所需的环境敏感型信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值