
一介闲人
一介闲人
假设配置文件为application.yml
project:
path: /project/p1/
passwd: 123456
通过@Value注解在Bean中读取这两个参数
import org.springframework.beans.factory.annotation.Value;
public class Params {
@Value("${project.path}")
private String path;
@Value("${project.passwd}")
private String passwd;
}
在配置参数数量较少的情况下,可以使用这个方法进行配置参数读入,但是如果参数比较多,一个一个读取则比较麻烦,所以可以使用以下方式进行绑定读取.
假设配置文件为application.yml
project:
path: /project/p1/
passwd: 123456
@Data
@ConfigurationProperties(prefix = "project")
public class Constants {
private String path;
private String passwd;
}
这种方法适合批量绑定读取参数,比@Value便捷高效。
如果需要在代码执行过程中进行参数绑定读取,则可以使用该注解进行 假设配置文件为application.yml
project:
path: /project/p1/
passwd: 123456
import org.springframework.core.env.Environment;
public class EnvironmentTests {
@Resource
private Environment env;
public void test(){
String v1 = env.getProperty("project.path");
System.out.println(v1);
}
}
或者
import org.springframework.core.env.Environment;
import org.springframework.context.EnvironmentAware;
public class EnvironmentTests implements EnvironmentAware {
private Environment env;
public void test(){
String v1 = env.getProperty("project.path");
System.out.println(v1);
}
@Override
public void setEnvironment(Environment environment) {
this.env = environment;
}
}
后面这种事不使用自动装配的方式进行绑定,降低耦合性,或者适用于在自动装配之前的操作。
以上三种读取方式都是读取Spring默认的配置文件[application.yml]中的参数。如果需要读取自定义的外部配置文件则需要用下面这个方式
读取properties格式文件。假设配置文件为test.properties
project.path=/project/p1/
project.passwd=123456
@Data
@Configuration
@PropertySources({@PropertySource(value = "classpath: test.properties", encoding = "utf-8")})
public class PropertySourcesConf {
@Value("${project.path}")
private String path;
@Value("${project.passwd}")
private String passwd;
}
@PropertySources只能读取properties格式的外部配置文件,如果想要读取yml格式的外部配置文件则需要通过下面这个注解
假设配置文件为test.yml
project:
path: /project/p1/
passwd: 123456
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;
import java.util.Objects;
@Configuration
public class MyYamlConf {
@Bean
public static PropertySourcesPlaceholderConfigurer yamlConfigurer() {
PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("test.yml"));
pspc.setProperties(Objects.requireNonNull(yaml.getObject()));
return pspc;
}
}
进行以上配置后,再使用@Value注解进行参数绑定读取即可。
假设配置文件为test.properties
project.path=/project/p1/
project.passwd=123456
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
public class MyParamsConf {
public void paramsRead(){
Properties prop = new Properties();
try {
InputStreamReader isr = new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream("test.properties"), StandardCharsets.UTF_8);
prop.load(isr);
}catch (Exception e){
e.printStackTrace();
}
System.out.println(prop.getProperty("project.path"));
System.out.println(prop.getProperty("project.passwd"));
}
}
评论