文章目录
目录
本篇博客主要的内容概要:
一.读取单个配置文件:
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}
- 项目外的配置文件:
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();
}
}
结果:
完美显示.
个人微信公号:
搜索: 怒放de每一天
不定时推送相关文章,期待和大家一起成长!!
完