├── 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 |
48 |
49 |
50 |
51 |
Saved Users
52 |
53 |
54 |
55 | ID |
56 | First Name |
57 | Last Name |
58 | Email |
59 |
60 |
61 |
62 |
63 |
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 |
79 |
80 |
81 |
82 |
83 |
84 |
102 |
103 |
104 |
--------------------------------------------------------------------------------