Entradas

Mostrando las entradas con la etiqueta testcontainers

Buenas Practicas creando AWS Lambdas con Java

En esta entrada recopilaré buenas practicas que he aprendido al momento de crear Lambdas en AWS con Java y Maven. Algunas son mis recomendaciones y otras son desde AWS (sobre todo como evitar el cold start). Comenzamos: Todo lo que pueda ser estático tiene que ser estático, de esta manera serán reutilizados en los siguientes request que se realicen en la misma instancia del Lambda. inicializar todo  lo que puedan en el handler del lambda en un bloque estático:  public class LambdaHandler implements RequestStreamHandler { static { // acá } @Override public void handleRequest(InputStream is, OutputStream os, Context ctx) throws IOException { } } Hay que hacer esto porque cuando se instancia la clase hay más poder de computo que el configurado como límite para la lambda, si hay conexiones a DynamoDB hay que instanciar la conexión y hacer una Query (cualquiera) lo importante es que se instancien todas las dependencias. Lo mismo ocurre para conexiones con R...

JPA-Hibernate + POJO + Projection + ConstructorResult + NativeQuery + Testcontainers + PostgreSQL

Imagen
En esta ocasión mostraré un ejemplo usando Java SE 11 de como mapear una clase no entidad (un POJO) a partir de los datos que existen en la base de datos y que representan a una entidad utilizando ConstructorResult, Projection y una construcción "manual" con JPA. Las pruebas serán realizadas usando Testcontainers junto a Postgresql como base de datos. El procedimiento es el siguiente (se omiten los metodos/imports/anotaciones que no son relevantes y usaré lombok solo para getter/setter): 1- La Entidad Representa la entidad que mantendrá datos en la base de datos y de la cual extraeremos algunos de sus campos para nuestro pojo. @Entity @Table(schema = "jpa", name = "persona") public class Persona { @Id private int id; private String nombre; private String apellido; } 2- El POJO Requiere tener un constructor con los argumentos que la query utilizará: public class PersonaPOJO { private String nn; private String a...

Spring Boot con Redis para almacenar JSON y no la serialización predefinida

Imagen
En esta entrada mostraré como utilizar Spring Boot y Redis con el objetivo de almacenar los objetos como JSON y no como la forma de serialización de Java por defecto que tiene RedisTemplate. Los test están con Testcontainers, Junit 5 y AssertJ. Lo primero es la clase que nos convoca, la configuración de RedisTemplate: @Configuration public class RedisConfig { @Autowired private ConfigurableApplicationContext context; @Bean @Primary public RedisTemplate redisTemplate(JedisConnectionFactory conn) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(conn); template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer()); template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } @Bean public JedisConnectionFactory redisConnectionFactory(@Value("$...

Usando Redis en Pruebas [versión 2]

Previamente había comentado como utilizar Redis en pruebas mediante redis embebido, pero en esta ocasión utilizaremos Testcontainers , que como lo dicen en su página, podemos utilizar cualquier cosa que corra en docker en nuestros tests 😮. Comencemos Lo primero es incluir en nuestro pom la dependencia a testcontainers: <dependency> <groupId>org.testcontainers</groupId> <artifactId>testcontainers</artifactId> <version>1.11.2</version> </dependency> También incluimos otras librerías de test y el cliente redis: <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.11.1</version> <scope>test</scope> </depende...