文章目录

目录

本篇博客主要的内容概要:

springboot原理实战(5)-配置文件操作_tomcat

一.读取单个配置文件:

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();
}
}

结果显示已经读取到属性:

springboot原理实战(5)-配置文件操作_tomcat_02

②通过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") );
}
}

运行入口函数:

springboot原理实战(5)-配置文件操作_配置文件_03


测试结果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();
}
}

运行结果:

springboot原理实战(5)-配置文件操作_springboot_04


为什么context可以直接使用这种方式调用呢?

看下e-r图:

springboot原理实战(5)-配置文件操作_tomcat_05


ConfigurableApplicationContext 的上级可以找到EnvironmentCapable这个接口,该接口有获取Enviroment对象的方法,所以就可以直接使用了。

springboot原理实战(5)-配置文件操作_spring_06

二、配置文件的属性值操作

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();
}
}

运行结果:没有报错,打印空值:

springboot原理实战(5)-配置文件操作_配置文件_07

2.配置属性设置默认值

@Component
public class Test {

@Value("${tomcat.port:9090}")
private String tomcatPort;

public void show(){
System.out.println("tomcat.port===="+tomcatPort );
}

}

然后,properties配置文件中,删除这个属性 ​​tomcat.port=​

springboot原理实战(5)-配置文件操作_配置文件_08


测试,已经设置了默认值9090:

springboot原理实战(5)-配置文件操作_配置文件_09

三、修改配置文件名称:

配置文件默认名称为: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:

springboot原理实战(5)-配置文件操作_spring_10


启动报错,解决方式:

​使用-spring.config.name来指定,只需要指定文件的名字,文件扩展名可以省略​​:

springboot原理实战(5)-配置文件操作_配置文件_11


再次运行,显示了属性值:

springboot原理实战(5)-配置文件操作_springboot_12

四、配置配置文件位置操作

1.默认位置

默认位置在resurces的目录下,或者resources下的config目录下.

2.设置在其他位置并读取

启动方式设置,和刚才的修改配置文件名一样

我们来演示个复杂的,多个配置文件。一个在resources的其他目录下,一个在本地盘符,用启动方式设置启动,看是否可以读取到属性值:

  • 项目中的配置文件
  • springboot原理实战(5)-配置文件操作_spring_13

  • 注意配置文件也可以是${}引用,如下面的app.name如果想使用上面的name的话:
    app.properties内容:
local.ip=192.168.1.100
local.port=8080

name=springboot
app.name=this is ${name}
  • 项目外的配置文件:
  • springboot原理实战(5)-配置文件操作_spring_14

  • my配置内容:
jetty.port=18880
  • 修改启动类:
    ​​​spring.config.location=classpath:/conf/app.properties,file:D:/tmp/my.properties​
  • springboot原理实战(5)-配置文件操作_tomcat_15


@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);
}

}

运行入口函数:

springboot原理实战(5)-配置文件操作_spring_16


结果显示: 内部外部的配置文件都打印了。

@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();
}
}

看下运行结果:

springboot原理实战(5)-配置文件操作_配置文件_17


已经读取出来了。

五、一次读取多个配置文件属性

主要的方式就是使用​​@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();
}
}

结果:

springboot原理实战(5)-配置文件操作_springboot_18

完美显示.


个人微信公号:

搜索: 怒放de每一天

不定时推送相关文章,期待和大家一起成长!!

springboot原理实战(5)-配置文件操作_tomcat_19