Crear un archivo .env.template
en la carpeta donde está alojado el proyecto con este contenido:
OMDBAPI_API_KEY=
CHATGPT_API_KEY=
DB_HOST=
DB_NAME=
DB_USERNAME=
DB_PASSWORD=
copiarlo como .env
y registrar los códigos requeridos, por ejemplo:
OMDBAPI_API_KEY=XXXXXXXX
CHATGPT_API_KEY=XXXXXXXXX
DB_HOST=localhost
DB_NAME=alura_series
DB_USERNAME=nombreusuario
DB_PASSWORD=claveusuario
La idea es tener .env
y .env.template
, por que .env
se tiene que incluir en .gitignore
para que no se copie a GitHub, pero queda .env.template
para saber que se tiene que llenar esa información.
Para usarlo en Spring, se require dotenv-java en pom.xml
<dependency>
<groupId>io.github.cdimascio</groupId>
<artifactId>dotenv-java</artifactId>
<version>3.1.0</version>
</dependency>
y se puede usar una función, donde se requira el ApiKey como esta:
Yo la puse en Main.java
porque es allí donde se construya los requerimientos para el API de OMDB.
private String getApiKey() {
Dotenv dotenv = null;
dotenv = Dotenv.configure().load();
return dotenv.get("OMDBAPI_API_KEY");
}
Pero esta función no funciona para application.properties, ya que tiene una forma propia para leer los archivos:
spring.config.import=file:.env[.properties]
spring.application.name=screenmatch
spring.datasource.url=jdbc:postgresql://${DB_HOST}/${DB_NAME}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
spring.datasource.driver-class-name=org.postgresql.Driver
hibernate.dialect=org.hibernate.dialect.HSQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.format-sql=true
Cuál es el objetivo de esto? Ocultar/proteger las credenciales que pueden ser privadas. Hay otros métodos, algunos que diferencian el entorno: dev y production.