Skip to content

Commit ccf727f

Browse files
committed
Added Docker support,Update .gitignore and pom.xml, refactor package structure, and add direct-connections endpoint
Signed-off-by: teetangh <teetangh@gmail.com>
1 parent 900d0b7 commit ccf727f

File tree

10 files changed

+215
-72
lines changed

10 files changed

+215
-72
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
*.iml
2+
.docker/
3+
.vscode/
4+
15
# maven target directory
26
target/
37
# Compiled class file

Dockerfile-couchbase-server

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM couchbase
2+
3+
RUN chmod +x /entrypoint.sh
4+
COPY configure-server.sh /opt/couchbase
5+
RUN chmod +x /opt/couchbase/configure-server.sh
6+
7+
# CMD ["/opt/couchbase/configure-server.sh"]
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# # Dockerfile for Spring boot application
2+
# FROM openjdk:11
3+
# EXPOSE 8080
4+
# ADD target/java-springboot-quickstart.jar java-springboot-quickstart.jar
5+
# ENTRYPOINT ["java","-jar","/java-springboot-quickstart.jar"]
6+
7+
FROM eclipse-temurin:17-jdk-jammy AS build
8+
ENV HOME=/usr/app
9+
RUN mkdir -p "$HOME"
10+
WORKDIR "$HOME"
11+
COPY . "$HOME"
12+
RUN --mount=type=cache,target=/root/.m2 ./mvnw -f "$HOME"/pom.xml clean package -DskipTests=true
13+
14+
#
15+
# Package stage
16+
#
17+
FROM eclipse-temurin:17-jre-jammy
18+
ARG JAR_FILE=/usr/app/target/*.jar
19+
COPY --from=build $JAR_FILE /app/runner.jar
20+
EXPOSE 8080
21+
ENTRYPOINT java -jar /app/runner.jar

configure-server.sh

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
set -m
2+
3+
# Start the Couchbase server in the background
4+
/entrypoint.sh couchbase-server &
5+
6+
# Wait for the server to start
7+
sleep 15
8+
9+
# Configure memory quota and index memory quota
10+
curl -v -X POST http://127.0.0.1:8091/pools/default -d memoryQuota=512 -d indexMemoryQuota=512
11+
12+
# Enable required services
13+
curl -v http://127.0.0.1:8091/node/controller/setupServices -d services=kv%2cn1ql%2Cindex
14+
15+
# Configure web settings (port, username, password)
16+
curl -v http://127.0.0.1:8091/settings/web -d port=8091 -d username=$COUCHBASE_ADMINISTRATOR_USERNAME -d password=$COUCHBASE_ADMINISTRATOR_PASSWORD
17+
18+
# Configure index storage mode
19+
curl -i -u $COUCHBASE_ADMINISTRATOR_USERNAME:$COUCHBASE_ADMINISTRATOR_PASSWORD -X POST http://127.0.0.1:8091/settings/indexes -d 'storageMode=memory_optimized'
20+
21+
# Create a new bucket
22+
curl -v -u $COUCHBASE_ADMINISTRATOR_USERNAME:$COUCHBASE_ADMINISTRATOR_PASSWORD -X POST http://127.0.0.1:8091/pools/default/buckets -d name=$COUCHBASE_BUCKET -d bucketType=couchbase -d ramQuotaMB=128 -d authType=sasl -d saslPassword=$COUCHBASE_BUCKET_PASSWORD
23+
24+
# Wait for the bucket to be created
25+
sleep 15
26+
27+
# Create a primary index on the bucket
28+
curl -v http://127.0.0.1:8093/query/service -d "statement=CREATE PRIMARY INDEX ON `$COUCHBASE_BUCKET`"
29+
30+
# Bring the Couchbase server process to the foreground
31+
fg 1

docker-compose.yml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Docker componse for couchbase server and spring boot application
2+
version: "3.1"
3+
services:
4+
couchbase:
5+
build:
6+
context: .
7+
dockerfile: Dockerfile-couchbase-server
8+
container_name: couchbase
9+
ports:
10+
- 9091-9094:8091-8094
11+
- 21210:11210
12+
volumes:
13+
- .docker/couchbase:/opt/couchbase/var
14+
15+
networks:
16+
- couchbase-network
17+
java-springboot-quickstart:
18+
build:
19+
context: .
20+
dockerfile: Dockerfile-java-springboot-quickstart
21+
container_name: java-springboot-quickstart
22+
ports:
23+
- 8080:8080
24+
depends_on:
25+
- couchbase
26+
networks:
27+
- couchbase-network
28+
29+
networks:
30+
couchbase-network:
31+
driver: bridge
32+
33+
34+
# environment:
35+
# - COUCHBASE_ADMINISTRATOR_USERNAME=admin
36+
# - COUCHBASE_ADMINISTRATOR_PASSWORD=password
37+
# - COUCHBASE_BUCKET_NAME=sample
38+
# - COUCHBASE_BUCKET_TYPE=couchbase
39+
# - COUCHBASE_BUCKET_RAM_SIZE=100
40+
# - COUCHBASE_BUCKET_REPLICA=1
41+
# - COUCHBASE_SERVICES=data,index,query,fts
42+
# - COUCHBASE_INDEX_STORAGE_SETTING=memopt
43+
# - COUCHBASE_MEMORY_QUOTA=300
44+
# - COUCHBASE_FTS_MEMORY_QUOTA=300
45+
# - COUCHBASE_EVENTING_MEMORY_QUOTA=300
46+
# - COUCHBASE_ANALYTICS_MEMORY_QUOTA=300
47+
# - COUCHBASE_PORT=8091
48+
# - COUCHBASE_QUERY_PORT=8093
49+
# - COUCHBASE_INDEX_PORT=8094
50+
# - COUCHBASE_FTS_PORT=8095
51+
# - COUCHBASE_EVENTING_PORT=8096
52+
# - COUCHBASE_ANALYTICS_PORT=8097
53+
# - COUCHBASE_SERVICES=data,index,query,fts
54+
# - COUCHBASE_INDEX_STORAGE_SETTING=memopt
55+
# - COUCHBASE_MEMORY_QUOTA=300
56+
# - COUCHBASE_FTS_MEMORY_QUOTA=300
57+
# - COUCHBASE_EVENTING_MEMORY_QUOTA=300
58+
# - COUCHBASE_ANALYTICS_MEMORY_QUOTA=300
59+
# - COUCHBASE_PORT=8091
60+
# - COUCHBASE_QUERY_PORT=8093
61+
# - COUCHBASE_INDEX_PORT=8094
62+
# - COUCHBASE_FTS_PORT=8095
63+
# - COUCHBASE_EVENTING_PORT=8096
64+
# - COUCHBASE_ANALYTICS_PORT=8097
65+
# - COUCHBASE_SERVICES=data,index,query,fts
66+
# - COUCHBASE_INDEX_STORAGE_SETTING=memopt
67+
# - COUCHBASE_MEMORY_QUOTA=300
68+
# - COUCHBASE_FTS_MEMORY_QUOTA=300
69+
# - COUCHBASE_EVENTING_MEMORY_QUOTA=300
70+
# - COUCHBASE_ANALYTICS_MEMORY_QUOTA=300

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
</dependencies>
106106

107107
<build>
108+
<finalName>java-springboot-quickstart</finalName>
108109
<plugins>
109110
<plugin>
110111
<groupId>org.apache.maven.plugins</groupId>

src/main/java/org/couchbase/quickstart/springboot/controllers/AirportController.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,18 @@ public ResponseEntity<List<Airport>> listAirports() {
8686
.rowsAs(Airport.class);
8787
return new ResponseEntity<>(airports, HttpStatus.OK);
8888
}
89+
90+
@GetMapping("/direct-connections")
91+
public ResponseEntity<List<Airport>> listDirectConnections(@RequestParam String airportCode) {
92+
String statement = "SELECT airport.* FROM `" + dbProperties.getBucketName()
93+
+ "`.`inventory`.`airport` as airport JOIN `" + dbProperties.getBucketName()
94+
+ "`.`inventory`.`route` as route on route.sourceairport = airport.faa WHERE airport.faa = \""
95+
+ airportCode + "\" and route.stops = 0";
96+
List<Airport> airports = cluster
97+
.query(statement, QueryOptions.queryOptions().scanConsistency(QueryScanConsistency.REQUEST_PLUS))
98+
.rowsAs(Airport.class);
99+
100+
return new ResponseEntity<>(airports, HttpStatus.OK);
101+
}
102+
89103
}

src/main/java/org/couchbase/quickstart/springboot/runners/DBSetupRunner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.couchbase.quickstart.runners;
1+
package org.couchbase.quickstart.springboot.runners;
22

33
import com.couchbase.client.core.error.*;
44
import com.couchbase.client.java.Bucket;

src/test/java/org/couchbase/quickstart/healthCheck/HealthCheckIntegrationTest.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,12 @@ public class HealthCheckIntegrationTest {
1818
private WebTestClient webTestClient;
1919

2020
@Test
21-
public void testHealthCheck()
22-
{
21+
public void testHealthCheck() {
2322
this.webTestClient.get()
24-
.uri("/api/v1/health")
25-
.accept(MediaType.APPLICATION_JSON)
26-
.exchange()
27-
.expectStatus().isOk()
28-
.expectHeader().contentType(MediaType.APPLICATION_JSON);
23+
.uri("/api/v1/health")
24+
.accept(MediaType.APPLICATION_JSON)
25+
.exchange()
26+
.expectStatus().isOk()
27+
.expectHeader().contentType(MediaType.APPLICATION_JSON);
2928
}
3029
}

0 commit comments

Comments
 (0)