Spring Boot 讀取配置文件

来源:https://www.cnblogs.com/gdjlc/archive/2019/09/23/11575743.html
-Advertisement-
Play Games

一、預設配置文件 二、指定配置文件 三、使用profile指定配置 ...


開發環境:IntelliJ IDEA 2019.2.2
Spring Boot版本:2.1.8

新建一個名稱為demo的Spring Boot項目。

一、預設配置文件

Spring Boot會讀取名稱application.properties(yml)的配置文件。
如果有多個同名文件,預設情況下,按照下麵順序讀取:
(1)項目根目錄的config目錄
(2)項目根目錄
(3)項目classpath下的config目錄
(4)項目classpath根目錄
如果同一個配置項出現在多份配置文件中,後面讀取的值不會覆蓋前面的。

測試:
在項目的4個位置各建立application.properties,內容如下:
(1)config/application.properties

test = config/application.properties
test1 = test1

(2)application.properties

test = application.properties
test2 = test2

(3)src/main/resources/config/application.properties

test = src/main/resources/config/application.properties
test3 = test3

(4)src/main/resources/application.properties

test = src/main/resources/application.properties
test4 = test4

 修改預設生成的啟動類 DemoApplication.cs 代碼:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Autowired
    private Environment env;

    @RequestMapping("/")
    public String getProp(){
        String test = env.getProperty("test");
        String test1 = env.getProperty("test1");
        String test2 = env.getProperty("test2");
        String test3 = env.getProperty("test3");
        String test4 = env.getProperty("test4");
        return test + "," + test1 + "," + test2 + "," + test3 + "," + test4;
    }
}

訪問 http://localhost:8080/
輸出:config/application.properties,test1,test2,test3,test4

二、指定配置文件

讀取指定的配置文件,不使用預設的application.properties。

測試:
(1)src/main/resources/application.properties 內容:

test1 = application.properties

(2)在項目的src/main/resources新建目錄config,新建配置文件myConfig.properties,內容:

test2= myConfig.properties

修改預設生成的啟動類 DemoApplication.cs 代碼:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        //SpringApplication.run(DemoApplication.class, args);
        new SpringApplicationBuilder(DemoApplication.class).properties(
                "spring.config.location=classpath:/config/myConfig.properties"
        ).run(args);
    }

    @Autowired
    private Environment env;

    @RequestMapping("/")
    public String getProp(){
        String test1 = env.getProperty("test1");
        String test2 = env.getProperty("test2");
        return test1 + "," + test2;
    }
}

訪問 http://localhost:8080/
輸出:null,myConfig.properties
可見application.properties已讀取不到,成功讀取到配置文件myConfig.properties。

也可以使用spring.config.name指定配置文件的名稱,如下麵代碼指定了myConfig,Spring Boot會到classpath下尋找myConfig.properties(yml)。

    public static void main(String[] args) {
        //SpringApplication.run(DemoApplication.class, args);
        /*new SpringApplicationBuilder(DemoApplication.class).properties(
                "spring.config.location=classpath:/config/myConfig.properties"
        ).run(args);*/
        new SpringApplicationBuilder(DemoApplication.class).properties(
                "spring.config.name=myConfig").run(args);
    }

三、使用profile指定配置

使用profile可以根據特定的環境來激活不同的配置。

src/main/resources/application.yml 內容如下:

spring:
  profiles: mysql
jdbc:
  driver:
    com.mysql.jdbc.Driver
---
spring:
  profiles: oracle
jdbc:
  driver:
    oracle.jdbc.driver.OracleDriver

修改預設生成的啟動類 DemoApplication.cs 代碼:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Scanner;

@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        //SpringApplication.run(DemoApplication.class, args);

        Scanner scan = new Scanner(System.in);
        String profile = scan.nextLine();
        new SpringApplicationBuilder(DemoApplication.class).properties(
                "spring.config.location=classpath:/application.yml"
        ).profiles(profile).run(args);
    }

    @Autowired
    private Environment env;

    @RequestMapping("/")
    public String getProp(){
        String res = env.getProperty("jdbc.driver");
        return res;
    }
}

在IDEA中點擊Run按鈕後,在控制台先敲回車再輸入oracle,
訪問 http://localhost:8080/ 輸出:oracle.jdbc.driver.OracleDriver
重新Run,在控制台先敲回車再輸入mysql,
訪問 http://localhost:8080/ 輸出:com.mysql.jdbc.Driver

還可以通過不同配置文件的名稱來設置profile,創建下麵3個文件。
(1)src/main/resources/application.yml 內容:

spring:
  profiles:
    active: oracle

(2)src/main/resources/application-mysql.yml 內容:

jdbc:
  driver:
    com.mysql.jdbc.Driver

(3)src/main/resources/application-oracle.yml 內容:

jdbc:
  driver:
    oracle.jdbc.driver.OracleDriver

 修改預設生成的啟動類 DemoApplication.cs 代碼:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Scanner;

@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);     
    }

    @Autowired
    private Environment env;

    @RequestMapping("/")
    public String getProp(){
        String res = env.getProperty("jdbc.driver");
        return res;
    }
}

訪問 http://localhost:8080/ 輸出:oracle.jdbc.driver.OracleDriver


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一 語法 模板渲染的 "官方文檔" 關於模板渲染你只需要記兩種特殊符號(語法): {{ }}和 {% %} 變數相關的用{{}},邏輯相關的用{%%}。 二 變數 在Django的模板語言中按此語法使用:{{ 變數名 }}。 當模版引擎遇到一個變數,它將計算這個變數,然後用結果替換掉它本身。 變數的 ...
  • 黃燜雞米飯最熱賣的外賣之一,國人都喜歡吃,吃過黃燜雞米飯的應該都知道,除了黃燜雞米飯主體外,還可以添加各種配菜,如土豆、香菇、鵪鶉蛋、青菜等。如果需要你來設計一套黃燜雞米飯結賬系統,你該如何設計呢? 前置條件:主體:黃燜雞米飯 價格:16,配菜:土豆 價格:2、香菇 價格:2、鵪鶉蛋 價格:2、青菜 ...
  • 橋接模式(Bridge): 橋接是用於把抽象化與實現化解耦,使得兩者可以獨立變化。 橋接模式的角色: 1)抽象化角色(Abstraction):它是用於定義抽象介面,通常是抽象類而不是介面,其中定義了一個Implementor(實現介面)類型的對象並可以維護該對象,它與Implementor之間具有 ...
  • 1. 下載安裝包 1 2 3 https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi # 2.7安裝包 https://www.python.org/ftp/python/3.6.4/python-3.6.4-amd64.ex ...
  • ​一、生成器 1.定義(generator):一邊迴圈一邊計算下一個元素的機制/演算法 2.滿三個條件 (1)每次調用都能產生出for迴圈需要的下一個元素 (2)如果達到最後一個後,能夠爆出StopIteration異常 (3)可以被next函數調用 3.如何生成一個生成器 (1)直接使用 (2)如果 ...
  • # 1.在伺服器上 tomcat 的 bin目錄下找到並打開 catalina.sh 在文件中搜索: ``` JPDA_ADDRESS= ``` 找一個伺服器上沒有被使用的埠,填入,如50005,保存並退出。 > 如何知道某埠有沒有被占用? > 命令: > ``` > lsof -i:50005 ...
  • idea搭建spring源碼閱讀環境 安裝gradle Github下載Spring源碼 新建學習spring源碼的項目 idea搭建spring源碼閱讀環境 安裝gradle Github下載Spring源碼 新建學習spring源碼的項目 安裝gradle Github下載Spring源碼 新建 ...
  • 2019-09-23-23:48:00 今日所學的內容有: ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...