SpringBoot构建微服务实战 之 Configuration(二)
上一章我们学习了SpringBoot是怎样读取自定义配置文件和默认配置文件的,本章我们将学习一下SpringBoot 为我们提供哪一些高度自定义读取配置文件中的配置项的方法和途径。
使用 Environment 对象读取配置项
SpringBoot 封装了一个专门用来读取配置项的对象 Environment。注入使用
@Autowired private Environment environment; System.out.println("local.ip=" + environment.getProperty("local.ip"));
由 application调用
ConfigurableApplicationContext context = SpringApplication.run(App.class, args); System.out.println("Market.Domain="+context.getEnvironment().getProperty("Market.Domain"))
使用@Value 来将配置项赋值给对象属性
package com.springBoot.entrance.configuration.statics; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @Component public class UnitConfiguration { @Value("${local.port}") private String localPort; /** * 使用{@value}是 属性配置项一定要有,可以为空。没有配置项可参考一下方法来实现 */ @Value("${local.domain:'En'}") private String localDomain; @Value("${local.area}") private String localArea; @Autowired private Environment environment; public void show() throws Exception { System.out.println("local.ip=" + environment.getProperty("local.ip")); System.out.println("local.port=" + localPort); System.out.println("local.domain=" + localDomain); System.out.println("local.area=" + localArea); } }
代码解读:
直接注入:直接将配置项赋值给对象属性
@Value("${local.port}") private String localPort;
默认赋值:在JAVA 代码中给属性赋值
@Value("${local.domain:'En'}") private String localDomain;
@Value("Conctract") private String type;
通过将配置项注入对象,然后获取对象属性以达到获取配置项信息。
配置文件信息
arr.hosts[0]=192.168.100.0 arr.hosts[1]=192.168.100.1 arr.hosts[2]=192.168.100.2
ListExmaple.java
package com.springBoot.entrance.configuration.statics; import java.util.ArrayList; import java.util.List; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "arr") public class ListExmaple { private List<String> hosts = new ArrayList<>(); @Override public String toString() { return "ListExmaple [hosts=" + hosts + "]"; } public List<String> getHosts() { return hosts; } public void setHosts(List<String> hosts) { this.hosts = hosts; } }
代码解读: 通过使用 @ConfigurationProperties 前缀来制定配置项
App.java
@Configuration public class App { public static void main(String[] args) throws Exception { ConfigurableApplicationContext context = SpringApplication.run(App.class, args); System.out.println(context.getBean(ListExmaple.class)); } }
代码解读d:入口启用 @Configuration 注解
结果
ListExmaple [hosts=[192.168.100.0, 192.168.100.1, 192.168.100.2]]
小结
SpringBoot 为我们提供了多种方法获取配置项。
一般我们使用将配置项注入对象的方法来获取配置项信息。