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

目录

本篇博客主要的内容概要:
在这里插入图片描述

一.读取单个配置文件:

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每一天
不定时推送相关文章,期待和大家一起成长!!
在这里插入图片描述


发布了246 篇原创文章 · 获赞 29 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/baidu_21349635/article/details/104788808