Home  >  Article  >  Java  >  How to read custom properties configuration file under SpringBoot

How to read custom properties configuration file under SpringBoot

WBOY
WBOYforward
2023-05-13 22:43:112344browse

1. Create a new .properties file in resource

Create a new config folder in the resource directory, and then create a new .properties file and place it in the folder. As shown in the figure remote.properties

How to read custom properties configuration file under SpringBoot

2. Write the configuration file

remote.uploadFilesUrl=/resource/files/
remote.uploadPicUrl=/resource/pic/

3. Create a new one Configuration class RemoteProperties.java

@Configuration
@ConfigurationProperties(prefix = "remote", ignoreUnknownFields = false)
@PropertySource("classpath:config/remote.properties")
@Data
@Component
public class RemoteProperties {
  private String uploadFilesUrl;
  private String uploadPicUrl;
}

where

@Configuration indicates that this is a configuration class
@ConfigurationProperties(prefix = "remote", ignoreUnknownFields = false) This annotation is used Binding properties. prefix is ​​used to select the prefix of the attribute, which is "remote" in the remote.properties file. ignoreUnknownFields is used to tell SpringBoot to throw an exception when there is an attribute that cannot match the declared field.
@PropertySource("classpath:config/remote.properties") Configuration file path
@Data This is a lombok annotation, used to generate getter&setter methods
@Component is identified as Bean

4. How to use?

Annotate EnableConfigurationProperties(RemoteProperties.class) on the class table where you want to use the configuration file method
and automatically inject

@Autowired
RemoteProperties remoteProperties;

Use remoteProperties.getUploadFilesUrl( in the method ) to get the configuration content.

@EnableConfigurationProperties(RemoteProperties.class)
@RestController
public class TestService{
  @Autowired
  RemoteProperties remoteProperties;

  public void test(){
    String str = remoteProperties.getUploadFilesUrl();
    System.out.println(str);
  }
}

Str here is "/resource/files/" in the configuration file.

PS: Let’s take a look at the two ways to read the config configuration file in Spring-boot

Those who have learned about spring-Boot technology should know Spring-Boot The core configuration file application.properties, of course, you can also customize the configuration file information through annotations.

How Spring-Boot reads the configuration file:

1. Read the contents of the core configuration file information application.properties

Core configuration file It refers to the application.properties or application.yml configuration file in the resources root directory. There are two ways to read these two configuration files, both of which are relatively simple.

The content of the core configuration file application.properties is as follows:

test.msg=Hello World SpringBoot

Method 1: Use @Value method (commonly used)

package Solin.controller; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 
@RestController 
public class WebController { 
  @Value("${test.msg}") 
  private String msg; 
  @RequestMapping("/index1")  
  public String index1(){ 
    return "方式一:"+msg; 
  } 
}

Note: in @Value The ${} contains the key name in the core configuration file. Adding @RestController to the Controller class means that all views in this class will be displayed in JSON, similar to adding @ResponseBody to the view method.
When accessing: http://localhost:8088/index1, we get: "Method 1: Hello World SpringBoot"

Method 2: Use Environment method

package Solin.controller; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.core.env.Environment; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 
@RestController 
public class WebController { 
  @Autowired 
  private Environment env; 
   
  @RequestMapping("/index2")  
  public String index2(){ 
    return "方式二:"+env.getProperty("test.msg"); 
  } 
}

Note: This method is completed by dependency injection Evnironment. Add the @Autowired annotation to the created member variable private Environment env to complete the dependency injection, and then use env.getProperty("key name") to read the corresponding value.
When accessing: http://localhost:8088/index2, we get: "Method 2: Hello World SpringBoot"

2. Read the custom configuration file information, for example: author.properties

In order not to destroy the original ecology of the core file, but also need to have customized configuration information, usually a custom configuration file will be selected to put this customized information, which is created here in the resources directory. The content of the configuration file author.properties

resources/author.properties is as follows:

author.name=Solin 
author.age=22

Create an entity class for management configuration:

package Solin.controller; 
 
import org.springframework.boot.context.properties.ConfigurationProperties; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.stereotype.Component; 
 
//加上注释@Component,可以直接在其他地方使用@Autowired来创建其实例对象 
@Component 
@ConfigurationProperties(prefix = "author",locations = "classpath:author.properties")   
public class MyWebConfig{ 
  private String name; 
  private int age; 
  public String getName() { 
    return name; 
  } 
  public void setName(String name) { 
    this.name = name; 
  } 
  public int getAge() { 
    return age; 
  } 
  public void setAge(int age) { 
    this.age = age; 
  } 
}

Note:

There are two properties in the @ConfigurationProperties annotation:

locations: Specify the location of the configuration file
prefix: Specify the prefix of the key name in the configuration file (in my configuration file here All key names start with author.)

Using @Component allows the class to be relied upon in other places, that is, using the @Autowired annotation to create instances.

Create Test Controller

package Solin.controller; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 
@Controller  
public class ConfigController { 
  @Autowired 
  private MyWebConfig conf; 
   
  @RequestMapping("/test")  
  public @ResponseBody String test() { 
    return "Name:"+conf.getName()+"---"+"Age:"+conf.getAge();  
  } 
}

Note: Since the @Component annotation is added to the Conf class, you can use @Autowired directly here to create its instance object.

When accessing: http://localhost:8088/test, I got: "Name:Solin---Age:22"

The above is the detailed content of How to read custom properties configuration file under SpringBoot. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete