1.@Value
数组属性在配置文件中用逗号隔开,需要注意的一点:在spring框架中controller层获取属性需要在spring和springmvc的配置文件中都添加属性文件引用,不然启动时无法读取属性文件。而在springboot直接配置属性就可在controller层获取。
2.Environment
通过注入获取Environment对象,然后再获取定义在配置文件的属性值;或者通过ApplicationContext获取Environment对象后再获取值
@RestController public class ConfigureController extends BaseController{ private static final String MINE_HELLO="mine.hello"; private static final String MINE_INT_ARRAY="mine.int-array"; @Resource private Environment env; @RequestMapping("config") public void config(){ String a=applicationContext.getEnvironment().getProperty(MINE_HELLO); String c=applicationContext.getEnvironment().getProperty(MINE_INT_ARRAY); System.out.println(a); System.out.println(c); } @RequestMapping("envir") public void envir(){ String a=env.getProperty(MINE_HELLO); String c=env.getProperty(MINE_INT_ARRAY); System.out.println(a); System.out.println(c); } }
这里BaseController中注入了一个ConfigurableApplicationContext对象。获取的属性均为String类型
3.@ConfigurationProperties
@ConfigurationProperties作用在类上,用于注入Bean属性,然后再通过当前Bean获取注入值
@RestController public class PropertiesController { @Autowired private Attribute attribute; @RequestMapping("property") public void property(){ System.out.println(attribute.getHello()); System.out.println(Arrays.toString(attribute.getIntArray())); } } @Component //@PropertySource("classpath:application.yaml") @ConfigurationProperties(prefix = "mine") class Attribute{ private String hello; private Integer[] intArray; public void setHello(String hello) { this.hello = hello; } public void setIntArray(Integer[] intArray) { this.intArray = intArray; } public String getHello() { return hello; } public Integer[] getIntArray() { return intArray; } }
我的属性名为int-array,在Attribute类中还是可以用驼峰命名法获取属性