Spring Boot не загружает переменные из .env с помощью java-dotenv

Вопросы и ответы

Я пытаюсь загрузить переменные окружения из файла .env в своем приложении Spring Boot, используя:

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

Вот часть моего application.properties:

spring.datasource.url=${DB_URL} spring.datasource.username=postgres spring.datasource.password=${DB_PASSWORD} stripe.api.key=${STRIPE_API_KEY}

Мой файл .env:

DB_URL=jdbc:postgresql://localhost:5432/mydb DB_PASSWORD=mysecretpassword STRIPE_API_KEY=my_stripe_key

Переменные окружения не загружаются в application.properties при запуске приложения, и я получаю ошибки, такие как:

URL должен начинаться с 'jdbc'

Я попытался разместить файл .env в корневом каталоге, и класс Dotenv правильно считывает переменные в главном методе.

Как мне правильно загрузить переменные .env в application.properties Spring Boot с помощью java-dotenv?

Я хотел, чтобы .env работал и подключался, но это не так.

Вам стоит обратить внимание на https://github.com/paulschwarz/spring-dotenv проект spring-dotenv, который внедряет файл .env как источник свойств spring.

Посмотрите другой вопрос, похожий на ваш: Использование файлов dotenv с Spring Boot

Ответ

Чтобы загрузить переменные окружения из файла .env в вашем Spring Boot приложении с помощью библиотеки java-dotenv, необходимо выполнить несколько шагов. Давайте посмотрим, как это сделать:

1. Убедитесь, что библиотека подключена

Вы правильно указали зависимость в вашем build.gradle:

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

2. Загружайте переменные в основном методе

Вам нужно загрузить переменные окружения из файла .env перед тем, как ваше приложение Spring Boot начнет инициализацию. Для этого вы можете создать класс с методом main, как показано ниже:

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

@SpringBootApplication
public class YourApplication {

    public static void main(String[] args) {
        // Загружаем .env файл
        Dotenv dotenv = Dotenv.load();

        // Установка системных свойств из .env
        System.setProperty("DB_URL", dotenv.get("DB_URL"));
        System.setProperty("DB_PASSWORD", dotenv.get("DB_PASSWORD"));
        System.setProperty("STRIPE_API_KEY", dotenv.get("STRIPE_API_KEY"));

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

3. Проверьте файл .env

Убедитесь, что ваш файл .env находится в корне проекта и содержит правильные значения. В вашем случае это должно выглядеть так:

DB_URL=jdbc:postgresql://localhost:5432/mydb
DB_PASSWORD=mysecretpassword
STRIPE_API_KEY=my_stripe_key

Обратите внимание на правильную конфигурацию DB_URL, она должна начинаться с jdbc.

4. Настройка application.properties

Ваш файл application.properties должен содержать следующие строки:

spring.datasource.url=${DB_URL}
spring.datasource.username=postgres
spring.datasource.password=${DB_PASSWORD}
stripe.api.key=${STRIPE_API_KEY}

Заключение

После выполнения этих шагов, ваше Spring Boot приложение должно корректно загружать переменные из файла .env, и ошибки, подобные "URL must start with ‘jdbc’", не должны возникать.

Также вы можете рассмотреть использование библиотеки spring-dotenv, которая автоматически интегрирует переменные из файла .env как источник свойств Spring. Это может упростить вашу конфигурацию без необходимости вручную устанавливать системные свойства.

Оцените материал
Добавить комментарий

Капча загружается...