最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot項(xiàng)目中讀取.env文件參數(shù)值的兩種主流實(shí)現(xiàn)方式

 更新時(shí)間:2025年12月25日 08:29:40   作者:ppo_wu  
在Spring Boot項(xiàng)目中,.env文件并非Spring Boot原生支持的配置格式,但可以通過第三方庫或自定義讀取邏輯來加載.env文件中的參數(shù),下面我們就來看看具體實(shí)現(xiàn)方法吧

在Spring Boot項(xiàng)目中,.env文件 并非Spring Boot原生支持的配置格式(Spring Boot默認(rèn)支持application.properties/application.yml),但可以通過第三方庫(如dotenv-java)或自定義讀取邏輯來加載.env文件中的參數(shù),并讓Spring Boot識(shí)別這些參數(shù)。

以下是兩種主流實(shí)現(xiàn)方式,推薦使用dotenv-java(簡潔、適配性強(qiáng))。

方式一:使用dotenv-java庫(推薦)

dotenv-java是專門用于加載.env文件的Java庫,能將.env中的配置加載到JVM的系統(tǒng)環(huán)境變量或Spring的環(huán)境變量中,讓Spring Boot可以通過@Value、Environment等方式讀取。

步驟1:添加依賴

pom.xml(Maven)或build.gradle(Gradle)中引入dotenv-java依賴:

Maven

<dependency>
    <groupId>io.github.cdimascio</groupId>
    <artifactId>dotenv-java</artifactId>
    <version>3.0.0</version> <!-- 推薦使用最新版本 -->
</dependency>

Gradle

implementation 'io.github.cdimascio:dotenv-java:3.0.0'

步驟2:創(chuàng)建.env文件

在項(xiàng)目的根目錄(或src/main/resources目錄)下創(chuàng)建.env文件,寫入配置參數(shù):

# .env文件內(nèi)容
DB_URL=jdbc:mysql://localhost:3306/mydb
DB_USERNAME=root
DB_PASSWORD=123456
APP_NAME=my-spring-boot-app

步驟3:加載.env文件(兩種方式)

在啟動(dòng)類中手動(dòng)加載(簡單)

在Spring Boot啟動(dòng)類中,通過Dotenv.load()加載.env文件,并將配置設(shè)置到系統(tǒng)環(huán)境變量中(Spring Boot會(huì)優(yōu)先讀取系統(tǒng)環(huán)境變量)。

import io.github.cdimascio.dotenv.Dotenv;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class EnvDemoApplication {

    public static void main(String[] args) {
        // 加載.env文件(默認(rèn)讀取項(xiàng)目根目錄的.env)
        Dotenv dotenv = Dotenv.load();
        // 將.env中的配置設(shè)置到系統(tǒng)環(huán)境變量(可選,也可直接通過dotenv.get()獲?。?
        dotenv.entries().forEach(entry -> System.setProperty(entry.getKey(), entry.getValue()));

        SpringApplication.run(EnvDemoApplication.class, args);
    }
}

自定義EnvironmentPostProcessor(更優(yōu)雅,推薦)

通過Spring的EnvironmentPostProcessor擴(kuò)展點(diǎn),在Spring Boot啟動(dòng)時(shí)自動(dòng)加載.env文件,將配置注入到Spring的環(huán)境中(無需手動(dòng)設(shè)置系統(tǒng)變量)。

創(chuàng)建自定義的EnvironmentPostProcessor實(shí)現(xiàn)類:

import io.github.cdimascio.dotenv.Dotenv;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.io.ClassPathResource;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class DotenvEnvironmentPostProcessor implements EnvironmentPostProcessor {

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        // 方式1:讀取項(xiàng)目根目錄的.env
        Dotenv dotenv = Dotenv.load();

        // 方式2:讀取src/main/resources下的.env(推薦,打包后可包含在jar中)
        // Dotenv dotenv = Dotenv.configure().directory(new ClassPathResource("").getPath()).load();

        // 將.env中的配置轉(zhuǎn)換為MapPropertySource,注入到Spring環(huán)境中
        Map<String, Object> envMap = new HashMap<>();
        dotenv.entries().forEach(entry -> envMap.put(entry.getKey(), entry.getValue()));
        environment.getPropertySources().addFirst(new MapPropertySource("dotenv", envMap));
    }
}

注冊自定義的EnvironmentPostProcessor:在src/main/resources/META-INF目錄下創(chuàng)建spring.factories文件,內(nèi)容如下:

org.springframework.boot.env.EnvironmentPostProcessor=com.example.demo.DotenvEnvironmentPostProcessor

步驟4:讀取.env中的參數(shù)

通過@Value、Environment@ConfigurationProperties等方式讀取參數(shù):

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.core.env.Environment;

import javax.annotation.Resource;

@RestController
public class EnvController {

    // 方式1:使用@Value注解
    @Value("${DB_URL}")
    private String dbUrl;

    @Value("${APP_NAME}")
    private String appName;

    // 方式2:使用Environment對(duì)象
    @Resource
    private Environment environment;

    @GetMapping("/env")
    public String getEnv() {
        String dbUsername = environment.getProperty("DB_USERNAME");
        String dbPassword = environment.getProperty("DB_PASSWORD");
        return "dbUrl: " + dbUrl + "<br/>" +
                "appName: " + appName + "<br/>" +
                "dbUsername: " + dbUsername + "<br/>" +
                "dbPassword: " + dbPassword;
    }
}

方式二:自定義讀取邏輯(不依賴第三方庫)

如果不想引入第三方庫,可以通過Java的IO流讀取.env文件,解析內(nèi)容后注入到Spring環(huán)境中。

步驟1:編寫讀取.env的工具類

import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.util.ResourceUtils;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class EnvReader {

    public static void loadEnv(ConfigurableEnvironment environment) {
        Properties properties = new Properties();
        Map<String, Object> envMap = new HashMap<>();

        try {
            // 讀取src/main/resources下的.env文件(也可讀取項(xiàng)目根目錄的.env)
            FileInputStream inputStream = new FileInputStream(ResourceUtils.getFile("classpath:.env"));
            properties.load(inputStream);

            // 解析Properties到Map
            properties.forEach((key, value) -> envMap.put(key.toString(), value.toString()));

            // 注入到Spring環(huán)境中(優(yōu)先級(jí)最高)
            environment.getPropertySources().addFirst(new MapPropertySource("customEnv", envMap));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

步驟2:在啟動(dòng)類中加載.env

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.ConfigurableEnvironment;

@SpringBootApplication
public class EnvDemoApplication {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(EnvDemoApplication.class);
        // 啟動(dòng)前加載.env
        application.addInitializers(context -> {
            ConfigurableEnvironment environment = context.getEnvironment();
            EnvReader.loadEnv(environment);
        });
        application.run(args);
    }
}

步驟3:讀取參數(shù)(同方式一)

通過@ValueEnvironment讀取參數(shù)即可。

注意事項(xiàng)

.env文件的位置

  • 若放在項(xiàng)目根目錄,開發(fā)環(huán)境下可直接讀取,但打包成jar后,根目錄的.env不會(huì)被包含在jar中,需手動(dòng)放在jar同級(jí)目錄。
  • 若放在src/main/resources目錄,打包后會(huì)被包含在jar中,推薦此方式。

配置優(yōu)先級(jí):Spring Boot的配置優(yōu)先級(jí)為:系統(tǒng)環(huán)境變量 > 命令行參數(shù) > .env文件 > application.properties/yml(可通過addFirst/addLast調(diào)整.env的優(yōu)先級(jí))。

敏感信息.env文件不要提交到版本控制系統(tǒng)(如Git),需在.gitignore中添加.env規(guī)則,避免敏感信息泄露。

多環(huán)境配置:可通過Dotenv.configure().filename(".env.dev")加載不同環(huán)境的.env文件(如.env.dev.env.prod)。

到此這篇關(guān)于springboot項(xiàng)目中讀取.env文件參數(shù)值的兩種主流實(shí)現(xiàn)方式的文章就介紹到這了,更多相關(guān)springboot讀取.env參數(shù)值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

鹿邑县| 南康市| 平定县| 平果县| 正蓝旗| 太和县| 虎林市| 恩施市| 裕民县| 浑源县| 准格尔旗| 泗洪县| 米林县| 策勒县| 庆安县| 朝阳县| 惠水县| 郴州市| 昭平县| 台南县| 广汉市| 保靖县| 南充市| 隆林| 堆龙德庆县| 德安县| 琼结县| 星子县| 乐山市| 兴城市| 神池县| 平远县| 外汇| 大冶市| 昌黎县| 萨迦县| 宝坻区| 金溪县| 中方县| 盐山县| 木里|