Explain how SpringBoot annotations read configuration files in detail

  • 2021-08-17 00:07:26
  • OfStack

1. @ Value reads the values in the application. properties configuration file

application. properties configuration file


fileName=configName

PropertiesConfig class file


import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class PropertiesConfig {
  // Pass @Value Annotation reading fileName Value of 
  @Value("${fileName}")
  private String fileName;

  public String getFileName() {
    return fileName;
  }

  public void setFileName(String fileName) {
    this.fileName = fileName;
  }
}

Test


import com.model.PropertiesConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class PropertiesConfigTest {
  @Autowired
  private PropertiesConfig propertiesConfig;
  @Test
  public void test(){
    System.out.println(propertiesConfig.getFileName());// Result output: configName
    assert "configName".equals(propertiesConfig.getFileName());
  }
}

2. @ ConfigurationProperties reads values from multiple application. properties configuration files

application. properties file


database.username=root
database.password=root

DatabaseConfig class file


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties("database")
public class DatabaseConfig {
  private String userName;
  private String passWord;

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getPassWord() {
    return passWord;
  }

  public void setPassWord(String passWord) {
    this.passWord = passWord;
  }
}

Test


import com.model.DatabaseConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DatabaseConfigTest {
  @Autowired
  private DatabaseConfig databaseConfig;
  @Test
  public void test(){
    System.out.println("username = " + databaseConfig.getUserName() +", password = "+databaseConfig.getPassWord());// Result output: username = root, password = root
    assert "root".equals(databaseConfig.getUserName());
    assert "root".equals(databaseConfig.getPassWord());
  }
}

3. @ PropertySource reads any configuration file

New property-source. properties configuration file


fileName=configName
database.username=root
database.password=root

PropertySourceConfig class file


import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@PropertySource(value = {"classpath:property-source.properties"})
@ConfigurationProperties("database")
public class PropertySourceConfig {
  @Value("${fileName}")
  private String fileName;
  private String userName;
  private String passWord;

  public String getFileName() {
    return fileName;
  }

  public void setFileName(String fileName) {
    this.fileName = fileName;
  }

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getPassWord() {
    return passWord;
  }

  public void setPassWord(String passWord) {
    this.passWord = passWord;
  }
}

Test


import com.model.PropertySourceConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class PropertySourceConfigTest {

  @Autowired
  private PropertySourceConfig propertySourceConfig;

  @Test
  public void test(){
    assert "configName".equals(propertySourceConfig.getFileName());
    System.out.println("fileName = " + propertySourceConfig.getFileName());// Result output: configName
    assert "root".equals(propertySourceConfig.getUserName());
    System.out.println(propertySourceConfig.getUserName());// Result output: root
    assert "root".equals(propertySourceConfig.getPassWord());
    System.out.println(propertySourceConfig.getPassWord());// Result output: root
  }
}

Complete code link: read-config-file project address


Related articles: