Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ cmake-build-*/

# File-based project format
*.iws
*.iml

# IntelliJ
out/
Expand Down Expand Up @@ -79,6 +80,7 @@ fabric.properties
.idea/caches/build_file_checksums.ser

### VisualStudioCode template
.vscode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
Expand Down
2 changes: 1 addition & 1 deletion .tool-versions
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
java corretto-23.0.1.8.1
maven 3.9.8
maven 3.9.9
26 changes: 23 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
FROM public.ecr.aws/docker/library/maven:3.9.9-amazoncorretto-23-al2023 AS build

WORKDIR /code

COPY . .
RUN mvn clean package -DskipTests --also-make --batch-mode
COPY pom.xml .
# Create .m2 directory to avoid permission issues
RUN mkdir -p /root/.m2
# Download dependencies first (this layer will be cached)
RUN --mount=type=cache,target=/root/.m2 mvn dependency:go-offline

# Build the application
COPY src ./src
RUN --mount=type=cache,target=/root/.m2 mvn clean package -DskipTests --also-make --batch-mode

FROM build AS tests

ENV SPRING_DATASOURCE_PRIMARY_URL=jdbc:postgresql://authronom-backend-postgres:5432/test_authronom_backend
ENV SPRING_DATA_REDIS_HOST=authronom-backend-redis

RUN mvn test --batch-mode

FROM public.ecr.aws/docker/library/maven:3.9.9-amazoncorretto-23-al2023 AS development
Expand All @@ -16,4 +27,13 @@ WORKDIR /authronom-backend
RUN yum install -y git

ENTRYPOINT []
CMD []
CMD []

FROM public.ecr.aws/amazoncorretto/amazoncorretto:23-al2023 AS application

WORKDIR /authronom-backend

COPY --from=build /code/target/*.jar app.jar

EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
12 changes: 10 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,17 @@
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.liquibase</groupId>-->
<!-- <artifactId>liquibase-core</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-database-postgresql</artifactId>
</dependency>

<!-- Redis -->
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package com.github.netroforge.authronom_backend.config;

import com.github.netroforge.authronom_backend.db.migrations.PrimaryBaseJavaMigration;
import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.callback.Callback;
import org.flywaydb.core.api.configuration.FluentConfiguration;
import org.flywaydb.core.api.migration.JavaMigration;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer;
import org.springframework.boot.autoconfigure.flyway.FlywayMigrationStrategy;
import org.springframework.boot.autoconfigure.flyway.FlywayProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.List;

@Configuration
public class FlywayConfiguration {

@Bean
@ConfigurationProperties(prefix = "spring.datasource.primary.flyway")
public FlywayProperties primaryFlywayProperties() {
return new FlywayProperties();
}

@Bean
public Flyway primaryFlyway(
DataSource primaryDataSource,
FlywayProperties primaryFlywayProperties,
List<Callback> primaryCallbacks,
List<PrimaryBaseJavaMigration> primaryMigrations
) {
return createFlyway(primaryDataSource, primaryFlywayProperties, primaryCallbacks, primaryMigrations);
}

@Bean
public FlywayMigrationInitializer primaryFlywayMigrationInitializer(
Flyway primaryFlyway,
ObjectProvider<FlywayMigrationStrategy> primaryFlywayMigrationStrategy
) {
return new FlywayMigrationInitializer(
primaryFlyway,
primaryFlywayMigrationStrategy.getIfAvailable()
);
}

private Flyway createFlyway(
DataSource dataSource,
FlywayProperties flywayProperties,
List<? extends Callback> callbacks,
List<? extends JavaMigration> migrations
) {
FluentConfiguration fluentConfiguration = Flyway.configure();
fluentConfiguration.dataSource(dataSource);
fluentConfiguration.locations(flywayProperties.getLocations().toArray(new String[0]));
fluentConfiguration.baselineOnMigrate(flywayProperties.isBaselineOnMigrate());
fluentConfiguration.schemas(flywayProperties.getSchemas().toArray(new String[0]));
fluentConfiguration.defaultSchema(flywayProperties.getDefaultSchema());
fluentConfiguration.table(flywayProperties.getTable());
fluentConfiguration.callbacks(callbacks.toArray(new Callback[0]));
fluentConfiguration.javaMigrations(migrations.toArray(new JavaMigration[0]));
return fluentConfiguration.load();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,22 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

// Configure Spring Session to use Redis
@Bean
public RedisOperations<String, Object> redisOperations(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
return template;
public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// There issue when keys names contains strange characters
// using this as solution https://stackoverflow.com/a/52908968/285571
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
Loading