├── Dockerfile ├── JenkinsfileDockerSwarm ├── JenkinsfileKubernetes ├── README.md ├── docker-compose.yml ├── ingress-resource.yml ├── javaapp.yml ├── javawebapp-deployment.yml ├── myapp.yml ├── pom.xml ├── springBootMongo-PrivateRepo.yml ├── springBootMongo.yml ├── springapp.yml └── src └── main ├── java └── com │ └── mt │ └── springmongo │ ├── DemoApp.java │ ├── User.java │ ├── UserController.java │ ├── UserRepository.java │ ├── UserResource.java │ └── WebConfig.java └── resources ├── application.yml ├── bootstrap.yml ├── logback-spring.xml ├── static └── img │ ├── LT.JPG │ ├── landmarktech.png │ ├── logo.png │ └── logo1.png └── templates └── index.html /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8-alpine 2 | # #Required for starting application up. 3 | RUN apk update && apk add /bin/sh 4 | RUN mkdir -p /opt/app 5 | ENV PROJECT_HOME /opt/app 6 | COPY target/spring-boot-mongo-1.0.jar $PROJECT_HOME/spring-boot-mongo.jar 7 | WORKDIR $PROJECT_HOME 8 | CMD ["java" ,"-jar","./spring-boot-mongo.jar"] 9 | -------------------------------------------------------------------------------- /JenkinsfileDockerSwarm: -------------------------------------------------------------------------------- 1 | node{ 2 | stage("Git CheckOut"){ 3 | git url: 'https://github.com/simonLegah/UnityProject.git',branch: 'master' 4 | } 5 | 6 | stage(" Maven Clean Package"){ 7 | def mavenHome = tool name: "Maven-3.6.1", type: "maven" 8 | def mavenCMD = "${mavenHome}/bin/mvn" 9 | sh "${mavenCMD} clean package" 10 | } 11 | 12 | stage("Build Dokcer Image") { 13 | sh "docker build -t mylandmarktech/spring-boot-mongo ." 14 | } 15 | 16 | stage("Docker Push"){ 17 | withCredentials([string(credentialsId: 'Docker_Hub_Pwd', variable: 'Docker_Hub_Pwd')]) { 18 | sh "docker login -u mylandmarktech -p ${Docker_Hub_Pwd}" 19 | } 20 | sh "docker push mylandmarktech/spring-boot-mongo" 21 | 22 | } 23 | 24 | // Remove local image in Jenkins Server 25 | stage("Remove Local Image"){ 26 | sh "docker rmi -f mylandmarktech/spring-boot-mongo" 27 | } 28 | 29 | stage("Deploy to docker swarm cluster"){ 30 | sshagent(['Docker_Swarm_Manager_Dev']) { 31 | sh 'scp -o StrictHostKeyChecking=no docker-compose.yml ubuntu@172.31.47.232:' 32 | //sh 'ssh -o StrictHostKeyChecking=no ubuntu@172.31.47.232 docker stack rm springboot' 33 | sh 'ssh -o StrictHostKeyChecking=no ubuntu@172.31.47.232 docker stack deploy --prune --compose-file docker-compose.yml springboot' 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /JenkinsfileKubernetes: -------------------------------------------------------------------------------- 1 | node{ 2 | 3 | stage('SCM Checkout'){ 4 | git credentialsId: 'GIT_CREDENTIALS', url: 'https://github.com/simonLegah/UnityProject.git',branch: 'master' 5 | } 6 | 7 | stage(" Maven Clean Package"){ 8 | def mavenHome = tool name: "Maven-3.6.1", type: "maven" 9 | def mavenCMD = "${mavenHome}/bin/mvn" 10 | sh "${mavenCMD} clean package" 11 | 12 | } 13 | 14 | 15 | stage('Build Docker Image'){ 16 | sh 'docker build -t mylandmarktech/spring-boot-mongo .' 17 | } 18 | 19 | stage('Push Docker Image'){ 20 | withCredentials([string(credentialsId: 'DOKCER_HUB_PASSWORD', variable: 'DOKCER_HUB_PASSWORD')]) { 21 | sh "docker login -u mylandmarktech -p ${DOKCER_HUB_PASSWORD}" 22 | } 23 | sh 'docker push mylandmarktech/spring-boot-mongo' 24 | } 25 | 26 | stage("Deploy To Kuberates Cluster"){ 27 | kubernetesDeploy( 28 | configs: 'springBootMongo.yml', 29 | kubeconfigId: 'KUBERNATES_CONFIG', 30 | enableConfigSubstitution: true 31 | ) 32 | } 33 | 34 | /** 35 | stage("Deploy To Kuberates Cluster"){ 36 | sh 'kubectl apply -f springBootMongo.yml' 37 | } **/ 38 | 39 | } 40 | 41 | 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Build Project Using Maven 2 | 3 | Maven is java based build tool to generate executable 4 | 5 | packages(jar, ear,war) for java based projects. 6 | 7 | ```bash 8 | mvn clean package 9 | ``` 10 | 11 | ## Create Docker Image 12 | Docker is a continerization tool.Using docker we can deploy our applications as 13 | 14 | containers using docker images. Containers contains application code and also the softwares, 15 | 16 | config files whatever is required for our application to run. 17 | 18 | Create docker image using Dockerfile 19 | 20 | 21 | ```docker 22 | docker build -t mylandmarktech/springapp . 23 | ``` 24 | 25 | ## Deploy Application Using Docker Compose 26 | 27 | ```docker-compose 28 | docker-compose up -d 29 | ``` 30 | 31 | ## List Docker Containers 32 | ```docker 33 | docker ps -a 34 | ``` 35 | ## License 36 | [Landmark Technologies](http://www.mylandmarktech.com) 37 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.1' 2 | 3 | services: 4 | springapp: 5 | image: mylandmarktech/spring-boot-mongo:latest 6 | restart: always # This will be ignored if we deploy in docker swarm 7 | environment: 8 | - MONGO_DB_HOSTNAME=mongo 9 | - MONGO_DB_USERNAME=devdb 10 | - MONGO_DB_PASSWORD=devdb123 11 | ports: 12 | - 8080:8080 13 | working_dir: /opt/app 14 | depends_on: 15 | - mongo 16 | networks: 17 | - aws-network 18 | deploy: # This will be considered only in docker swarm. 19 | replicas: 2 20 | update_config: 21 | parallelism: 1 22 | delay: 20s 23 | restart_policy: 24 | condition: on-failure 25 | delay: 10s 26 | max_attempts: 5 27 | 28 | mongo: 29 | image: mongo 30 | environment: 31 | - MONGO_INITDB_ROOT_USERNAME=devdb 32 | - MONGO_INITDB_ROOT_PASSWORD=devdb123 33 | volumes: 34 | - mongodb:/data/db 35 | restart: always 36 | networks: 37 | - aws-network 38 | 39 | volumes: 40 | mongodb: 41 | external: true 42 | 43 | networks: 44 | aws-network: 45 | external: true 46 | -------------------------------------------------------------------------------- /ingress-resource.yml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Ingress 3 | metadata: 4 | name: ingress-resource-1 5 | spec: 6 | rules: 7 | - host: apps.landmarktech.info 8 | http: 9 | paths: 10 | # Default Path(/) 11 | - backend: 12 | serviceName: springapp 13 | servicePort: 80 14 | - path: /java-web-app 15 | backend: 16 | serviceName: javawebappservice 17 | servicePort: 80 18 | -------------------------------------------------------------------------------- /javaapp.yml: -------------------------------------------------------------------------------- 1 | # Deployment Rolling Update 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | name: javawebappdeployment 6 | spec: 7 | replicas: 2 8 | selector: 9 | matchLabels: 10 | app: javawebapp 11 | strategy: 12 | type: RollingUpdate 13 | rollingUpdate: 14 | maxUnavailable: 1 15 | maxSurge: 1 16 | minReadySeconds: 30 17 | template: 18 | metadata: 19 | name: javawebapppod 20 | labels: 21 | app: javawebapp 22 | spec: 23 | containers: 24 | - name: javawebappcontainer 25 | image: mylandmarktech/java-web-app 26 | ports: 27 | - containerPort: 8080 28 | --- 29 | apiVersion: v1 30 | kind: Service 31 | metadata: 32 | name: javawebappservice 33 | spec: 34 | type: ClusterIP 35 | selector: 36 | app: javawebapp 37 | ports: 38 | - port: 80 39 | targetPort: 8080 40 | -------------------------------------------------------------------------------- /javawebapp-deployment.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: ReplicationController 4 | metadata: 5 | labels: 6 | name: javawebapp 7 | name: java-controller 8 | spec: 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | name: javawebapp 14 | spec: 15 | containers: 16 | - image: mylandmarktech/java-web-app 17 | name: javawebapp 18 | ports: 19 | - name: javawebapp 20 | containerPort: 8080 21 | --- 22 | # Node Port Service 23 | apiVersion: v1 24 | kind: Service 25 | metadata: 26 | labels: 27 | name: javawebapp 28 | name: javawebapp 29 | spec: 30 | type: NodePort 31 | ports: 32 | - port: 8080 33 | targetPort: 8080 34 | selector: 35 | name: javawebapp 36 | -------------------------------------------------------------------------------- /myapp.yml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: springbootdeployment 5 | spec: 6 | replicas: 2 7 | selector: 8 | matchLabels: 9 | app: springboot 10 | template: 11 | metadata: 12 | name: springapppod 13 | labels: 14 | app: springboot 15 | spec: 16 | containers: 17 | - image: mylandmarktech/spring-boot-mongo 18 | name: springboot 19 | ports: 20 | - containerPort: 8080 21 | env: 22 | - name: MONGO_DB_HOSTNAME 23 | value: mongo 24 | - name: MONGO_INITDB_ROOT_USERNAME 25 | value: springapp 26 | - name: MONGO_INITDB_ROOT_PASSWORD 27 | value: mongodb@123 28 | --- 29 | # Node Port Service For SpringApp 30 | apiVersion: v1 31 | kind: Service 32 | metadata: 33 | name: springboot 34 | spec: 35 | type: NodePort 36 | ports: 37 | - port: 8080 38 | targetPort: 8080 39 | selector: 40 | app: springboot 41 | --- 42 | # Mongo RC with host path Volume 43 | apiVersion: v1 44 | kind: ReplicationController 45 | metadata: 46 | name: mongo-controller 47 | spec: 48 | replicas: 1 49 | selector: 50 | app: mongo 51 | template: 52 | metadata: 53 | labels: 54 | app: mongo 55 | spec: 56 | containers: 57 | - image: mongo 58 | name: mongo 59 | env: 60 | - name: MONGO_INITDB_ROOT_USERNAME 61 | value: springapp 62 | - name: MONGO_INITDB_ROOT_PASSWORD 63 | value: mongodb@123 64 | ports: 65 | - containerPort: 27017 66 | volumeMounts: 67 | - name: mongo-persistent-storage 68 | mountPath: /data/db 69 | volumes: 70 | - name: mongo-persistent-storage 71 | hostPath: 72 | path: /tmp/dbbackup 73 | --- 74 | # Mongo Node Port RC 75 | apiVersion: v1 76 | kind: Service 77 | metadata: 78 | name: mongo 79 | spec: 80 | type: ClusterIP 81 | ports: 82 | - port: 27017 83 | targetPort: 27017 84 | selector: 85 | app: mongo 86 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.springframework.boot 8 | spring-boot-starter-parent 9 | 2.1.5.RELEASE 10 | 11 | 12 | 13 | com.mt 14 | spring-boot-mongo 15 | 1.0 16 | 17 | 1.8 18 | 2.1.5.RELEASE 19 | Greenwich.RELEASE 20 | 6.1 21 | 22 | 23 | 24 | 25 | 26 | org.springframework.boot 27 | spring-boot-dependencies 28 | ${spring-boot.version} 29 | pom 30 | import 31 | 32 | 33 | org.springframework.cloud 34 | spring-cloud-dependencies 35 | ${spring-cloud.version} 36 | pom 37 | import 38 | 39 | 40 | 41 | 42 | 43 | 44 | org.springframework.boot 45 | spring-boot-starter-data-mongodb 46 | 47 | 48 | org.springframework.boot 49 | spring-boot-starter-web 50 | 51 | 52 | org.springframework.boot 53 | spring-boot-starter-thymeleaf 54 | 55 | 56 | 57 | org.webjars 58 | bootstrap 59 | 3.3.7 60 | 61 | 62 | org.webjars 63 | jquery 64 | 3.2.1 65 | 66 | 67 | 68 | 69 | org.springframework.cloud 70 | spring-cloud-starter-sleuth 71 | 72 | 73 | 74 | 75 | net.logstash.logback 76 | logstash-logback-encoder 77 | ${logstash-logback-encoder.version} 78 | 79 | 80 | 81 | org.springframework.boot 82 | spring-boot-starter-test 83 | test 84 | 85 | 86 | 87 | 88 | 89 | org.springframework.boot 90 | spring-boot-maven-plugin 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /springBootMongo-PrivateRepo.yml: -------------------------------------------------------------------------------- 1 | 2 | apiVersion: v1 3 | kind: ReplicationController 4 | metadata: 5 | labels: 6 | name: springboot 7 | name: spring-controller 8 | spec: 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | name: springboot 14 | spec: 15 | imagePullSecrets: 16 | - name: dockerreposecret 17 | containers: 18 | - image: 172.31.43.54:8083/spring-boot-mongo 19 | name: springboot 20 | ports: 21 | - name: springboot 22 | containerPort: 8080 23 | --- 24 | # Node Port Service 25 | apiVersion: v1 26 | kind: Service 27 | metadata: 28 | labels: 29 | name: springboot 30 | name: springboot 31 | spec: 32 | type: NodePort 33 | ports: 34 | - port: 8080 35 | targetPort: 8080 36 | selector: 37 | name: springboot 38 | --- 39 | # Mongo host path rc 40 | apiVersion: v1 41 | kind: ReplicationController 42 | metadata: 43 | labels: 44 | name: mongo 45 | name: mongo-controller 46 | spec: 47 | replicas: 1 48 | template: 49 | metadata: 50 | labels: 51 | name: mongo 52 | spec: 53 | containers: 54 | - image: mongo 55 | name: mongo 56 | ports: 57 | - name: mongo 58 | containerPort: 27017 59 | hostPort: 27017 60 | volumeMounts: 61 | - name: mongo-persistent-storage 62 | mountPath: /data/db 63 | volumes: 64 | - name: mongo-persistent-storage 65 | hostPath: 66 | path: /tmp/dbbackup 67 | --- 68 | # Mongo Node Port RC 69 | apiVersion: v1 70 | kind: Service 71 | metadata: 72 | labels: 73 | name: mongo 74 | name: mongo 75 | spec: 76 | type: ClusterIP 77 | ports: 78 | - port: 27017 79 | targetPort: 27017 80 | selector: 81 | name: mongo 82 | -------------------------------------------------------------------------------- /springBootMongo.yml: -------------------------------------------------------------------------------- 1 | # Config Map 2 | kind: ConfigMap 3 | apiVersion: v1 4 | metadata: 5 | name: springapp-configmap 6 | data: 7 | # Configuration values can be set as key-value properties 8 | username: springapp 9 | password: mongodb@123 10 | --- 11 | apiVersion: apps/v1 12 | kind: Deployment 13 | metadata: 14 | name: springbootdeployment 15 | spec: 16 | replicas: 2 17 | selector: 18 | matchLabels: 19 | app: springboot 20 | template: 21 | metadata: 22 | name: springapppod 23 | labels: 24 | app: springboot 25 | spec: 26 | containers: 27 | - image: mylandmarktech/springapp 28 | name: springboot 29 | ports: 30 | - containerPort: 8080 31 | env: 32 | - name: MONGO_DB_HOSTNAME 33 | value: mongo 34 | - name: MONGO_INITDB_ROOT_USERNAME 35 | valueFrom: 36 | configMapKeyRef: 37 | name: springapp-configmap 38 | key: username 39 | - name: MONGO_INITDB_ROOT_PASSWORD 40 | valueFrom: 41 | configMapKeyRef: 42 | name: springapp-configmap 43 | key: password 44 | --- 45 | # Node Port Service For SpringApp 46 | apiVersion: v1 47 | kind: Service 48 | metadata: 49 | name: springboot 50 | spec: 51 | type: NodePort 52 | ports: 53 | - port: 8080 54 | targetPort: 8080 55 | nodePort: 30300 56 | selector: 57 | app: springboot 58 | --- 59 | # Mongo RC with host path Volume 60 | apiVersion: v1 61 | kind: ReplicationController 62 | metadata: 63 | name: mongo-controller 64 | spec: 65 | replicas: 1 66 | selector: 67 | app: mongo 68 | template: 69 | metadata: 70 | labels: 71 | app: mongo 72 | spec: 73 | containers: 74 | - image: mongo 75 | name: mongo 76 | env: 77 | - name: MONGO_INITDB_ROOT_USERNAME 78 | valueFrom: 79 | configMapKeyRef: 80 | name: springapp-configmap 81 | key: username 82 | - name: MONGO_INITDB_ROOT_PASSWORD 83 | valueFrom: 84 | configMapKeyRef: 85 | name: springapp-configmap 86 | key: password 87 | ports: 88 | - containerPort: 27017 89 | volumeMounts: 90 | - name: mongo-persistent-storage 91 | mountPath: /data/db 92 | volumes: 93 | - name: mongo-persistent-storage 94 | hostPath: 95 | path: /tmp/dbbackup 96 | --- 97 | # Mongo Node Port RC 98 | apiVersion: v1 99 | kind: Service 100 | metadata: 101 | name: mongo 102 | spec: 103 | type: ClusterIP 104 | ports: 105 | - port: 27017 106 | targetPort: 27017 107 | selector: 108 | app: mongo 109 | -------------------------------------------------------------------------------- /springapp.yml: -------------------------------------------------------------------------------- 1 | # Complete Manifest Where in single yml we defined Deployment & Service for SpringApp & 2 | #PVC(with default StorageClass),ReplicaSet/StatefulSet & Service For Mongo. 3 | # storage class, pv, pvc, 4 | # configMaps / Secretes 5 | apiVersion: apps/v1 6 | kind: Deployment 7 | metadata: 8 | name: springappdeployment 9 | spec: 10 | replicas: 2 11 | selector: 12 | matchLabels: 13 | app: springapp 14 | template: 15 | metadata: 16 | name: springapppod 17 | labels: 18 | app: springapp 19 | spec: 20 | containers: 21 | - name: springappcontainer 22 | image: mylandmarktech/spring-boot-mongo 23 | ports: 24 | - containerPort: 8080 25 | env: 26 | - name: MONGO_DB_USERNAME 27 | value: devdb 28 | - name: MONGO_DB_PASSWORD 29 | value: devdb@123 30 | - name: MONGO_DB_HOSTNAME 31 | value: mongo 32 | --- 33 | apiVersion: v1 34 | kind: Service 35 | metadata: 36 | name: springapp 37 | spec: 38 | selector: 39 | app: springapp 40 | ports: 41 | - port: 80 42 | targetPort: 8080 43 | nodePort: 30030 44 | type: LoadBalancer 45 | --- 46 | apiVersion: v1 47 | kind: PersistentVolumeClaim 48 | metadata: 49 | name: mongodbpvc 50 | spec: 51 | accessModes: 52 | - ReadWriteOnce 53 | resources: 54 | requests: 55 | storage: 16Gi 56 | --- 57 | apiVersion: apps/v1 58 | kind: ReplicaSet 59 | metadata: 60 | name: mongodbrs 61 | spec: 62 | selector: 63 | matchLabels: 64 | app: mongodb 65 | template: 66 | metadata: 67 | name: mongodbpod 68 | labels: 69 | app: mongodb 70 | spec: 71 | volumes: 72 | - name: pvc 73 | persistentVolumeClaim: 74 | claimName: mongodbpvc 75 | containers: 76 | - name: mongodbcontainer 77 | image: mongo 78 | ports: 79 | - containerPort: 27017 80 | env: 81 | - name: MONGO_INITDB_ROOT_USERNAME 82 | value: devdb 83 | - name: MONGO_INITDB_ROOT_PASSWORD 84 | value: devdb@123 85 | volumeMounts: 86 | - name: pvc 87 | mountPath: /data/db 88 | --- 89 | apiVersion: v1 90 | kind: Service 91 | metadata: 92 | name: mongo 93 | spec: 94 | type: ClusterIP 95 | selector: 96 | app: mongodb 97 | ports: 98 | - port: 27017 99 | targetPort: 27017 100 | -------------------------------------------------------------------------------- /src/main/java/com/mt/springmongo/DemoApp.java: -------------------------------------------------------------------------------- 1 | package com.mt.springmongo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 | import org.springframework.context.annotation.ComponentScan; 6 | import org.springframework.stereotype.Controller; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | 9 | /** 10 | * Main Application controller. 11 | * 12 | * @author Mithun 13 | */ 14 | @Controller 15 | @EnableAutoConfiguration 16 | @ComponentScan(basePackages = "com.mt.*") 17 | public class DemoApp { 18 | 19 | public static void main(String[] args) { 20 | SpringApplication.run(DemoApp.class, args); 21 | } 22 | 23 | @RequestMapping("/") 24 | public String index() { 25 | return "index.html"; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/mt/springmongo/User.java: -------------------------------------------------------------------------------- 1 | package com.mt.springmongo; 2 | 3 | import java.io.Serializable; 4 | import java.util.Objects; 5 | 6 | import org.springframework.data.annotation.Id; 7 | import org.springframework.data.mongodb.core.mapping.Document; 8 | 9 | /** 10 | * Represents a User which is mapped to users collection in MongoDB 11 | * 12 | * @author Mithun 13 | */ 14 | @Document(collection = "users") 15 | public class User implements Serializable { 16 | 17 | /** 18 | * 19 | */ 20 | private static final long serialVersionUID = 1L; 21 | 22 | @Id 23 | private String id; 24 | private String firstName; 25 | private String lastName; 26 | private String email; 27 | 28 | public User(String firstName, String lastName, String email) { 29 | this.firstName = firstName; 30 | this.lastName = lastName; 31 | this.email = email; 32 | } 33 | 34 | public String getId() { 35 | return id; 36 | } 37 | 38 | public void setId(String id) { 39 | this.id = id; 40 | } 41 | 42 | public String getFirstName() { 43 | return firstName; 44 | } 45 | 46 | public void setFirstName(String firstName) { 47 | this.firstName = firstName; 48 | } 49 | 50 | public String getLastName() { 51 | return lastName; 52 | } 53 | 54 | public void setLastName(String lastName) { 55 | this.lastName = lastName; 56 | } 57 | 58 | public String getEmail() { 59 | return email; 60 | } 61 | 62 | public void setEmail(String email) { 63 | this.email = email; 64 | } 65 | 66 | @Override 67 | public boolean equals(Object o) { 68 | if (this == o) return true; 69 | if (o == null || getClass() != o.getClass()) return false; 70 | User user = (User) o; 71 | return Objects.equals(id, user.id) && 72 | Objects.equals(firstName, user.firstName) && 73 | Objects.equals(lastName, user.lastName) && 74 | Objects.equals(email, user.email); 75 | } 76 | 77 | @Override 78 | public int hashCode() { 79 | return Objects.hash(id, firstName, lastName, email); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /src/main/java/com/mt/springmongo/UserController.java: -------------------------------------------------------------------------------- 1 | package com.mt.springmongo; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | import org.springframework.web.bind.annotation.PostMapping; 8 | import org.springframework.web.bind.annotation.RequestParam; 9 | 10 | /** 11 | * Controller which handles reqest for saving {@link User}s. 12 | * 13 | * @author LandmarkTech 14 | */ 15 | @Controller 16 | public class UserController { 17 | private final UserRepository userRepository; 18 | 19 | private static final Logger logger = LoggerFactory.getLogger(UserController.class); 20 | 21 | @Autowired 22 | public UserController(final UserRepository userRepository) { 23 | this.userRepository = userRepository; 24 | } 25 | 26 | @PostMapping(value = "/save") 27 | public String save(@RequestParam("firstName") String firstName, 28 | @RequestParam("lastName") String lastName, 29 | @RequestParam("email") String email) { 30 | 31 | logger.info("Creating user name: "+firstName); 32 | User user = new User(firstName, lastName, email); 33 | userRepository.save(user); 34 | 35 | return "redirect:/"; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/mt/springmongo/UserRepository.java: -------------------------------------------------------------------------------- 1 | package com.mt.springmongo; 2 | 3 | import org.springframework.data.repository.PagingAndSortingRepository; 4 | 5 | /** 6 | * Repository for saving new and retrieving existing {@link User}s from MongoDB 7 | * 8 | * @author Mithun 9 | */ 10 | public interface UserRepository extends PagingAndSortingRepository { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/mt/springmongo/UserResource.java: -------------------------------------------------------------------------------- 1 | package com.mt.springmongo; 2 | 3 | import java.util.List; 4 | import java.util.Optional; 5 | 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.web.bind.annotation.GetMapping; 10 | import org.springframework.web.bind.annotation.PathVariable; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | import org.springframework.web.bind.annotation.RestController; 13 | 14 | /** 15 | * Rest controller which is responsible for retrieving {@link User}s. 16 | * 17 | * @author Mithun 18 | */ 19 | @RestController 20 | @RequestMapping(value = "/api/users") 21 | public class UserResource { 22 | 23 | private final UserRepository userRepository; 24 | 25 | private static final Logger logger = LoggerFactory.getLogger(UserRepository.class); 26 | 27 | @Autowired 28 | public UserResource(final UserRepository userRepository) { 29 | this.userRepository = userRepository; 30 | } 31 | 32 | @GetMapping(produces = "application/JSON") 33 | public List getAllUsers() { 34 | List users = (List) userRepository.findAll(); 35 | logger.info("Get Users Total Users: "+users.size()); 36 | return users; 37 | } 38 | 39 | @GetMapping(value = "/{id}", produces = "application/JSON") 40 | public Optional findById(@PathVariable("id") String userID) { 41 | logger.info("Get User By Id : "+userID); 42 | return userRepository.findById(userID); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/mt/springmongo/WebConfig.java: -------------------------------------------------------------------------------- 1 | package com.mt.springmongo; 2 | import org.springframework.context.annotation.Configuration; 3 | import org.springframework.web.servlet.config.annotation.EnableWebMvc; 4 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 6 | 7 | @Configuration 8 | @EnableWebMvc 9 | public class WebConfig implements WebMvcConfigurer { 10 | 11 | @Override 12 | public void addResourceHandlers(ResourceHandlerRegistry registry) { 13 | registry.addResourceHandler( 14 | "/webjars/**", 15 | "/img/**", 16 | "/css/**", 17 | "/js/**") 18 | .addResourceLocations( 19 | "classpath:/META-INF/resources/webjars/", 20 | "classpath:/static/img/", 21 | "classpath:/static/css/", 22 | "classpath:/static/js/"); 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | data: 3 | mongodb: 4 | host: ${MONGO_DB_HOSTNAME} 5 | port: 27017 6 | username: ${MONGO_DB_USERNAME} 7 | password: ${MONGO_DB_PASSWORD} 8 | database: users 9 | authentication-database: admin 10 | 11 | server: 12 | port: 8080 13 | -------------------------------------------------------------------------------- /src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: spring-boot-app 4 | server: 5 | port: 8080 -------------------------------------------------------------------------------- /src/main/resources/logback-spring.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 10 | 12 | 13 | 15 | 16 | ${CONSOLE_LOG_PATTERN} 17 | 18 | 19 | 20 | 22 | 23 | 512 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |          32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/main/resources/static/img/LT.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LandmakTechnology/spring-boot-docker/0dc8ef3413fed6f5da1a00076cb20e3c26e310b2/src/main/resources/static/img/LT.JPG -------------------------------------------------------------------------------- /src/main/resources/static/img/landmarktech.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LandmakTechnology/spring-boot-docker/0dc8ef3413fed6f5da1a00076cb20e3c26e310b2/src/main/resources/static/img/landmarktech.png -------------------------------------------------------------------------------- /src/main/resources/static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LandmakTechnology/spring-boot-docker/0dc8ef3413fed6f5da1a00076cb20e3c26e310b2/src/main/resources/static/img/logo.png -------------------------------------------------------------------------------- /src/main/resources/static/img/logo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LandmakTechnology/spring-boot-docker/0dc8ef3413fed6f5da1a00076cb20e3c26e310b2/src/main/resources/static/img/logo1.png -------------------------------------------------------------------------------- /src/main/resources/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 16 | 18 | 19 | Spring Boot APP with MongoDB 20 | 21 | 22 |
23 |

SpringBootApp + MongoDB with Jenkins, Docker and K8S

24 |
25 |
27 |
28 | 31 |
32 | 33 |
34 | 37 |
38 | 39 |
40 | 42 |
43 |
44 | 45 |
46 |
47 |
48 | 49 | 50 |
51 |

Saved Users

52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
IDFirst NameLast NameEmail
64 |
65 | 66 | 67 |
68 |
69 | logo1.png 70 |
71 |
72 |

Landmark Technology - Software Development & DevOps Automation.

73 |

Tel 74 | +1 437-215-2483; mylandmarktech@gmail.com

75 |
76 | Copyright 2021 by Landmark Technology 77 | 78 |
79 |
80 |
81 | 82 |
83 | 84 | 102 | 103 | 104 | --------------------------------------------------------------------------------