<util:properties id="demoProps" location="classpath:demo.properties" />
引入属性文件。再定义一个Bean来读取这些属性,Bean配置:
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="staticMethod" value="包名.DemoUtil.init" /> <property name="arguments"> <list> <ref bean="demoProps" /> </list> </property> </bean>
Bean定义:
public class DemoUtil { private static Properties properties; static void init(Properties props) { properties = props; } public static String getValue(String key){ return properties.getProperty(key); } }
在其它地方通过DemoUtil.getValue()方法来访问具体某个属性的值。
- 如果有使用devtools,devtools 全局设置的属性(用户目录 ~/.spring-bootdevtools.properties)
- 测试类的注解@TestPropertySource
- 测试类属性注解 @SpringBootTest#properties
- 命令行参数
- SPRING_APPLICATION_JSON里的属性(环境变量或系统属性)
- ServletConfig初始化参数
- ServletContext初始化参数
- JNDI参数 java:comp/env
- Java系统属性 System.getProperties()
- 操作系统环境变量
- RandomValuePropertySource 配置的属性 random.*
- jar包外部的applictaion-{profile}.properties,applictaion-{profile}.yml配置文件
- jar包内部的applictaion-{profile}.properties,applictaion-{profile}.yml配置文件
- jar包外部的applictaion.properties,applictaion.yml配置文件
- jar包内部的applictaion.properties,applictaion.yml配置文件
- @Configuration类上的 @PropertySource注解指定的配置文件
- 默认属性: SpringApplication.setDefaultProperties
java -jar springboot-demo-properties.jar --my.name=command_line_devlink
该参数值将会覆盖应用其它地方的同名属性配置值。命令行参数放在xx.jar 的后面。
java -Dmy.name=system_properties_devlink -jar springboot-demo-properties.jar
Java系统属性放在java命令之后。
my.name=devlink my.list[0]=aaa //配置列表 my.list[1]=bbb
.yml文件属性配置格式:
my: name: devlink list: //配置列表 - aaa - bbb
yml中,属性名与值之间冒号后面必须有空格。
- jar包所在当前目录下的子目录/config
- jar包所在当前目录
- classpath根目录下的子目录/config
- classpath根目录
@Value("${my.name}") private String myName;
可以指定默认值,如 @Value("${my.gender:f}"), 当my.gender未配置时,默认使用值"f"
@Configuration @ConfigurationProperties(prefix = "my") public class MyConfig { private String name; getter/setter; }
然后在需要访问的Bean中,通过@Autowired 注入MyConfig实例,通过getName()方法即可访问my.name属性值。
@Autowired private Environment env;
然后调用env.getProperty("my.name")访问。