RestApiApplication.java
package com.example.restapi;
import io.github.cdimascio.dotenv.Dotenv;
import java.nio.file.Files;
import java.nio.file.Path;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RestApiApplication {
public static void main(String[] args) {
loadDotEnvIfPresent();
SpringApplication.run(RestApiApplication.class, args);
}
private static void loadDotEnvIfPresent() {
Path dotenvPath = Path.of(".env");
if (!Files.exists(dotenvPath)) {
return;
}
Dotenv dotenv = Dotenv.configure()
.directory(".")
.ignoreIfMalformed()
.ignoreIfMissing()
.load();
setSpringPropertyFromDotEnvIfNoRealEnv(
dotenv,
"SPRING_DATASOURCE_URL",
"spring.datasource.url"
);
setSpringPropertyFromDotEnvIfNoRealEnv(
dotenv,
"SPRING_DATASOURCE_USERNAME",
"spring.datasource.username"
);
setSpringPropertyFromDotEnvIfNoRealEnv(
dotenv,
"SPRING_DATASOURCE_PASSWORD",
"spring.datasource.password"
);
setSpringPropertyFromDotEnvIfNoRealEnv(
dotenv,
"SPRING_DATASOURCE_DRIVER_CLASS_NAME",
"spring.datasource.driver-class-name"
);
setSpringPropertyFromDotEnvIfNoRealEnv(
dotenv,
"SPRING_JPA_DATABASE_PLATFORM",
"spring.jpa.database-platform"
);
setSpringPropertyFromDotEnvIfNoRealEnv(
dotenv,
"SPRING_JPA_HIBERNATE_DDL_AUTO",
"spring.jpa.hibernate.ddl-auto"
);
setSpringPropertyFromDotEnvIfNoRealEnv(
dotenv,
"SPRING_JPA_SHOW_SQL",
"spring.jpa.show-sql"
);
}
private static void setSpringPropertyFromDotEnvIfNoRealEnv(
Dotenv dotenv,
String envName,
String springPropertyName
) {
String realEnvironmentValue = System.getenv(envName);
if (realEnvironmentValue != null && !realEnvironmentValue.isBlank()) {
System.setProperty(springPropertyName, realEnvironmentValue);
return;
}
String dotenvValue = dotenv.get(envName);
if (dotenvValue != null && !dotenvValue.isBlank()) {
System.setProperty(springPropertyName, dotenvValue);
}
}
}