Docker Compose up service container is up and running but swagger not working

Viewed 450

I am working on a core banking solution. I have two microservices that are called account-query-service and account-cmd-service. When I run docker-compose up, container are up and running, but swagger is not working for services. There is no problem for development side.

I can't see where the error is.

http://localhost:5002/swagger-ui.html

http://localhost:5003/swagger-ui.html

Here is Docker logs for account-cmd-service.

          .   ____          _            __ _ _

         /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \

        ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

         \\/  ___)| |_)| | | | | || (_| |  ) ) ) )

          '  |____| .__|_| |_|_| |_\__, | / / / /

         =========|_|==============|___/=/_/_/_/

         :: Spring Boot ::                (v2.6.4)


        2022-03-22 10:46:03.474  INFO 1 --- [           main] c.b.account.cmd.CommandApplication       : Starting CommandApplication using Java 11.0.4 on 52d897453453 with PID 1 (/usr/app/account.cmd-0.0.1-SNAPSHOT.jar started by root in /usr/app)

        2022-03-22 10:46:03.501  INFO 1 --- [           main] c.b.account.cmd.CommandApplication       : No active profile set, falling back to 1 default profile: "default"

        2022-03-22 10:46:06.266  INFO 1 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.

        2022-03-22 10:46:06.403  INFO 1 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 122 ms. Found 1 MongoDB repository interfaces.

        2022-03-22 10:46:07.971  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 5007 (http)

        2022-03-22 10:46:08.027  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]

        2022-03-22 10:46:08.028  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.58]

        2022-03-22 10:46:08.225  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext

        2022-03-22 10:46:08.226  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 4341 ms

        2022-03-22 10:46:08.815  INFO 1 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[cmddb:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms'}

        2022-03-22 10:46:09.084  INFO 1 --- [l'}-cmddb:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:2, serverValue:2}] to cmddb:27017

        2022-03-22 10:46:09.079  INFO 1 --- [l'}-cmddb:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:1}] to cmddb:27017

        2022-03-22 10:46:09.099  INFO 1 --- [l'}-cmddb:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=cmddb:27017, type=STANDALONE, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=13, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=97384900}

        2022-03-22 10:46:17.416  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 5007 (http) with context path ''

        2022-03-22 10:46:17.455  INFO 1 --- [           main] c.b.account.cmd.CommandApplication       : Started CommandApplication in 15.482 seconds (JVM running for 16.813)

enter image description here

enter image description here

        version: "3.4"

        services:

          customerdb:
            container_name: customerdb
            image: postgres
            environment:
             POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
             POSTGRES_USER: ${POSTGRES_USER:-postgres}
            volumes:
              - ./customer/postgres_init.sql:/docker-entrypoint-initdb.d/postgres_init.sql
            ports:
              - "5432:5432"
            restart: unless-stopped

          querydb:
            container_name: querydb
            image: postgres
            environment:
              POSTGRES_USER: ${POSTGRES_USER:-postgres}
              POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
            volumes:
              - ./account.query/postgres_init.sql:/docker-entrypoint-initdb.d/postgres_init.sql
            ports:
              - "5433:5432"
            restart: unless-stopped

          rabbitmq:
            container_name: "bank_rabbitmq"
            image: "rabbitmq:3.8-management"
            hostname: "rabbitmq"
            environment:
              RABBITMQ_DEFAULT_USER: "guest"
              RABBITMQ_DEFAULT_PASS: "guest"
              RABBITMQ_DEFAULT_VHOST: "/"
            ports:
              - "15672:15672"
              - "5672:5672"

          cmddb:
            container_name: "cmddb"
            image: mongo
            restart: always
            ports:
                - "27017:27017"

          customer-service:
            image: bank/customer-service-api
            container_name: customer-service
            build:
              context: ./customer
              dockerfile: Dockerfile
            ports:
              - "5000:5000"
            depends_on:
              - customerdb
            environment:
              - SPRING_DATASOURCE_URL=jdbc:postgresql://customerdb:5432/customerdb
              - SPRING_DATASOURCE_USERNAME=postgres
              - SPRING_DATASOURCE_PASSWORD=postgres

          account-cmd:
            image: bank/account-cmd-service-api
            container_name: account-cmd-service
            build:
              context: ./account.cmd
              dockerfile: Dockerfile
            ports:
              - "5002:5002"
            depends_on:
              - cmddb
            environment:
              - SPRING_DATA_MONGODB_HOST=cmddb
              - SPRING_DATA_MONGODB_PORT=27017
              - SPRING_DATA_MONGODB_DATABASE=accountcmdb
              - SPRING_RABBITMQ_HOST=rabbitmq
              - SPRING_RABBITMQ_PORT=5672
              - SPRING_RABBITMQ_USERNAME=guest
              - SPRING_RABBITMQ_PASSWORD=guest

          account-query:
            image: bank/account-query-service-api
            container_name: account-query-service
            build:
              context: ./account.query
              dockerfile: Dockerfile
            ports:
              - "5003:5003"
            depends_on:
              - querydb
            environment:
              - SPRING_DATASOURCE_URL=jdbc:postgresql://querydb:5433/accountingdb
              - SPRING_DATASOURCE_USERNAME=postgres
              - SPRING_DATASOURCE_PASSWORD=postgres
              - SPRING_RABBITMQ_HOST=rabbitmq
              - SPRING_RABBITMQ_PORT=5672
              - SPRING_RABBITMQ_USERNAME=guest
              - SPRING_RABBITMQ_PASSWORD=guest

        volumes:
          customerdb:
          cmddb:
          querydb:

I would be very happy if someone could help. Here is my github repository.

https://github.com/dogaanismail/bank-solution

1 Answers

I have just found my mistake that I never thought of. I should have been more careful when I was coding rest apis.

You have to specify your rest api mapping for swagger.

@PostMapping or @GetMapping have to be specified.

For instance;

Here is a mistake implementations.

        @PostMapping
    public ResponseEntity openAccount(@RequestBody AccountCreateRequest accountCreateRequest) {

        OpenAccountCommand command = ObjectMapperUtils.map(accountCreateRequest, OpenAccountCommand.class);
        var id = UUID.randomUUID().toString();
        command.setId(id);

        try {
            return ResponseEntity.ok(commandDispatcher.send(command));
        } catch (Exception e) {
            var safeErrorMessage = MessageFormat.format("Error while processing - {0}.", e.toString());
            logger.log(Level.SEVERE, safeErrorMessage, e);
            return new ResponseEntity<>(new ErrorResponse(safeErrorMessage, id), HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

I change the implementation to this.

        @PostMapping("/openAccount")
    public ResponseEntity openAccount(@RequestBody AccountCreateRequest accountCreateRequest) {

        OpenAccountCommand command = ObjectMapperUtils.map(accountCreateRequest, OpenAccountCommand.class);
        var id = UUID.randomUUID().toString();
        command.setId(id);

        try {
            return ResponseEntity.ok(commandDispatcher.send(command));
        } catch (Exception e) {
            var safeErrorMessage = MessageFormat.format("Error while processing - {0}.", e.toString());
            logger.log(Level.SEVERE, safeErrorMessage, e);
            return new ResponseEntity<>(new ErrorResponse(safeErrorMessage, id), HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

enter image description here

Related