diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..178209c --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +# All variables must be defined in your local system + +# Used locally and in Docker environments +TS_JWT_SECRET="your-secret-key" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3d8d515 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +# Basic Docker file +#FROM eclipse-temurin:17-jdk-jammy +#WORKDIR /app +#COPY build/libs/task-scheduler-0.0.1-SNAPSHOT.jar /app/task-scheduler.jar +#EXPOSE 8081 +#CMD ["java", "-jar", "/app/task-scheduler.jar"] + +# Build +FROM gradle:jdk17 AS build +WORKDIR /app +COPY . . + +# Run .jar +RUN gradle build --no-daemon +FROM eclipse-temurin:17-jdk-jammy +WORKDIR /app +COPY --from=build /app/build/libs/*.jar /app/task-scheduler.jar +EXPOSE 8081 +CMD ["java", "-jar", "/app/task-scheduler.jar"] + + diff --git a/build.gradle b/build.gradle index 9a8cf16..85184ea 100644 --- a/build.gradle +++ b/build.gradle @@ -42,7 +42,7 @@ dependencies { annotationProcessor 'org.mapstruct:mapstruct-processor:1.6.3' annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0' - testImplementation 'org.springframework.boot:spring-boot-starter-data-mongodb-test' + testImplementation 'org.springframework.boot:spring-boot-starter-data-mongodb-test' testImplementation 'org.springframework.boot:spring-boot-starter-security-test' testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test' diff --git a/src/main/java/com/javanauta/ts/taskscheduler/TaskSchedulerApplication.java b/src/main/java/com/javanauta/ts/taskscheduler/TaskSchedulerApplication.java index cc876f9..328e085 100644 --- a/src/main/java/com/javanauta/ts/taskscheduler/TaskSchedulerApplication.java +++ b/src/main/java/com/javanauta/ts/taskscheduler/TaskSchedulerApplication.java @@ -2,9 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration; import org.springframework.cloud.openfeign.EnableFeignClients; -@SpringBootApplication +@SpringBootApplication(exclude = MongoAutoConfiguration.class) @EnableFeignClients public class TaskSchedulerApplication { public static void main(String[] args) { diff --git a/src/main/java/com/javanauta/ts/taskscheduler/infrastructure/client/UserClient.java b/src/main/java/com/javanauta/ts/taskscheduler/infrastructure/client/UserClient.java index 49e63a7..127dd6b 100644 --- a/src/main/java/com/javanauta/ts/taskscheduler/infrastructure/client/UserClient.java +++ b/src/main/java/com/javanauta/ts/taskscheduler/infrastructure/client/UserClient.java @@ -6,7 +6,7 @@ import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestParam; -@FeignClient(name = "user", url = "${user.url}") +@FeignClient(name = "user", url = "${ts.user.service.url}") public interface UserClient { @GetMapping("/user") diff --git a/src/main/java/com/javanauta/ts/taskscheduler/infrastructure/config/MongoConfig.java b/src/main/java/com/javanauta/ts/taskscheduler/infrastructure/config/MongoConfig.java new file mode 100644 index 0000000..aea31ad --- /dev/null +++ b/src/main/java/com/javanauta/ts/taskscheduler/infrastructure/config/MongoConfig.java @@ -0,0 +1,32 @@ +package com.javanauta.ts.taskscheduler.infrastructure.config; + +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.mongodb.MongoDatabaseFactory; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory; + +@Slf4j +@Configuration +public class MongoConfig { + + @Bean + public MongoClient mongoClient(@Value("${spring.data.mongodb.uri}") String uri) { + log.info("Using MongoDB URI: {}", uri); + return MongoClients.create(uri); + } + + @Bean + public MongoDatabaseFactory mongoDatabaseFactory(@Value("${spring.data.mongodb.uri}") String uri) { + return new SimpleMongoClientDatabaseFactory(uri); + } + + @Bean + public MongoTemplate mongoTemplate(MongoDatabaseFactory factory) { + return new MongoTemplate(factory); + } +} diff --git a/src/main/java/com/javanauta/ts/taskscheduler/infrastructure/security/JwtUtil.java b/src/main/java/com/javanauta/ts/taskscheduler/infrastructure/security/JwtUtil.java index 1869c46..597493e 100644 --- a/src/main/java/com/javanauta/ts/taskscheduler/infrastructure/security/JwtUtil.java +++ b/src/main/java/com/javanauta/ts/taskscheduler/infrastructure/security/JwtUtil.java @@ -3,6 +3,7 @@ import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.security.Keys; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.nio.charset.StandardCharsets; @@ -12,7 +13,8 @@ public class JwtUtil { // Secret key used to sign and verify JWT tokens - private final String secretKey = "your-super-long-secret-key-that-needs-to-be-very-difficult"; + @Value("${ts.jwt.secret}") + private String secretKey; // Extracts claims from the JWT token public Claims extractClaims(String token) { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index fa0f274..80b5d07 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,9 +1,13 @@ spring.application.name=task-scheduler spring.application.description=Task Scheduler - Task scheduler module -spring.data.mongodb.uri=mongodb://localhost:27017 -spring.data.mongodb.database=ts_task_scheduler_db +server.port=8081 -user.url=localhost:8080 +spring.data.mongodb.database=ts_task_scheduler -server.port=8081 +# Env variables set by bff's docker-compose and used in Docker environment only. Default (localhost) used otherwise +spring.data.mongodb.uri=${SPRING_DATA_MONGODB_URI:mongodb://localhost:27017/ts_task_scheduler} +ts.user.service.url=${TS_USER_SERVICE_URL:localhost:8080} + +# Must be set locally - used locally and in docker environment (injected in bff's docker-compose) +ts.jwt.secret=${TS_JWT_SECRET}