在 Spring Boot 应用中,我们通常需要一些配置信息来指导应用的运行。这些配置信息可以包括如下内容:端口号、数据库连接信息、日志配置、缓存配置、认证配置、等等。Spring Boot 提供了多种方式来读取这些配置信息。读取配置的目的是为了在程序中使用这些配置信息,以便对应用进行正确的配置和处理。读取配置的目的是为了方便我们管理和配置应用,让应用能够按照自己的要求进行工作。
@Value
注解@Value("${myapp.name}")
private String appName;
配置内容
结果
如果没用配置对应的内容,会报错,需要填写默认值
@Value("${myapp.name:defaultValue}")
private String appName;
结果
@ConfigurationProperties
注解可以批量注入,比value注解方便
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@ConfigurationProperties(prefix = "myapp")
@Configuration
@Data
public class MyAppProperties {
private String name;
private Integer age;
}
测试
@Resource
private MyAppProperties myAppProperties;
@Test
public void test22(){
System.out.println(myAppProperties.getName());
System.out.println(myAppProperties.getAge());
}
结果
Environment
对象(实现接口)import lombok.Data;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import javax.annotation.Resource;
@Configuration
@Data
public class Environmentconfig implements EnvironmentAware {
private Environment env;
@Override
public void setEnvironment(org.springframework.core.env.Environment environment) {
this.env= environment;
}
}
测试
@Resource
private Environmentconfig environmentconfig;
@Test
public void test22(){
String property = environmentconfig.getEnv().getProperty("myapp.name");
System.out.println(property);
}
结果
Environment
对象(注入方式) import lombok.Data;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import javax.annotation.Resource;
@Configuration
@Data
public class Environmentconfig {
@Resource
private Environment env;
}
测试
@Resource
private Environmentconfig environmentconfig;
@Test
public void test22(){
String property = environmentconfig.getEnv().getProperty("myapp.name");
System.out.println(property);
}
结果
@PropertySource
注解可以读取外部配置
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;
import org.springframework.core.env.Environment;
import javax.annotation.Resource;
@Configuration
@PropertySources({
@PropertySource(value = "classpath:myapp.properties",encoding = "utf-8")
})
@Data
public class AppConfig {
@Value("${test.name}")
private String name;
}
写一个外部配置文件
测试
@Resource
private AppConfig appConfig;
@Test
public void test22(){
System.out.println(appConfig.getName());
}
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
@Configuration
public class MyYamlConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer yamlConfigurer(){
PropertySourcesPlaceholderConfigurer configurer= new PropertySourcesPlaceholderConfigurer();
YamlPropertiesFactoryBean yaml= new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("myapp.yml"));
configurer.setProperties(yaml.getObject());
return configurer;
}
}
外部yml配置文件
测试
@Value("${test.name}")
private String name;
@Test
public void test22(){
System.out.println(name);
}
结果
@Test
public void test22(){
Properties props=new Properties();
try {
InputStreamReader inputStreamReader=new InputStreamReader(
this.getClass().getClassLoader().getResourceAsStream("myapp.properties"),
StandardCharsets.UTF_8
);
props.load(inputStreamReader);
} catch (Exception e) {
throw new RuntimeException(e);
}
System.out.println(props.getProperty("test.name"));
}
或者读取yml文件
@Test
public void test22(){
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(new ClassPathResource("myapp.yml"));
Properties properties = factory.getObject();
System.out.println(properties.getProperty("test.name"));
}
配置文件
测试