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每一天
不定時推送相關文章,期待和大家一起成長!!
在這裏插入圖片描述


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章