Skip to main content

Developer Resources

Deploy Spring Java Backend APIs​

Build Deploy with Docker​

Pre-Requisites​

  • Install and setup
    • Docker Desktop
    • Configure to use Kubernetes via Settings : Kubernetes : Enable Kubernetes

Note: On Windows Run CMD as Administrator. Also for docker compose to work properly, use linux engine, e.g. via below command.

"C:\Program Files\Docker\Docker"\DockerCli.exe -SwitchLinuxEngine
  • Tip: On Win: With Docker: High Memory Used by VmmemWSL and Freeing Up Memory

The VmmemWSL is a process running on the background of your computer which support virtual machine usage on your computer.

  • Shutdown via CMD - Administrator Mode wsl --shutdown

Build and Run One Project​

  • Locate your project
    • <PROJECTDIR> is referenced as project folder, locate dir backend\spring-java\emapi
cd <PROJECTDIR>
dbrest REST APIs​
cd app\dbrest
type Dockerfile | docker build -t dbrest .

List the available docker images:

docker image ls -a

Start container and run image:

docker run -it -p9080:9080 dbrest
dbgraphql GraphQL APIs​
cd app\dbgraphql
type Dockerfile | docker build -t dbgraphql .

List the available docker images:

docker image ls -a

Start container and run image:

docker run -it -p9070:9070 dbgraphql

Build and Run Both Project: dbrest & dbgraphql​

  • Check/verify build-file
cd <PROJECTDIR>
docker-compose config
  • Build images, create the containers, and start them:
docker-compose up --build
  • Stop the containers
docker-compose down

Testing​

tests UT Unit Tests, IT Integration Tests​

Below are generated in code generation stage,

  • tests Unit Tests
  • tests Integration Tests

UT Unit Tests​

Using JUnit, Mockito, Mock. Annotations @Test

IT Integration Tests​

Using JUnit, Mockito, MockMvc. Annotations @SpringBootTest, @Test

Enabling Tests​

Please enable in Builder Studio: Spring Java Project Configure Flags:

  • tests UT Unit Tests, IT Integration Tests : Enable ✅

Test source locations:

  • tests Unit Tests
    • emapi\**\test\**\*UTest.java
  • tests Integration Tests
    • emapi\**\test\**\*ITest.java

Then generated tests will be enabled and can be executed in builds. Test reports in XML format are generated by default.

Running Tests​

  • Run tests : Build project - verify
    • mvn clean verify
    • Generates test execution data
info

Make sure below values are set in emapi\pom.xml

        <!-- skip unit tests custom property -->
<skipUTs>false</skipUTs>

<!-- skip integration tests maven failsafe property -->
<skipITs>false</skipITs>

<!-- skip testNG API tests maven failsafe property for testApi -->
<skipATs>true</skipATs>

Testing Reports HTML​

Test Reports HTML can be generated with maven-surefire-report-plugin via below maven goals, after running tests:

  • Generate surefire report for unit tests:

    • mvn surefire-report:report-only -Daggregate=true
    • Report is generated at emapi\target\site\surefire-report.html
  • Generate failsafe report for integration tests:

    • mvn surefire-report:failsafe-report-only -Daggregate=true
    • Report is generated at emapi\target\site\failsafe-report.html

Info: Below plugin is used to generate report with surefire-report

            <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>3.2.5</version>
</plugin>

tests API Tests - TestNG, WebClient​

API testing with TestNG, WebTestClient.

TestNG tests are executed and its report generated in maven build. Test Reports HTML is generated by default.

Below are generated in code generation stage,

  • API Tests - TestNG, WebClient

tests API Tests - TestNG, WebClient​

Using TestNG, WebClient. Annotations @Test

Including Tests in Generation​

Please Include in Builder Studio: Spring Java Project Configure Flags:

  • tests API Tests - TestNG, WebClient : Include ✅

Then generated tests will be available and can be manually enabled and executed.

Enabling and Executing Tests​

info

Please note below:

  • API Tests are organized in separate spring sub-module testApi

  • They are generated but need to enable/run manually by following below mentioned steps.

  • Build project emapi with maven goal install

    • Note:
    • If using Versions: Spring Boot 2 and Java 8, then:
    • Edit emapi\pom.xml, set values as below for build goal install
    • <skipTests>true</skipTests>
  • Need to run dbrest and dbgraphql APIs in separate windows commands.

  • Maven install will install/copy snapshot jars to local repository, which will be used when running API tests:

dir /b /s C:\Users\JohnDoe\.m2\repository\com\example\emapi :

...
C:\Users\JohnDoe\.m2\repository\com\example\emapi\dbgraphql\1.0-SNAPSHOT\dbgraphql-1.0-SNAPSHOT.jar
C:\Users\JohnDoe\.m2\repository\com\example\emapi\dbgraphql\1.0-SNAPSHOT\dbgraphql-1.0-SNAPSHOT.pom
...
C:\Users\JohnDoe\.m2\repository\com\example\emapi\dbrest\1.0-SNAPSHOT\dbrest-1.0-SNAPSHOT.jar
C:\Users\JohnDoe\.m2\repository\com\example\emapi\dbrest\1.0-SNAPSHOT\dbrest-1.0-SNAPSHOT.pom
...

Running Tests​

Run tests from project module levels for testApi.

First,

  • Edit emapi\pom.xml, set values as below
        <!-- skip unit tests custom property -->
<skipUTs>false</skipUTs>

<!-- skip integration tests maven failsafe property -->
<skipITs>false</skipITs>

<!-- skip testNG API tests maven failsafe property for testApi -->
<skipATs>false</skipATs>
  • dbrestTest - Test source locations:
  • emapi\testApi\dbrestTest\src\test\java\testapi\*\*RestApiATest.java
  • dbgraphqlTest - Test source locations:
  • emapi\testApi\dbgraphqlTest\src\test\java\testapi\*\*GraphqlApiATest.java

Run tests with project module level maven goal from IDE or command line as below:

cd emapi\testApi
mvn -pl dbrestTest verify
mvn -pl dbgraphqlTest verify

Aggregate API Tests Report:

mvn surefire-report:failsafe-report-only -Daggregate=true

Testing Reports HTML​

Test reports in HTML format are generated by default at locations:

  • dbrestTest - Test Report HTML:
    • emapi\testApi\dbrestTest\target\failsafe-reports\index.html
    • emapi\testApi\dbrestTest\target\failsafe-reports\emailable-report.html
  • dbgraphqlTest - Test Report HTML:
    • emapi\testApi\dbgraphqlTest\target\failsafe-reports\index.html
    • emapi\testApi\dbgraphqlTest\target\failsafe-reports\emailable-report.html
    • Note: If using Spring Boot 2 and Java 8, then location is at:
    • emapi\testApi\dbgraphqlTest\target\surefire-reports\index.html

Aggregate Test report for both above in HTML format is at location:

  • emapi\testApi\target\site\failsafe-report.html

Code Analysis - Code Coverage, Code Quality​

Do static source code analysis, find code coverage and ensure code quality with SonarQube.

Now available with Project Settings Configuration Selection via Builder Studio.

  • Previously available with EasyManage Templates : Backend Templates : Code Coverage Analysis. Pease find it here Backend Templates

SonarQube - Features​

  • SonarQube a code quality and security solution that integrates into your CI/CD, and enables you to deploy clean code.
  • Static Code Analysis | SAST
    • Sonar's SAST (static application security testing) engine detects security vulnerabilities in your code. So they can be eliminated before hand.

Generating Code Coverage Locally with JaCoCo, Sonar Scanner​

Note: In root level pom.xml Set properties.

  • Edit emapi\pom.xml verify/set below properties to false
  • <sonar.skip> , <jacoco.skip>, <skipITs>, <skipUTs>
  • Run maven goal
mvn clean verify

Local Code Coverage Reports are generated.

  • A separate coverage report will be generated for each module.
  • Also Aggregate Report of all the module-specific reports into one project-level report is generated at:
    • emapi\coverage\target\site\jacoco-aggregate\index.html

Code Analysis with SonarQube​

How to run SonarQube Locally From Docker​

Note: Use SonarQube Ver 8.9 for JDK 8 compatibility

docker pull sonarqube:8.9-community
docker run -d --name sonarqube -p 9000:9000 sonarqube:8.9-community

View SonarQube Landing Page and later on Reports​

  • Go to: http://localhost:9000/

  • First time: Login passowrd change will be required

  • Use new password in place of admin below for mvn sonar:sonar command

How to Analyze Source Code with SonarQube via mvn goal​

  • Run maven goal
mvn clean verify sonar:sonar -Dsonar.login=admin -Dsonar.password=admin

After completing, view the results will be available on the SonarQube Projects dashboard

  • http://localhost:9000

Build, Deploy Misc Help & Tips​

  • View Maven Dependency

  • View Junit version and other dependencies for spring-boot-starter-test: In IntelliJ you can do this by Ctrl + click onto pom.xml artifactId : spring-boot-starter-test

  • View Maven Dependency via Run Maven Goals

CAUTION: Re-download of dependencies may take place, while using below commands.

  • Show the project dependencies mvn dependency:tree

  • Show plugin dependency tree for each plugin mvn dependency:resolve-plugins