Saltar al contenido

Amazon RDS+SpringBoot

A continuación se mostrara un ejemplo en el cual se condigurara una base de dato MySQL en AWS RDS y se conectara a traves de un servicio REST desarrollado en Spring.

Herramientas usadas:

  • Spring Tool Suit
  • Java 8
  • Amazon RDS(Mysql)
  • Apache Maven 3.6.3
  • Spring Boot 2.5.0

1.-Configuración de aws RDS

Nuestro primer paso es ingresar a la consola de AWS como se muestra en la siguiente imagen y dar click en el botón «Create DataBase».

Seleccionar la opción «Standard Create» y engine Options «Mysql«

En la sección de templates seleccionar «Producción» y en la seccion «Settings» agregar el nombre de la base de datos, el «Master Username» se puede dejar tal como aparece o se puede agregar nuestro propio «Master Username» y agremos una contraseña , estos datos hay que recordarlos ya que se utilizaran para realizar la conexion con nuestro proyecto de spring.

En la sección DB instace class seleccionar la opción «Burstable classes (includes t classes)» y dejar la opción que da por defecto. En la sección Storage Seleccionar la opción «General Purpose» como se muestra en la siguiente imagen.

En la seccíón Connectivity seleccionar la opción Public acces «Yes» .

En la sección Additional Configuration en la propiedad «Initial database name» agregamos el nombre de la base de datos que queremos crear.

Una vez configurado todas las secciones como se mostro anteriormente dar click en el boton «Create Database».

Una vez creada la base de datos ir al panel donde se muestra la base de datos y dar click.

Una vez que se dio click sobre la base de datos se mostrará un panel de administración, dar click sobre la opción «Security» y dar click en la sección «VPC security groups» .

Seleccionar la pestaña «Inbound rule» y dar clic sobre el botón «Edit inbound rules» .

Agregar las reglas http y MYSL/Aurora tal y com se muestra en la imagen y dar click en el botón «Save rules«.

Una vez configurada nuestra base de datos procedemos a conectarnos mediante un cliente, para este ejercicio utilizaré DBeaver, ingresamos los datos como en la siguiente imagen.

Para agregar una tabla a nuestra base de datos ejecutamos el siguiente script.

CREATE TABLE awsrds.usuario (
	id INTEGER auto_increment NOT NULL,
	nombre_usuario varchar(200) NULL,
	apellido_paterno varchar(200) NULL,
	CONSTRAINT usuario_PK PRIMARY KEY (id)
);

2.-Configuración de proyecto spring

Crear un proyecto en Spring IO y agregar las dependencias Spring web, Spring Data JPA,MySqlDriver y Spring Boot Dev Tools.

Importar el proyecto en Spring Tool Suit como en la siguiente imagen:

Agregar configuración en el archivo properties del proyecto Spring.

spring.datasource.url=xxxx
spring.datasource.username=xxxxx
spring.datasource.password=xxxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect

Agregar el mapeo de la Clase java con la tabla usuario que se creo en mysql

package com.elastik.bean.test.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Usuario {
	@Id
	  @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	@Column(name = "nombreUsuario")
	private String nombreUsuario;
	@Column(name = "apellidoPaterno")
	private String apellidoPaterno;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNombreUsuario() {
		return nombreUsuario;
	}

	public void setNombreUsuario(String nombreUsuario) {
		this.nombreUsuario = nombreUsuario;
	}

	public String getApellidoPaterno() {
		return apellidoPaterno;
	}

	public void setApellidoPaterno(String apellidoPaterno) {
		this.apellidoPaterno = apellidoPaterno;
	}

}

Crear nuestro servicio para agregar una clase repositorio.

package com.elastik.bean.test.repository;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import com.elastik.bean.test.domain.Usuario;
@Repository
public interface UsuarioRepository extends CrudRepository<Usuario, Long> { 

}

Agregar una clase que Service que ayudara a invocar el repositorio creado.

package com.elastik.bean.test.service;

import com.elastik.bean.test.domain.Usuario;

public interface UsuarioService {
	Usuario crearUsuario(Usuario newUser);
	Usuario ObtenerUsuario(Long user);
}
package com.elastik.bean.test.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.elastik.bean.test.domain.Usuario;
import com.elastik.bean.test.repository.UsuarioRepository;
@Service
public class UsuarioServiceImpl implements UsuarioService {
	@Autowired
	private UsuarioRepository usuarioRepository;

	@Override
	public Usuario crearUsuario(Usuario newUser) {
		// TODO Auto-generated method stub
		Usuario usuario=usuarioRepository.save(newUser);
		return usuario;
	}

	@Override
	public Usuario ObtenerUsuario(Long user) {
		// TODO Auto-generated method stub
		return usuarioRepository.findById(user).orElse(new Usuario());
	}

}

Se crea una clase Controller que nos permitira invocar nuestro service creado y el cual nos permitirá acceder a nuestros servicio REST creado.

package com.elastik.bean.test.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.elastik.bean.test.domain.Usuario;
import com.elastik.bean.test.service.UsuarioService;

@RestController
public class UserController {
	@Autowired
	private UsuarioService usuarioService;

	@PostMapping("/user")
    public Usuario createUser( @RequestBody Usuario usuario) {
        return usuarioService.crearUsuario(usuario);
    }
 
	@GetMapping("/user/{id}")
	public Usuario HolaMundo(@PathVariable Long id) {
		return usuarioService.ObtenerUsuario(id);
	}
}

Una vez creadas todas nuestras clases en el proyecto lo ejecutamos para probar nuestros servicios REST, para este ejemplo usaremos postman.

Ejecutamos en postman y revisamos en nuestra base de datos que se haya insertado el nuevo registro.