一、@Value
必须是Bean类
@RestController
@RequestMapping("/envTest")
public class EnvTestController {
@Value("${ruoyi.name}")
private String name;
@GetMapping("/readEnv")
public String readEnv() {
return name;
}
}
为静态方法赋值
@Component
public class YamlConfig {
@Value("${spring.dynamic.datasource.druid.master.url}")
private String MASTER_URL;
private static String DATASOURCE_URL;
@PostConstruct
public void afterPropertiesSet() throws Exception {
this.DATASOURCE_URL = MASTER_URL;
}
public static String getAllTableNameBySchema() {
return DATASOURCE_URL;
}
}
@RestController
@RequestMapping("/envTest")
public class EnvTestController {
@GetMapping("/readEnv")
public String readEnv() {
return YamlConfig.getAllTableNameBySchema();
}
}
二、@ConfigurationProperties
通过自动绑定和类型转换等机制,将指定前缀的属性集合自动绑定到一个Bean对象上。
- 新建一个配置类接受配置文件的相关参数
@Data
@Configuration
@ConfigurationProperties(prefix = "ruoyi")
public class RuoYi {
private String name;
private String version;
private String copyrightYear;
private String profile;
private boolean addressEnabled;
private String captchaType;
}
- 使用时直接从@Resource注入依赖即可获取
@RestController
@RequestMapping("/envTest")
public class EnvTestController {
@Resource
private RuoYi ruoYi;
@GetMapping("/readEnv")
public String readEnv() {
return JSON.toJSONString(ruoYi);
}
}
三、Environment
注入Environment类即可
@RestController
@RequestMapping("/envTest")
public class EnvTestController {
@Resource
private Environment environment;
@GetMapping("/readEnv")
public String readEnv() {
return environment.getProperty("ruoyi.name");
}
}
也可以通过实现EnvironmentAware接口,重写setEnvironment
@RestController
@RequestMapping("/envTest")
public class EnvTestController implements EnvironmentAware {
private Environment env;
@GetMapping("/readEnv")
public String readEnv() {
return env.getProperty("ruoyi.name");
}
@Override
public void setEnvironment(Environment environment) {
this.env = environment;
}
}
以上是获取系统默认的配置文件。application.yml或者application.properties文件。
以下是获取自定义配置文件的方法。
四、@PropertySources加载Properties文件
只能加载.properties文件
@RestController
@RequestMapping("/envTest")
@PropertySources({
@PropertySource(value = "classpath:a.properties",encoding = "UTF-8")
})
public class EnvTestController {
@Value("${name}")
private String aname;
@GetMapping("/readEnv")
public String readEnv() {
return aname;
}
}
乱码解决:将这几处设置都标记为UTF-8,同时勾上Transparent native-to-ascii conversion的选项,然后重新创建approperties文件。
五、YamlPropertiesFactoryBean加载yaml文件
通过YamlPropertiesFactoryBean类将yml配置文件注入到Bean中。
@Configuration public class YamlConfig { @Bean public static PropertySourcesPlaceholderConfigurer yamlConfigurer() { PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean(); yaml.setResources(new ClassPathResource("test.yml")); configurer.setProperties(Objects.requireNonNull(yaml.getObject())); return configurer; } }
通过@Value或者Environment.getProperty()方法获取到定义的属性值
@RestController @RequestMapping("/envTest") public class EnvTestController { @Value("${animal.name}") private String aname; @GetMapping("/readEnv") public String readEnv() { return aname; } }
六、自定义读取
@RestController
@RequestMapping("/envTest")
public class EnvTestController {
@GetMapping("/readEnv")
public String readEnv() {
Properties properties = new Properties();
try {
InputStreamReader inputStreamReader = new InputStreamReader(
this.getClass().getClassLoader().getResourceAsStream("a.properties"),
StandardCharsets.UTF_8
);
properties.load(inputStreamReader);
} catch (Exception e) {
e.printStackTrace();
}
return properties.getProperty("name");
}
}