Esta aplicación batch en Java utiliza Spring Batch para leer datos de un archivo CSV, realizar una transformación de datos y almacenarlos en una base de datos. Adicionalmente, se implementa un proceso ETL que extrae datos de una base de datos fuente, transforma los datos, y carga los datos transformados en otra base de datos destino.
-
Lectura de Datos
- Cuenta con un Job en Spring Batch que lee un archivo CSV con los siguientes campos:
id
,nombre
,email
.
- Cuenta con un Job en Spring Batch que lee un archivo CSV con los siguientes campos:
-
Transformación de Datos
- Se implementa un paso de procesamiento que convierta los nombres a mayúsculas y valida los emails (asegurándose de que tengan un formato correcto).
-
Carga de Datos
- Se configura un paso que escribe los datos procesados en una base de datos (Postgress).
-
Proceso ETL
- Cuenta con un Job que extre datos de una base de datos fuente, transforma el nombre agregando "_PROCESSED" al final, y carga los datos transformados en otra base de datos destino (MongoDb).
id,nombre,email
1,Juan Perez,juan.perez@example.com
2,Ana Gomez,ana.gomez@example.com
-
Job para leer CSV y almacenar en base de datos
- Lectura del CSV: El proyecto ya cuenta con un CSV valido, en caso de querer reemplazarlo simplemente reemplace el que se encuentra en la ruta
/resources/archivo.csv
o actualice las variables de entorno con el nombre y ruta correctas partiendo del directorio/resources
. - Procesamiento: Se convierte el campo
nombre
a MAYUSCULAS y se valida el formato del correo, en caso de ser incorrecto se deja en blanco. - Carga de datos: El proyecto viene configurado con una base de datos en Postgres para escritura llamada
batchdb
.
- Lectura del CSV: El proyecto ya cuenta con un CSV valido, en caso de querer reemplazarlo simplemente reemplace el que se encuentra en la ruta
-
Job para proceso ETL
- Extracción de datos: Se conecta a la base de datos Postgres utilizada anteriormente y se maneja la misma estructura de datos.
- Procesamiento: Se obtiene el nombre de cada usuario y se agrega la palabra "_PROCESS" al final de cada uno.
- Carga de datos: Se almacenan en una base de datos no relacional MongoDb dentro de la coleccion
processed_users
.
src
├── main
│ ├── java
│ │ └── com.example.app
│ │ ├── config
│ │ │ └── BatchConfig.java
│ │ ├── job
│ │ │ └── ImportUserJobConfig.java
│ │ │ └── ProcessUserJobConfig.java
│ │ ├── processor
│ │ │ └── ImportUserProcessor.java
│ │ │ └── ProcessUserProcessor.java
│ │ ├── reader
│ │ │ └── ImportUserReader.java
│ │ │ └── ProcessUserReader.java
│ │ ├── writer
│ │ │ └── ImportUserWriter.java
│ │ │ └── ProcessUserWriter.java
│ │ ├── model
│ │ │ └── User.java
│ │ ├── utils
│ │ │ └── Constants.java
│ │ │ └── Methods.java
│ │ │ └── UserFieldSetMapper.java
│ │ └── EtlMigrationApplication.java
│ ├── resources
│ │ └── archivo.csv
│ │ └── application.properties
└── test
└── java
└── com.example.app
└── EtlMigrationApplicationTests.java
- Java 17 o superior
- Maven 3.6 o superior
- Postgres
- MongoDb
-
Clonar el repositorio:
git clone https://github.com/DuvanVilladiego/SpringBatch-ETL.git cd springbatch-etl
-
Configuraciones la base de datos:
-
Ejecute los scripts
schema-postgresql
yuser-table
. -
Asegúrate de que la configuración de la base de datos en
application.properties
sea correcta. -
Los tiempos de espera de los Jobs ImportUser y ProcessUser estan configurados en
10000
y15000
milisegundos respectivamente. -
Es posible personalizar el ruta del archivo cvs desde donde se extraeran los datos.
spring.application.name=etl-migration # Configuración de la base de datos spring.datasource.url=jdbc:postgresql://localhost:5432/batchdb spring.datasource.username=postgres spring.datasource.password=root spring.datasource.driver-class-name=org.postgresql.Driver # Configuración de Spring Batch spring.batch.job.enabled=true spring.batch.jdbc.initialize-schema=always # Configuración de MongoDB spring.data.mongodb.host=localhost spring.data.mongodb.port=27020 spring.data.mongodb.database=imports # Ruta de archivo csv csv.file='archivo.csv'
-
Construir el proyecto:
mvn clean install
-
Ejecutar la aplicación:
mvn spring-boot:run
-
Verificar los resultados:
- Para el primer Job (lectura de CSV y almacenamiento en base de datos), los datos procesados se guardarán en la base de datos configurada.
- Para el segundo Job (proceso ETL), asegúrate de tener la base de datos fuente y destino configuradas correctamente en
application.properties
.
-
Verificar datos:
Ejecuta consultas SQL para verificar los datos procesados y almacenados:
SELECT * FROM users; SELECT * FROM processed_users;
Esto cubre la configuración y ejecución básica de la aplicación Spring Batch ETL. Asegúrate de ajustar los detalles según tus necesidades y el entorno específico en el que estés trabajando.