在Spring Boot应用中,我们通常会使用`application.properties`或`application.yml`作为主要的配置文件,但有时候根据项目需求,可能需要自定义额外的配置文件。本文将详细介绍如何在Spring Boot环境下读取自定义的`.properties`配置文件。
自定义配置文件的创建。在`src/main/resources`目录下创建一个名为`config`的子目录,然后在这个子目录中创建自定义的`.properties`文件,例如`remote.properties`。这个文件将包含我们的自定义配置,例如:
```properties
remote.uploadFilesUrl=/resource/files/
remote.uploadPicUrl=/resource/pic/
```
接下来,我们需要创建一个配置类来绑定这些配置属性。创建一个名为`RemoteProperties`的Java类,并使用Spring的相关注解来处理配置文件的加载和属性的映射。例如:
```java
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import lombok.Data;
@Data
@Configuration
@ConfigurationProperties(prefix = "remote", ignoreUnknownFields = false)
@PropertySource("classpath:config/remote.properties")
@Component
public class RemoteProperties {
private String uploadFilesUrl;
private String uploadPicUrl;
}
```
在这里,`@Configuration`注解表明`RemoteProperties`是一个配置类;`@ConfigurationProperties(prefix = "remote", ignoreUnknownFields = false)`用于将配置文件中以`remote.`开头的属性与类的字段进行绑定,`ignoreUnknownFields = false`表示当遇到配置文件中未在类中定义的属性时抛出异常;`@PropertySource`指定配置文件的位置,这里是`classpath:config/remote.properties`,表示从类路径下的`config`目录加载`remote.properties`文件;`@Data`是Lombok库提供的注解,用于自动生成getter和setter方法,简化代码。
现在,我们已经定义了配置类,接下来需要在使用这些配置的地方引入它们。在需要使用`RemoteProperties`的类上添加`@EnableConfigurationProperties(RemoteProperties.class)`注解,然后使用`@Autowired`自动注入`RemoteProperties`实例,这样就可以访问配置文件中的属性了。例如:
```java
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
@RestController
@EnableConfigurationProperties(RemoteProperties.class)
public class TestService {
@Autowired
private RemoteProperties remoteProperties;
public void test() {
String uploadFilesUrl = remoteProperties.getUploadFilesUrl();
System.out.println(uploadFilesUrl);
}
}
```
在上面的`test`方法中,`remoteProperties.getUploadFilesUrl()`将返回配置文件中`remote.uploadFilesUrl`的值,即`/resource/files/`。
除了这种基于`@ConfigurationProperties`的方式,Spring Boot还提供了另一种读取配置文件的方式——使用`@Value`注解。这种方式适用于简单的配置项,它可以直接在字段或方法参数上使用,如下:
```java
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AnotherService {
@Value("${remote.uploadFilesUrl}")
private String uploadFilesUrl;
@GetMapping("/test")
public void test() {
System.out.println(uploadFilesUrl);
}
}
```
在`AnotherService`中,`@Value("${remote.uploadFilesUrl}")`将`remote.uploadFilesUrl`的值注入到`uploadFilesUrl`字段中。这种方法适用于不频繁变动的配置项,而`@ConfigurationProperties`更适合管理大量的、结构化的配置。
总结一下,Spring Boot中读取自定义配置文件主要有两种方式:一种是使用`@ConfigurationProperties`结合`@Component`,通过注解将配置文件的属性映射到一个Java类中;另一种是使用`@Value`注解,直接在字段或方法参数上注入配置项的值。这两种方式各有适用场景,可以根据项目的实际需求灵活选择。