目录
本篇博客主要的内容概要:
一.读取单个配置文件:
application.properties中自定义2个属性
local.ip=192.168.1.100 local.port=8080
@Value读取
@Component public class Test { @Value("${local.ip}") private String ip; @Value("${local.port}") private Integer port; public void show(){ System.out.println("local.ip===="+ip ); System.out.println("local.port===="+port); } }
入口中测试下:
@SpringBootApplication public class Demo2Application { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args); context.getBean(Test.class).show(); context.close(); } }
结果显示已经读取到属性:
②通过Environment的getProperty方法
修改test试下:
@Component public class Test { @Autowired private Environment env; public void show(){ System.out.println("local.ip===="+env.getProperty("local.ip") ); System.out.println("local.ip===="+env.getProperty("local.port") ); } }
运行入口函数:
测试结果ok。
同时也可以在入口函数中使用:
@SpringBootApplication public class Demo2Application { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args); context.getBean(Test.class).show(); System.out.println(context.getEnvironment().getProperty("local.ip")); System.out.println(context.getEnvironment().getProperty("local.port")); context.close(); } }
运行结果:
为什么context可以直接使用这种方式调用呢?
看下e-r图:
ConfigurableApplicationContext 的上级可以找到EnvironmentCapable这个接口,该接口有获取Enviroment对象的方法,所以就可以直接使用了。
二、配置文件的属性值操作
1.配置属性可以为空值
application.properties中让tomcat.port为空值
local.ip=192.168.1.100 local.port=8080 tomcat.port=
@Component public class Test { @Value("${tomcat.port}") private String tomcatPort; public void show(){ System.out.println("local.ip===="+tomcatPort ); } }
测试一下:
@SpringBootApplication public class Demo2Application { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args); context.getBean(Test.class).show(); context.close(); }
运行结果:没有报错,打印空值:
2.配置属性设置默认值
@Component public class Test { @Value("${tomcat.port:9090}") private String tomcatPort; public void show(){ System.out.println("tomcat.port===="+tomcatPort ); } }
然后,properties配置文件中,删除这个属性 tomcat.port=
测试,已经设置了默认值9090:
三、修改配置文件名称:
配置文件默认名称为:application,后缀,为properties或者yml:
如果不是这个名会报错:
怎么解决呢?
方式有2种,一种是启动参数修改,另一种哦是用@PropertySource指定。
我们先说启动参数修改的方法,注解的后面讲配置文件位置的时候一块说:
@Component public class Test { @Value("${local.port}") private String port; public void show(){ System.out.println("local.port===="+port ); } }
修改默认配置文件名称为app.properties:
启动报错,解决方式:
使用-spring.config.name来指定,只需要指定文件的名字,文件扩展名可以省略:
再次运行,显示了属性值:
四、配置配置文件位置操作
1.默认位置
默认位置在resurces的目录下,或者resources下的config目录下.
2.设置在其他位置并读取
启动方式设置,和刚才的修改配置文件名一样
我们来演示个复杂的,多个配置文件。一个在resources的其他目录下,一个在本地盘符,用启动方式设置启动,看是否可以读取到属性值:
项目中的配置文件
注意配置文件也可以是${}引用,如下面的app.name如果想使用上面的name的话:
app.properties内容: local.ip=192.168.1.100 local.port=8080
name=springboot app.name=this is ${name} 1
项目外的配置文件:
my配置内容:
jetty.port=18880
修改启动类:
spring.config.location=classpath:/conf/app.properties,file:D:/tmp/my.properties
@Component public class Test { @Value("${local.ip}") private String ip; @Value("${app.name}") private String appName; @Value("${jetty.port:9090}") private String jettPort; public void show(){ System.out.println("local.ip===="+ip); System.out.println("app.name===="+appName); System.out.println("jetty.port===="+jettPort); } }
运行入口函数:
结果显示: 内部外部的配置文件都打印了。
@PropertySource编码方式读取
编写一个jdbc.properties
url=jdbc:mysql:///springboot driverClassName=com.mysql.jdbc.Driver
@Component @PropertySource(value = "classpath:jdbc.properties",encoding = "utf-8") public class JdbcConfig { @Value("${url}") private String url; @Value("${driverClassName}") private String driverClassName; @Autowired private Environment env; public void show(){ System.out.println("=============DataSourcePropeties==========="); System.out.println("url: ===="+ env.getProperty("url")); System.out.println("driverClassName:==== "+ driverClassName ); } }
入口类:
@SpringBootApplication public class Demo2Application { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args); context.getBean(JdbcConfig.class).show(); context.close(); } }
看下运行结果:
已经读取出来了。
五、一次读取多个配置文件属性
主要的方式就是使用@ConfigurationProperties(prefix = "xx"),配置文件前缀如果prefix 也可不写。
重写jdbc.properties
ds.url=jdbc:mysql:///springboot
ds.driverClassName=com.mysql.jdbc.Driver ds.username=root ds.password=12345
DataSourcePropeties 类,必须得有set方法:
@Component @PropertySource(value = "classpath:jdbc.properties",encoding = "utf-8") @ConfigurationProperties(prefix = "ds") public class DataSourcePropeties { private String url; private String driverClassName; private String username; private String password; public void show(){ System.out.println("========DataSourcePropeties============"); System.out.println("ds.url: ===="+ url); System.out.println("ds.driverClassName:==== "+ driverClassName ); System.out.println("ds.username:==== "+ username ); System.out.println("ds.password:==== "+ password ); } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getDriverClassName() { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
测试:
@SpringBootApplication public class Demo2Application { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args); context.getBean(DataSourcePropeties.class).show(); context.close(); } }
结果:
完美显示.