Last active
February 21, 2025 19:11
-
-
Save RajaniCode/9b8e54f9d089c676436357212cbb36fa to your computer and use it in GitHub Desktop.
Gradle Kotlin Groovy Maven Java Spring Boot Spring MVC Spring Data JPA Spring JPA Hibernate Docker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
########################################################################################################################### | |
# Gradle # Kotlin # Groovy # Maven # Java # Spring Boot # Spring Web # Spring MVC # Spring Data JPA # Spring JPA Hibernate # Docker | |
########################################################################################################################### | |
*************************************************************************************************************************** | |
# Gradle # Kotlin # Java # Spring Boot # gradle init | |
*************************************************************************************************************************** | |
# Java 23.0.2 # Gradle 8.12.1 | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/Gradle/gradle-8.12.1/bin/":$PATH | |
% java --version | |
% gradle --version | |
% mkdir -p Gradle/Kotlin/sample | |
% cd Gradle/Kotlin/sample | |
# Java 23 | |
% gradle init | |
% tree | |
[ | |
. | |
├── app | |
│ ├── build.gradle.kts | |
│ └── src | |
│ ├── main | |
│ │ ├── java | |
│ │ │ └── org | |
│ │ │ └── example | |
│ │ │ └── App.java | |
│ │ └── resources | |
│ └── test | |
│ ├── java | |
│ │ └── org | |
│ │ └── example | |
│ │ └── AppTest.java | |
│ └── resources | |
├── gradle | |
│ ├── libs.versions.toml | |
│ └── wrapper | |
│ ├── gradle-wrapper.jar | |
│ └── gradle-wrapper.properties | |
├── gradle.properties | |
├── gradlew | |
├── gradlew.bat | |
└── settings.gradle.kts | |
15 directories, 10 files | |
] | |
% cat settings.gradle.kts | |
[ | |
/* | |
* This file was generated by the Gradle 'init' task. | |
* | |
* The settings file is used to specify which projects to include in your build. | |
* For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.12.1/userguide/multi_project_builds.html in the Gradle documentation. | |
*/ | |
plugins { | |
// Apply the foojay-resolver plugin to allow automatic download of JDKs | |
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" | |
} | |
rootProject.name = "sample" | |
include("app") | |
] | |
% cat app/build.gradle.kts | |
[ | |
/* | |
* This file was generated by the Gradle 'init' task. | |
* | |
* This generated file contains a sample Java application project to get you started. | |
* For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.12.1/userguide/building_java_projects.html in the Gradle documentation. | |
*/ | |
plugins { | |
// Apply the application plugin to add support for building a CLI application in Java. | |
application | |
} | |
repositories { | |
// Use Maven Central for resolving dependencies. | |
mavenCentral() | |
} | |
dependencies { | |
// Use JUnit Jupiter for testing. | |
testImplementation(libs.junit.jupiter) | |
testRuntimeOnly("org.junit.platform:junit-platform-launcher") | |
// This dependency is used by the application. | |
implementation(libs.guava) | |
} | |
// Apply a specific Java toolchain to ease working on different environments. | |
java { | |
toolchain { | |
languageVersion = JavaLanguageVersion.of(23) | |
} | |
} | |
application { | |
// Define the main class for the application. | |
mainClass = "org.example.App" | |
} | |
tasks.named<Test>("test") { | |
// Use JUnit Platform for unit tests. | |
useJUnitPlatform() | |
} | |
] | |
% cat app/src/main/java/org/example/App.java | |
[ | |
/* | |
* This source file was generated by the Gradle 'init' task | |
*/ | |
package org.example; | |
public class App { | |
public String getGreeting() { | |
return "Hello World!"; | |
} | |
public static void main(String[] args) { | |
System.out.println(new App().getGreeting()); | |
} | |
} | |
] | |
% cat app/src/test/java/org/example/AppTest.java | |
/* | |
* This source file was generated by the Gradle 'init' task | |
*/ | |
package org.example; | |
import org.junit.jupiter.api.Test; | |
import static org.junit.jupiter.api.Assertions.*; | |
class AppTest { | |
@Test void appHasAGreeting() { | |
App classUnderTest = new App(); | |
assertNotNull(classUnderTest.getGreeting(), "app should have a greeting"); | |
} | |
} | |
% ./gradlew run | |
% ./gradlew build | |
# yes | |
% ./gradlew build --scan | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/app/build/reports/tests/test --port 8000 | |
# Terminal New Window | |
% curl http://127.0.0.1:8000/ | |
% open http://127.0.0.1:8000/ | |
*************************************************************************************************************************** | |
# Gradle # Groovy # Java # Spring Boot # gradle init | |
*************************************************************************************************************************** | |
# Java 23.0.2 # Gradle 8.12.1 | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/Gradle/gradle-8.12.1/bin/":$PATH | |
% java --version | |
% gradle --version | |
% mkdir -p Gradle/Groovy/sample | |
% cd Gradle/Groovy/sample | |
# Java 23 # 2: Groovy | |
% gradle init | |
[ | |
Select type of build to generate: | |
1: Application | |
2: Library | |
3: Gradle plugin | |
4: Basic (build structure only) | |
Enter selection (default: Application) [1..4] | |
Select implementation language: | |
1: Java | |
2: Kotlin | |
3: Groovy | |
4: Scala | |
5: C++ | |
6: Swift | |
Enter selection (default: Java) [1..6] | |
Enter target Java version (min: 7, default: 21): 23 | |
Project name (default: sample): | |
Select application structure: | |
1: Single application project | |
2: Application and library project | |
Enter selection (default: Single application project) [1..2] | |
Select build script DSL: | |
1: Kotlin | |
2: Groovy | |
Enter selection (default: Kotlin) [1..2] 2 | |
Select test framework: | |
1: JUnit 4 | |
2: TestNG | |
3: Spock | |
4: JUnit Jupiter | |
Enter selection (default: JUnit Jupiter) [1..4] | |
Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] | |
> Task :init | |
Learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.12.1/samples/sample_building_java_applications.html | |
BUILD SUCCESSFUL in 53s | |
1 actionable task: 1 executed | |
] | |
% tree | |
[ | |
. | |
├── app | |
│ ├── build.gradle | |
│ └── src | |
│ ├── main | |
│ │ ├── java | |
│ │ │ └── org | |
│ │ │ └── example | |
│ │ │ └── App.java | |
│ │ └── resources | |
│ └── test | |
│ ├── java | |
│ │ └── org | |
│ │ └── example | |
│ │ └── AppTest.java | |
│ └── resources | |
├── gradle | |
│ ├── libs.versions.toml | |
│ └── wrapper | |
│ ├── gradle-wrapper.jar | |
│ └── gradle-wrapper.properties | |
├── gradle.properties | |
├── gradlew | |
├── gradlew.bat | |
└── settings.gradle | |
15 directories, 10 files | |
] | |
% cat settings.gradle | |
[ | |
/* | |
* This file was generated by the Gradle 'init' task. | |
* | |
* The settings file is used to specify which projects to include in your build. | |
* For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.12.1/userguide/multi_project_builds.html in the Gradle documentation. | |
*/ | |
plugins { | |
// Apply the foojay-resolver plugin to allow automatic download of JDKs | |
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' | |
} | |
rootProject.name = 'sample' | |
include('app') | |
] | |
% cat app/build.gradle | |
[ | |
/* | |
* This file was generated by the Gradle 'init' task. | |
* | |
* This generated file contains a sample Java application project to get you started. | |
* For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.12.1/userguide/building_java_projects.html in the Gradle documentation. | |
*/ | |
plugins { | |
// Apply the application plugin to add support for building a CLI application in Java. | |
id 'application' | |
} | |
repositories { | |
// Use Maven Central for resolving dependencies. | |
mavenCentral() | |
} | |
dependencies { | |
// Use JUnit Jupiter for testing. | |
testImplementation libs.junit.jupiter | |
testRuntimeOnly 'org.junit.platform:junit-platform-launcher' | |
// This dependency is used by the application. | |
implementation libs.guava | |
} | |
// Apply a specific Java toolchain to ease working on different environments. | |
java { | |
toolchain { | |
languageVersion = JavaLanguageVersion.of(23) | |
} | |
} | |
application { | |
// Define the main class for the application. | |
mainClass = 'org.example.App' | |
} | |
tasks.named('test') { | |
// Use JUnit Platform for unit tests. | |
useJUnitPlatform() | |
} | |
] | |
% cat app/src/main/java/org/example/App.java | |
[ | |
/* | |
* This source file was generated by the Gradle 'init' task | |
*/ | |
package org.example; | |
public class App { | |
public String getGreeting() { | |
return "Hello World!"; | |
} | |
public static void main(String[] args) { | |
System.out.println(new App().getGreeting()); | |
} | |
} | |
] | |
% cat app/src/test/java/org/example/AppTest.java | |
[ | |
/* | |
* This source file was generated by the Gradle 'init' task | |
*/ | |
package org.example; | |
import org.junit.jupiter.api.Test; | |
import static org.junit.jupiter.api.Assertions.*; | |
class AppTest { | |
@Test void appHasAGreeting() { | |
App classUnderTest = new App(); | |
assertNotNull(classUnderTest.getGreeting(), "app should have a greeting"); | |
} | |
} | |
] | |
% ./gradlew run | |
% ./gradlew build | |
# yes | |
% ./gradlew build --scan | |
% jwebserver --directory $(pwd)/app/build/reports/tests/test --port 8000 | |
# Terminal New Window | |
% curl http://127.0.0.1:8000/ | |
% open http://127.0.0.1:8000/ | |
*************************************************************************************************************************** | |
########################################################################################################################### | |
########################################################################################################################### | |
# Gradle # Groovy # Kotlin # Maven # Java # Spring Web | |
########################################################################################################################### | |
*************************************************************************************************************************** | |
% mkdir -p sample | |
% cd sample | |
# By default, Maven and Gradle compile sources from src/main/java and src/test/java | |
[ | |
. | |
└── src | |
├── main | |
│ └── java | |
│ └── com | |
│ └── commons | |
│ └── project | |
└── test | |
└── java | |
└── com | |
└── commons | |
└── project | |
] | |
% mkdir -p src/main/java/com/commons/project | |
% ls src/main/java/com/commons/project | |
% mkdir -p src/test/java/com/commons/project | |
% ls src/test/java/com/commons/project | |
% mkdir -p src/main/resources | |
% ls src/main/resources | |
% nano src/main/resources/application.properties | |
[ | |
# Enable the /actuator/shutdown as an HTTP endpoint visible only through JMX by default | |
! management.endpoint.shutdown.enabled=true | |
# Expose the /actuator/shutdown HTTP endpoint | |
! management.endpoints.web.exposure.include=health,info,shutdown | |
] | |
% cat src/main/resources/application.properties | |
% nano settings.gradle | |
[ | |
rootProject.name = 'sample' | |
] | |
% cat settings.gradle | |
% nano build.gradle | |
[ | |
plugins { | |
id 'java' | |
id 'org.springframework.boot' version '3.4.2' | |
id 'io.spring.dependency-management' version '1.1.7' | |
} | |
group = 'com.commons.project' | |
version = '1.0-SNAPSHOT' | |
java { | |
toolchain { | |
languageVersion = JavaLanguageVersion.of(23) | |
} | |
} | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
// tag::actuator[] | |
implementation 'org.springframework.boot:spring-boot-starter-actuator' | |
// end::actuator[] | |
implementation 'org.springframework.boot:spring-boot-starter-web' | |
// tag::tests[] | |
testImplementation('org.springframework.boot:spring-boot-starter-test') | |
// end::tests[] | |
} | |
tasks.named('test') { | |
useJUnitPlatform() | |
} | |
] | |
% cat build.gradle | |
% nano pom.xml | |
[ | |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<parent> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-parent</artifactId> | |
<version>3.4.2</version> | |
<relativePath/> | |
</parent> | |
<groupId>com.commons.project</groupId> | |
<artifactId>sample</artifactId> | |
<version>1.0-SNAPSHOT</version> | |
<name>sample</name> | |
<description>Spring Boot Spring Web Maven</description> | |
<properties> | |
<java.version>23</java.version> | |
</properties> | |
<dependencies> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-web</artifactId> | |
</dependency> | |
<!-- tag::actuator[] --> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-actuator</artifactId> | |
</dependency> | |
<!-- end::actuator[] --> | |
<!-- tag::tests[] --> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-test</artifactId> | |
<scope>test</scope> | |
</dependency> | |
<!-- end::tests[] --> | |
</dependencies> | |
<build> | |
<plugins> | |
<plugin> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-maven-plugin</artifactId> | |
</plugin> | |
</plugins> | |
</build> | |
<reporting> | |
<plugins> | |
<plugin> | |
<groupId>org.apache.maven.plugins</groupId> | |
<artifactId>maven-jxr-plugin</artifactId> | |
<version>3.6.0</version> | |
<reportSets> | |
<reportSet> | |
<reports> | |
<report>jxr-no-fork</report> | |
<report>test-jxr-no-fork</report> | |
</reports> | |
</reportSet> | |
</reportSets> | |
</plugin> | |
</plugins> | |
</reporting> | |
</project> | |
] | |
% cat pom.xml | |
% nano src/main/java/com/commons/project/Application.java | |
[ | |
package com.commons.project; | |
import java.util.Arrays; | |
import org.springframework.boot.CommandLineRunner; | |
import org.springframework.boot.SpringApplication; | |
import org.springframework.boot.autoconfigure.SpringBootApplication; | |
import org.springframework.context.ApplicationContext; | |
import org.springframework.context.annotation.Bean; | |
@SpringBootApplication | |
public class Application { | |
public static void main(String[] args) { | |
SpringApplication.run(Application.class, args); | |
} | |
@Bean | |
public CommandLineRunner commandLineRunner(ApplicationContext ctx) { | |
return args -> { | |
System.out.println("Let's inspect the beans provided by Spring Boot:"); | |
String[] beanNames = ctx.getBeanDefinitionNames(); | |
Arrays.sort(beanNames); | |
for (String beanName : beanNames) { | |
System.out.println(beanName); | |
} | |
}; | |
} | |
} | |
] | |
% cat src/main/java/com/commons/project/Application.java | |
% nano src/main/java/com/commons/project/JavaRestController.java | |
[ | |
package com.commons.project; | |
import org.springframework.web.bind.annotation.GetMapping; | |
import org.springframework.web.bind.annotation.RestController; | |
@RestController | |
public class JavaRestController { | |
@GetMapping("/") | |
public String index() { | |
String systemProperties = String.format("OS Name: %s OS Version: %s OS Architecture: %s Java Version: %s Spring Version: %s", | |
System.getProperty("os.name"), | |
System.getProperty("os.version"), | |
System.getProperty("os.arch"), | |
System.getProperty("java.version"), | |
org.springframework.core.SpringVersion.getVersion() | |
); | |
System.out.println(systemProperties); | |
// System.getProperties().list(System.out); | |
return systemProperties; | |
} | |
} | |
] | |
% cat src/main/java/com/commons/project/JavaRestController.java | |
% nano src/test/java/com/commons/project/ApplicationTests.java | |
[ | |
package com.commons.project; | |
import static org.assertj.core.api.Assertions.assertThat; | |
import org.junit.jupiter.api.Test; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.boot.test.context.SpringBootTest; | |
@SpringBootTest | |
class ApplicationTests { | |
@Autowired | |
private JavaRestController controller; | |
@Test | |
void contextLoads() throws Exception { | |
assertThat(controller).isNotNull(); | |
} | |
} | |
] | |
% cat src/test/java/com/commons/project/ApplicationTests.java | |
% nano src/test/java/com/commons/project/JavaRestControllerTest.java | |
[ | |
package com.commons.project; | |
import static org.hamcrest.Matchers.equalTo; | |
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; | |
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; | |
import org.junit.jupiter.api.Test; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; | |
import org.springframework.boot.test.context.SpringBootTest; | |
import org.springframework.http.MediaType; | |
import org.springframework.test.web.servlet.MockMvc; | |
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; | |
@SpringBootTest | |
@AutoConfigureMockMvc | |
public class JavaRestControllerTest { | |
private String systemProperties = String.format("OS Name: %s OS Version: %s OS Architecture: %s Java Version: %s Spring Version: %s", | |
System.getProperty("os.name"), | |
System.getProperty("os.version"), | |
System.getProperty("os.arch"), | |
System.getProperty("java.version"), | |
org.springframework.core.SpringVersion.getVersion() | |
); | |
@Autowired | |
private MockMvc mvc; | |
@Test | |
public void getHello() throws Exception { | |
mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON)) | |
.andExpect(status().isOk()) | |
.andExpect(content().string(equalTo(systemProperties))); | |
} | |
} | |
] | |
% cat src/test/java/com/commons/project/JavaRestControllerTest.java | |
% nano src/test/java/com/commons/project/JavaRestControllerIntegrationTest.java | |
[ | |
package com.commons.project; | |
import org.junit.jupiter.api.Test; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.boot.test.context.SpringBootTest; | |
import org.springframework.boot.test.web.client.TestRestTemplate; | |
import org.springframework.http.ResponseEntity; | |
import static org.assertj.core.api.Assertions.assertThat; | |
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) | |
public class JavaRestControllerIntegrationTest { | |
private String systemProperties = String.format("OS Name: %s OS Version: %s OS Architecture: %s Java Version: %s Spring Version: %s", | |
System.getProperty("os.name"), | |
System.getProperty("os.version"), | |
System.getProperty("os.arch"), | |
System.getProperty("java.version"), | |
org.springframework.core.SpringVersion.getVersion() | |
); | |
@Autowired | |
private TestRestTemplate template; | |
@Test | |
public void getHello() throws Exception { | |
ResponseEntity<String> response = template.getForEntity("/", String.class); | |
assertThat(response.getBody()).isEqualTo(systemProperties); | |
} | |
} | |
] | |
% cat src/test/java/com/commons/project/JavaRestControllerIntegrationTest.java | |
% tree | |
. | |
├── build.gradle | |
├── pom.xml | |
├── settings.gradle | |
└── src | |
├── main | |
│ ├── java | |
│ │ └── com | |
│ │ └── commons | |
│ │ └── project | |
│ │ ├── Application.java | |
│ │ └── JavaRestController.java | |
│ └── resources | |
│ └── application.properties | |
└── test | |
└── java | |
└── com | |
└── commons | |
└── project | |
├── ApplicationTests.java | |
├── JavaRestControllerIntegrationTest.java | |
└── JavaRestControllerTest.java | |
13 directories, 9 files | |
*************************************************************************************************************************** | |
# Terminal Window # Spring Web # Maven Wrapper | |
************************************************************************************************************************ | |
[ | |
% cd sample | |
] | |
# Java 23.0.2 # Apache Maven 3.9.9 | |
% export JAVA_HOME="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home" | |
% export M2_HOME="$HOME/Downloads/Software/ApacheMaven/apache-maven-3.9.9" | |
% export M2="$M2_HOME/bin" | |
% export PATH=$PATH:"$M2:$JAVA_HOME/bin" | |
[ | |
% export MAVEN_OPTS="-Xms256m -Xmx512m --enable-preview" | |
] | |
% export MAVEN_OPTS="-Xms256m -Xmx512m" | |
# Or | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/ApacheMaven/apache-maven-3.9.9/bin/":$PATH | |
% java --version | |
% mvn --version | |
% mvn wrapper:wrapper | |
[ | |
% ./mvnw clean | |
] | |
% ./mvnw spring-boot:run | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/ | |
% open http://localhost:8080/ | |
[ | |
# Check the health of the application | |
% curl http://localhost:8080/actuator/health | |
{"status":"UP"} | |
% open http://localhost:8080/actuator/health | |
# Invoke shutdown through curl by commenting out the application.properties | |
% curl -X POST http://localhost:8080/actuator/shutdown | |
{"timestamp":1401820343710,"error":"Not Found","status":404,"message":"","path":"/actuator/shutdown"} | |
# Invoke shutdown through curl by uncommenting the application.properties | |
% curl -X POST http://localhost:8080/actuator/shutdown | |
{"message":"Shutting down, bye..."} | |
] | |
# Terminal Window # Spring Web # Maven Wrapper | |
<control + c> | |
[ | |
% ./mvnw clean | |
] | |
% ./mvnw package | |
% java -jar target/sample-1.0-SNAPSHOT.jar | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/ | |
% open http://localhost:8080/ | |
% curl http://localhost:8080/actuator/health | |
% open http://localhost:8080/actuator/health | |
% curl -X POST http://localhost:8080/actuator/shutdown | |
# Spring Web # Maven Wrapper # Surefire Report | |
# Terminal Window # Spring Web # Maven Wrapper | |
[ | |
<control + c> | |
% ./mvnw test | |
] | |
% ./mvnw surefire-report:report | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/target/reports --port 8000 | |
# Terminal Window # curl # open | |
% curl http://127.0.0.1:8000/surefire.html | |
% open http://127.0.0.1:8000/surefire.html | |
************************************************************************************************************************ | |
# Terminal Window # Spring Web # Gradle Wrapper # Groovy | |
************************************************************************************************************************ | |
[ | |
% cd sample | |
] | |
# Java 23.0.2 # Gradle 8.12 | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/Gradle/gradle-8.12/bin/":$PATH | |
% java --version | |
% gradle --version | |
% gradle wrapper | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew bootRun | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/ | |
% open http://localhost:8080/ | |
% curl http://localhost:8080/actuator/health | |
% open http://localhost:8080/actuator/health | |
% curl -X POST http://localhost:8080/actuator/shutdown | |
# Terminal Window # Spring Web # Gradle Wrapper # Groovy | |
[ | |
<control + c> | |
% ./gradlew clean | |
] | |
% ./gradlew build | |
% java -jar build/libs/sample-1.0-SNAPSHOT.jar | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/ | |
% open http://localhost:8080/ | |
% curl http://localhost:8080/actuator/health | |
% open http://localhost:8080/actuator/health | |
% curl -X POST http://localhost:8080/actuator/shutdown | |
# Terminal Window # Spring Web # Gradle Wrapper # Groovy # Reports | |
[ | |
<control + c> | |
% ./gradlew clean | |
% ./gradlew build | |
] | |
# yes | |
% ./gradlew build --scan | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/build/reports/tests/test --port 8000 | |
# Terminal Window # curl # open | |
% curl http://127.0.0.1:8000/ | |
% open http://127.0.0.1:8000/ | |
*************************************************************************************************************************** | |
# Terminal Window # Spring Web # Gradle Wrapper # Kotlin | |
************************************************************************************************************************ | |
[ | |
% mkdir -p Maven; mkdir -p Gradle/Kotlin; mkdir -p Gradle/Groovy | |
% cp -r sample Maven | |
% cp -r sample Gradle/Groovy | |
% mv sample Gradle/Kotlin | |
% cd Gradle/Kotlin/sample | |
] | |
% rm -rf gradle gradlew gradlew.bat settings.gradle build.gradle build .gradle | |
% nano settings.gradle.kts | |
[ | |
rootProject.name = "sample" | |
] | |
% cat settings.gradle.kts | |
% nano build.gradle.kts | |
[ | |
plugins { | |
java | |
id("org.springframework.boot") version "3.4.2" | |
id("io.spring.dependency-management") version "1.1.7" | |
} | |
group = "com.commons.project" | |
version = "1.0-SNAPSHOT" | |
java { | |
toolchain { | |
languageVersion = JavaLanguageVersion.of(23) | |
} | |
} | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
// tag::actuator[] | |
implementation("org.springframework.boot:spring-boot-starter-actuator") | |
// end::actuator[] | |
implementation("org.springframework.boot:spring-boot-starter-web") | |
// tag::tests[] | |
testImplementation("org.springframework.boot:spring-boot-starter-test") | |
// end::tests[] | |
} | |
tasks.withType<Test> { | |
useJUnitPlatform() | |
} | |
] | |
% cat build.gradle.kts | |
# Java 23.0.2 # Gradle 8.12 | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/Gradle/gradle-8.12/bin/":$PATH | |
% java --version | |
% gradle --version | |
% gradle wrapper | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew bootRun | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/ | |
% open http://localhost:8080/ | |
% curl http://localhost:8080/actuator/health | |
% open http://localhost:8080/actuator/health | |
% curl -X POST http://localhost:8080/actuator/shutdown | |
# Terminal Window # Spring MVC # Gradle Wrapper # Kotlin | |
[ | |
<control + c> | |
% ./gradlew clean | |
] | |
% ./gradlew build | |
% java -jar build/libs/sample-1.0-SNAPSHOT.jar | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/ | |
% open http://localhost:8080/ | |
% curl http://localhost:8080/actuator/health | |
% open http://localhost:8080/actuator/health | |
% curl -X POST http://localhost:8080/actuator/shutdown | |
# Terminal Window # Spring MVC # Gradle Wrapper # Kotlin # Reports | |
[ | |
<control + c> | |
% ./gradlew clean | |
% ./gradlew build | |
] | |
# yes | |
% ./gradlew build --scan | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/build/reports/tests/test --port 8000 | |
# Terminal Window # curl # open | |
% curl http://127.0.0.1:8000/ | |
% open http://127.0.0.1:8000/ | |
*************************************************************************************************************************** | |
########################################################################################################################### | |
########################################################################################################################### | |
# Gradle # Groovy # Kotlin # Maven # Java # Spring MVC | |
########################################################################################################################### | |
*************************************************************************************************************************** | |
. | |
├── build.gradle | |
├── pom.xml | |
├── settings.gradle | |
└── src | |
├── main | |
│ ├── java | |
│ │ └── com | |
│ │ └── commons | |
│ │ └── project | |
│ │ ├── ServingWebContentApplication.java | |
│ │ └── SpringMVCController.java | |
│ └── resources | |
│ ├── static | |
│ │ └── index.html | |
│ └── templates | |
│ └── springmvc.html | |
└── test | |
└── java | |
└── com | |
└── commons | |
└── project | |
└── ServingWebContentApplicationTest.java | |
15 directories, 8 files | |
*************************************************************************************************************************** | |
% mkdir -p sample | |
% cd sample | |
% mkdir -p src/main/java/com/commons/project | |
% ls src/main/java/com/commons/project | |
% mkdir -p src/test/java/com/commons/project | |
% ls src/test/java/com/commons/project | |
% mkdir -p src/main/resources/static | |
% ls src/main/resources/static | |
% mkdir -p src/main/resources/templates | |
% ls src/main/resources/templates | |
% mkdir -p src/test/java/com/commons/project | |
% ls src/test/java/com/commons/project | |
% tree | |
. | |
└── src | |
├── main | |
│ ├── java | |
│ │ └── com | |
│ │ └── commons | |
│ │ └── project | |
│ └── resources | |
│ ├── static | |
│ └── templates | |
└── test | |
└── java | |
└── com | |
└── commons | |
└── project | |
15 directories, 0 files | |
% nano settings.gradle | |
[ | |
rootProject.name = 'sample' | |
] | |
% cat settings.gradle | |
% nano build.gradle | |
[ | |
plugins { | |
id 'java' | |
id 'org.springframework.boot' version '3.4.2' | |
id 'io.spring.dependency-management' version '1.1.7' | |
} | |
group = 'com.commons.project' | |
version = '1.0-SNAPSHOT' | |
java { | |
toolchain { | |
languageVersion = JavaLanguageVersion.of(23) | |
} | |
} | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' | |
implementation 'org.springframework.boot:spring-boot-starter-web' | |
developmentOnly 'org.springframework.boot:spring-boot-devtools' | |
testImplementation 'org.springframework.boot:spring-boot-starter-test' | |
} | |
test { | |
useJUnitPlatform() | |
} | |
] | |
% cat build.gradle | |
% nano pom.xml | |
[ | |
<?xml version="1.0" encoding="UTF-8"?> | |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<parent> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-parent</artifactId> | |
<version>3.3.0</version> | |
<relativePath/> | |
</parent> | |
<groupId>com.commons.project</groupId> | |
<artifactId>sample</artifactId> | |
<version>1.0-SNAPSHOT</version> | |
<name>sample</name> | |
<description>Spring Boot Spring MVC Maven</description> | |
<properties> | |
<java.version>23</java.version> | |
</properties> | |
<dependencies> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-thymeleaf</artifactId> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-web</artifactId> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-devtools</artifactId> | |
<scope>runtime</scope> | |
<optional>true</optional> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-test</artifactId> | |
<scope>test</scope> | |
</dependency> | |
</dependencies> | |
<build> | |
<plugins> | |
<plugin> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-maven-plugin</artifactId> | |
</plugin> | |
</plugins> | |
</build> | |
<reporting> | |
<plugins> | |
<plugin> | |
<groupId>org.apache.maven.plugins</groupId> | |
<artifactId>maven-jxr-plugin</artifactId> | |
<version>3.6.0</version> | |
<reportSets> | |
<reportSet> | |
<reports> | |
<report>jxr-no-fork</report> | |
<report>test-jxr-no-fork</report> | |
</reports> | |
</reportSet> | |
</reportSets> | |
</plugin> | |
</plugins> | |
</reporting> | |
</project> | |
] | |
% cat pom.xml | |
% nano src/main/java/com/commons/project/SpringMVCController.java | |
[ | |
package com.commons.project; | |
import org.springframework.stereotype.Controller; | |
import org.springframework.ui.Model; | |
import org.springframework.web.bind.annotation.GetMapping; | |
import org.springframework.web.bind.annotation.RequestParam; | |
@Controller | |
public class SpringMVCController { | |
@GetMapping("/springmvc") | |
public String springmvc(@RequestParam(name="name", required=false, defaultValue="Framework") String name, Model model) { | |
model.addAttribute("name", name); | |
return "springmvc"; | |
} | |
} | |
] | |
% cat src/main/java/com/commons/project/SpringMVCController.java | |
% nano src/main/java/com/commons/project/ServingWebContentApplication.java | |
[ | |
package com.commons.project; | |
import org.springframework.boot.SpringApplication; | |
import org.springframework.boot.autoconfigure.SpringBootApplication; | |
@SpringBootApplication | |
public class ServingWebContentApplication { | |
public static void main(String[] args) { | |
SpringApplication.run(ServingWebContentApplication.class, args); | |
} | |
} | |
] | |
% cat src/main/java/com/commons/project/ServingWebContentApplication.java | |
% nano src/main/resources/static/index.html | |
[ | |
<!DOCTYPE HTML> | |
<html> | |
<head> | |
<title>Getting Started: Serving Web Content</title> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | |
</head> | |
<body> | |
<p>Spring MVC Request Parameter <a href="/springmvc">here</a></p> | |
</body> | |
</html> | |
] | |
% cat src/main/resources/static/index.html | |
% nano src/main/resources/templates/springmvc.html | |
[ | |
<!DOCTYPE HTML> | |
<html xmlns:th="http://www.thymeleaf.org"> | |
<head> | |
<title>Getting Started: Serving Web Content</title> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | |
</head> | |
<body> | |
<p th:text="|Spring MVC Request Parameter: ${name}!|" /> | |
</body> | |
</html> | |
] | |
% cat src/main/resources/templates/springmvc.html | |
% nano src/test/java/com/commons/project/ServingWebContentApplicationTest.java | |
[ | |
package com.commons.project; | |
import static org.hamcrest.Matchers.containsString; | |
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; | |
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; | |
import org.junit.jupiter.api.Test; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; | |
import org.springframework.test.web.servlet.MockMvc; | |
@WebMvcTest(controllers = SpringMVCController.class) | |
public class ServingWebContentApplicationTest { | |
@Autowired | |
private MockMvc mockMvc; | |
@Test | |
public void homePage() throws Exception { | |
// N.B. jsoup can be useful for asserting HTML content | |
mockMvc.perform(get("/index.html")) | |
.andExpect(content().string(containsString("Spring MVC Request Parameter"))); | |
} | |
@Test | |
public void springmvc() throws Exception { | |
mockMvc.perform(get("/springmvc")) | |
.andExpect(content().string(containsString("Spring MVC Request Parameter: Framework!"))); | |
} | |
@Test | |
public void springmvcWithRequestParam() throws Exception { | |
mockMvc.perform(get("/springmvc").param("name", org.springframework.core.SpringVersion.getVersion())) | |
.andExpect(content().string(containsString("Spring MVC Request Parameter: " + org.springframework.core.SpringVersion.getVersion() + "!"))); | |
} | |
} | |
] | |
% cat src/test/java/com/commons/project/ServingWebContentApplicationTest.java | |
% tree | |
. | |
├── build.gradle | |
├── pom.xml | |
├── settings.gradle | |
└── src | |
├── main | |
│ ├── java | |
│ │ └── com | |
│ │ └── commons | |
│ │ └── project | |
│ │ ├── ServingWebContentApplication.java | |
│ │ └── SpringMVCController.java | |
│ └── resources | |
│ ├── static | |
│ │ └── index.html | |
│ └── templates | |
│ └── springmvc.html | |
└── test | |
└── java | |
└── com | |
└── commons | |
└── project | |
└── ServingWebContentApplicationTest.java | |
15 directories, 8 files | |
*************************************************************************************************************************** | |
# Terminal Window # Spring MVC # Maven Wrapper | |
************************************************************************************************************************ | |
[ | |
% cd sample | |
] | |
# Java 23.0.2 # Apache Maven 3.9.9 | |
% export JAVA_HOME="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home" | |
% export M2_HOME="$HOME/Downloads/Software/ApacheMaven/apache-maven-3.9.9" | |
% export M2="$M2_HOME/bin" | |
% export PATH=$PATH:"$M2:$JAVA_HOME/bin" | |
[ | |
% export MAVEN_OPTS="-Xms256m -Xmx512m --enable-preview" | |
] | |
% export MAVEN_OPTS="-Xms256m -Xmx512m" | |
# Or | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/ApacheMaven/apache-maven-3.9.9/bin/":$PATH | |
% java --version | |
% mvn --version | |
% mvn wrapper:wrapper | |
[ | |
% ./mvnw clean | |
] | |
% ./mvnw spring-boot:run | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/ | |
% open http://localhost:8080/ | |
% curl "http://localhost:8080/springmvc?name=Maven%20Wrapper" | |
% open "http://localhost:8080/springmvc?name=Maven%20Wrapper" | |
# Terminal Window # Spring MVC # Maven Wrapper | |
<control + c> | |
[ | |
% ./mvnw clean | |
] | |
% ./mvnw package | |
% java -jar target/sample-1.0-SNAPSHOT.jar | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/ | |
% open http://localhost:8080/ | |
% curl "http://localhost:8080/springmvc?name=Maven%20Wrapper%20Jar" | |
% open "http://localhost:8080/springmvc?name=Maven%20Wrapper%20Jar" | |
# Terminal Window # Spring MVC # Maven Wrapper | |
<control + c> | |
# Spring MVC # Maven Wrapper # Surefire Report | |
[ | |
% ./mvnw test | |
] | |
% ./mvnw surefire-report:report | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/target/reports --port 8000 | |
# Terminal Window # curl # open | |
% curl http://127.0.0.1:8000/surefire.html | |
% open http://127.0.0.1:8000/surefire.html | |
************************************************************************************************************************ | |
# Terminal Window # Spring MVC # Gradle Wrapper # Groovy | |
************************************************************************************************************************ | |
[ | |
% cd sample | |
] | |
# Java 23.0.2 # Gradle 8.12 | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/Gradle/gradle-8.12/bin/":$PATH | |
% java --version | |
% gradle --version | |
% gradle wrapper | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew bootRun | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/ | |
% open http://localhost:8080/ | |
% curl "http://localhost:8080/springmvc?name=Gradle%20Wrapper" | |
% open "http://localhost:8080/springmvc?name=Gradle%20Wrapper" | |
# Terminal Window # Spring MVC # Gradle Wrapper # Groovy | |
<control + c> | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew build | |
% java -jar build/libs/sample-1.0-SNAPSHOT.jar | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/ | |
% open http://localhost:8080/ | |
% curl "http://localhost:8080/springmvc?name=Gradle%20Wrapper%20Jar" | |
% open "http://localhost:8080/springmvc?name=Gradle%20Wrapper%20Jar" | |
# Terminal Window # Spring MVC # Gradle Wrapper # Groovy | |
<control + c> | |
# Spring MVC # Gradle Wrapper # Reports | |
[ | |
% ./gradlew clean | |
% ./gradlew build | |
] | |
# yes | |
% ./gradlew build --scan | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/build/reports/tests/test --port 8000 | |
# Terminal Window # curl # open | |
% curl http://127.0.0.1:8000/ | |
% open http://127.0.0.1:8000/ | |
*************************************************************************************************************************** | |
# Terminal Window # Spring MVC # Gradle Wrapper # Kotlin | |
************************************************************************************************************************ | |
[ | |
% mkdir -p Maven; mkdir -p Gradle/Kotlin; mkdir -p Gradle/Groovy | |
% cp -r sample Maven | |
% cp -r sample Gradle/Groovy | |
% mv sample Gradle/Kotlin | |
% cd Gradle/Kotlin/sample | |
] | |
% rm -rf gradle gradlew gradlew.bat settings.gradle build.gradle build .gradle | |
% nano settings.gradle.kts | |
[ | |
rootProject.name = "sample" | |
] | |
% cat settings.gradle.kts | |
% nano build.gradle.kts | |
[ | |
plugins { | |
id("java") | |
id("org.springframework.boot") version "3.4.2" | |
id("io.spring.dependency-management") version "1.1.7" | |
} | |
group = "com.commons.project" | |
version = "1.0-SNAPSHOT" | |
java { | |
toolchain { | |
languageVersion.set(JavaLanguageVersion.of(23)) | |
} | |
} | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
implementation("org.springframework.boot:spring-boot-starter-thymeleaf") | |
implementation("org.springframework.boot:spring-boot-starter-web") | |
developmentOnly("org.springframework.boot:spring-boot-devtools") | |
testImplementation("org.springframework.boot:spring-boot-starter-test") | |
} | |
tasks.test { | |
useJUnitPlatform() | |
} | |
] | |
% cat build.gradle.kts | |
# Java 23.0.2 # Gradle 8.12 | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/Gradle/gradle-8.12/bin/":$PATH | |
% java --version | |
% gradle --version | |
% gradle wrapper | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew bootRun | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/ | |
% open http://localhost:8080/ | |
% curl "http://localhost:8080/springmvc?name=Gradle%20Wrapper%20Kotlin" | |
% open "http://localhost:8080/springmvc?name=Gradle%20Wrapper%20Kotlin" | |
# Terminal Window # Spring MVC # Gradle Wrapper # Kotlin | |
<control + c> | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew build | |
% java -jar build/libs/sample-1.0-SNAPSHOT.jar | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/ | |
% open http://localhost:8080/ | |
% curl "http://localhost:8080/springmvc?name=Gradle%20Wrapper%20Kotlin%20Jar" | |
% open "http://localhost:8080/springmvc?name=Gradle%20Wrapper%20Kotlin%20Jar" | |
# Terminal Window # Spring MVC # Gradle Wrapper # Kotlin | |
<control + c> | |
# Spring MVC # Gradle Wrapper # Kotlin # Reports | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew build | |
# yes | |
% ./gradlew build --scan | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/build/reports/tests/test --port 8000 | |
# Terminal Window # curl # open | |
% curl http://127.0.0.1:8000/ | |
% open http://127.0.0.1:8000/ | |
*************************************************************************************************************************** | |
########################################################################################################################### | |
########################################################################################################################### | |
# Gradle # Kotlin # Groovy # Maven # Java # Spring Data JPA # Docker | |
########################################################################################################################### | |
*************************************************************************************************************************** | |
# Gradle # Kotlin # Maven # Java # Spring Data JPA | |
*************************************************************************************************************************** | |
. | |
├── build.gradle.kts | |
├── pom.xml | |
├── settings.gradle.kts | |
└── src | |
├── main | |
│ └── java | |
│ └── com | |
│ └── commons | |
│ └── project | |
│ ├── AccessingDataMongodbApplication.java | |
│ ├── Customer.java | |
│ └── CustomerRepository.java | |
│ | |
│ | |
│ | |
└── test | |
└── java | |
└── com | |
└── commons | |
└── project | |
└── CustomerRepositoryTests.java | |
12 directories, 7 files | |
*************************************************************************************************************************** | |
% mkdir -p sample | |
% cd sample | |
% mkdir -p src/main/java/com/commons/project | |
% ls src/main/java/com/commons/project | |
% mkdir -p src/test/java/com/commons/project | |
% ls src/test/java/com/commons/project | |
% tree | |
. | |
└── src | |
├── main | |
│ └── java | |
│ └── com | |
│ └── commons | |
│ └── project | |
└── test | |
└── java | |
└── com | |
└── commons | |
└── project | |
12 directories, 0 files | |
% nano settings.gradle.kts | |
[ | |
rootProject.name = "sample" | |
] | |
% cat settings.gradle.kts | |
% nano build.gradle.kts | |
[ | |
plugins { | |
id("java") | |
id("org.springframework.boot") version "3.4.2" | |
id("io.spring.dependency-management") version "1.1.7" | |
} | |
group = "com.commons.project" | |
version = "1.0-SNAPSHOT" | |
java { | |
toolchain { | |
languageVersion.set(JavaLanguageVersion.of(23)) | |
} | |
} | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
implementation("org.springframework.boot:spring-boot-starter-data-mongodb") | |
testImplementation("org.springframework.boot:spring-boot-starter-test") | |
testImplementation("org.springframework.boot:spring-boot-testcontainers") | |
testImplementation("org.testcontainers:junit-jupiter") | |
testImplementation("org.testcontainers:mongodb") | |
} | |
tasks.test { | |
useJUnitPlatform() | |
} | |
] | |
% cat build.gradle.kts | |
% nano pom.xml | |
[ | |
<?xml version="1.0" encoding="UTF-8"?> | |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<parent> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-parent</artifactId> | |
<version>3.3.0</version> | |
<relativePath/> <!-- lookup parent from repository --> | |
</parent> | |
<groupId>com.commons.project</groupId> | |
<artifactId>sample</artifactId> | |
<version>1.0-SNAPSHOT</version> | |
<name>sample</name> | |
<description>Spring Boot Spring Data JPA Maven</description> | |
<properties> | |
<java.version>23</java.version> | |
</properties> | |
<dependencies> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-data-mongodb</artifactId> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-test</artifactId> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-testcontainers</artifactId> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.testcontainers</groupId> | |
<artifactId>junit-jupiter</artifactId> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.testcontainers</groupId> | |
<artifactId>mongodb</artifactId> | |
<scope>test</scope> | |
</dependency> | |
</dependencies> | |
<build> | |
<plugins> | |
<plugin> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-maven-plugin</artifactId> | |
</plugin> | |
</plugins> | |
</build> | |
<reporting> | |
<plugins> | |
<plugin> | |
<groupId>org.apache.maven.plugins</groupId> | |
<artifactId>maven-jxr-plugin</artifactId> | |
<version>3.6.0</version> | |
<reportSets> | |
<reportSet> | |
<reports> | |
<report>jxr-no-fork</report> | |
<report>test-jxr-no-fork</report> | |
</reports> | |
</reportSet> | |
</reportSets> | |
</plugin> | |
</plugins> | |
</reporting> | |
</project> | |
] | |
% cat pom.xml | |
% nano src/main/java/com/commons/project/AccessingDataMongodbApplication.java | |
[ | |
package com.commons.project; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.boot.CommandLineRunner; | |
import org.springframework.boot.SpringApplication; | |
import org.springframework.boot.autoconfigure.SpringBootApplication; | |
@SpringBootApplication | |
public class AccessingDataMongodbApplication implements CommandLineRunner { | |
@Autowired | |
private CustomerRepository repository; | |
public static void main(String[] args) { | |
SpringApplication.run(AccessingDataMongodbApplication.class, args); | |
} | |
@Override | |
public void run(String... args) throws Exception { | |
repository.deleteAll(); | |
// save a couple of customers | |
repository.save(new Customer("Alice", "Smith")); | |
repository.save(new Customer("Bob", "Smith")); | |
// fetch all customers | |
System.out.println("Customers found with findAll():"); | |
System.out.println("-------------------------------"); | |
for (Customer customer : repository.findAll()) { | |
System.out.println(customer); | |
} | |
System.out.println(); | |
// fetch an individual customer | |
System.out.println("Customer found with findByFirstName('Alice'):"); | |
System.out.println("--------------------------------"); | |
System.out.println(repository.findByFirstName("Alice")); | |
System.out.println("Customers found with findByLastName('Smith'):"); | |
System.out.println("--------------------------------"); | |
for (Customer customer : repository.findByLastName("Smith")) { | |
System.out.println(customer); | |
} | |
} | |
} | |
] | |
% cat src/main/java/com/commons/project/AccessingDataMongodbApplication.java | |
% nano src/main/java/com/commons/project/Customer.java | |
[ | |
package com.commons.project; | |
import org.springframework.data.annotation.Id; | |
public class Customer { | |
@Id | |
public String id; | |
public String firstName; | |
public String lastName; | |
public Customer() {} | |
public Customer(String firstName, String lastName) { | |
this.firstName = firstName; | |
this.lastName = lastName; | |
} | |
@Override | |
public String toString() { | |
return String.format( | |
"Customer[id=%s, firstName='%s', lastName='%s']", | |
id, firstName, lastName); | |
} | |
} | |
] | |
% cat src/main/java/com/commons/project/Customer.java | |
% nano src/main/java/com/commons/project/CustomerRepository.java | |
[ | |
package com.commons.project; | |
import java.util.List; | |
import org.springframework.data.mongodb.repository.MongoRepository; | |
public interface CustomerRepository extends MongoRepository<Customer, String> { | |
public Customer findByFirstName(String firstName); | |
public List<Customer> findByLastName(String lastName); | |
} | |
] | |
% cat src/main/java/com/commons/project/CustomerRepository.java | |
% nano src/test/java/com/commons/project/CustomerRepositoryTests.java | |
[ | |
package com.commons.project; | |
import static org.assertj.core.api.Assertions.*; | |
import java.util.List; | |
import org.junit.jupiter.api.BeforeEach; | |
import org.junit.jupiter.api.Test; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.boot.test.context.SpringBootTest; | |
import org.springframework.boot.testcontainers.service.connection.ServiceConnection; | |
import org.springframework.data.domain.Example; | |
import org.testcontainers.containers.MongoDBContainer; | |
import org.testcontainers.junit.jupiter.Container; | |
import org.testcontainers.junit.jupiter.Testcontainers; | |
@SpringBootTest | |
@Testcontainers | |
public class CustomerRepositoryTests { | |
@Container | |
@ServiceConnection | |
static MongoDBContainer container = new MongoDBContainer("mongo:7.0.2"); | |
@Autowired | |
CustomerRepository repository; | |
Customer dave, oliver, carter; | |
@BeforeEach | |
public void setUp() { | |
repository.deleteAll(); | |
dave = repository.save(new Customer("Dave", "Matthews")); | |
oliver = repository.save(new Customer("Oliver August", "Matthews")); | |
carter = repository.save(new Customer("Carter", "Beauford")); | |
} | |
@Test | |
public void setsIdOnSave() { | |
Customer dave = repository.save(new Customer("Dave", "Matthews")); | |
assertThat(dave.id).isNotNull(); | |
} | |
@Test | |
public void findsByLastName() { | |
List<Customer> result = repository.findByLastName("Beauford"); | |
assertThat(result).hasSize(1).extracting("firstName").contains("Carter"); | |
} | |
@Test | |
public void findsByExample() { | |
Customer probe = new Customer(null, "Matthews"); | |
List<Customer> result = repository.findAll(Example.of(probe)); | |
assertThat(result).hasSize(2).extracting("firstName").contains("Dave", "Oliver August"); | |
} | |
} | |
] | |
% cat src/test/java/com/commons/project/CustomerRepositoryTests.java | |
% tree | |
. | |
├── build.gradle.kts | |
├── pom.xml | |
├── settings.gradle.kts | |
└── src | |
├── main | |
│ └── java | |
│ └── com | |
│ └── commons | |
│ └── project | |
│ ├── AccessingDataMongodbApplication.java | |
│ ├── Customer.java | |
│ └── CustomerRepository.java | |
└── test | |
└── java | |
└── com | |
└── commons | |
└── project | |
└── CustomerRepositoryTests.java | |
12 directories, 7 files | |
*************************************************************************************************************************** | |
# Terminal Window # Spring Data JPA # Maven Wrapper | |
*************************************************************************************************************************** | |
[ | |
% cd sample | |
] | |
# Java 23.0.2 # Apache Maven 3.9.9 | |
% export JAVA_HOME="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home" | |
% export M2_HOME="$HOME/Downloads/Software/ApacheMaven/apache-maven-3.9.9" | |
% export M2="$M2_HOME/bin" | |
% export PATH=$PATH:"$M2:$JAVA_HOME/bin" | |
[ | |
% export MAVEN_OPTS="-Xms256m -Xmx512m --enable-preview" | |
] | |
% export MAVEN_OPTS="-Xms256m -Xmx512m" | |
# Or | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/ApacheMaven/apache-maven-3.9.9/bin/":$PATH | |
% java --version | |
% mvn --version | |
% mvn wrapper:wrapper | |
[ | |
% brew services start mongodb-community | |
% brew services stop mongodb-community | |
] | |
% brew services restart mongodb/brew/mongodb-community | |
% export PATH="/Applications/Docker.app/Contents/Resources/bin/:/Applications/Docker.app/Contents/Resources/cli-plugins/":$PATH | |
% docker version | |
[ | |
% ./mvnw clean | |
] | |
% ./mvnw spring-boot:run | |
[ | |
% ./mvnw clean | |
] | |
% ./mvnw package | |
% java -jar target/sample-1.0-SNAPSHOT.jar | |
# Spring Data JPA # Maven Wrapper # Surefire Report | |
[ | |
% ./mvnw test | |
] | |
% ./mvnw surefire-report:report | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/target/reports --port 8000 | |
# Terminal Window # curl # open | |
% curl http://127.0.0.1:8000/surefire.html | |
% open http://127.0.0.1:8000/surefire.html | |
*************************************************************************************************************************** | |
# Terminal Window # Spring Data JPA # Gradle Wrapper # Kotlin | |
*************************************************************************************************************************** | |
[ | |
% cd sample | |
] | |
# Java 23.0.2 # Gradle 8.12 | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/Gradle/gradle-8.12/bin/":$PATH | |
% java --version | |
% gradle --version | |
% gradle wrapper | |
[ | |
% brew services start mongodb-community | |
% brew services stop mongodb-community | |
] | |
% brew services restart mongodb/brew/mongodb-community | |
% export PATH="/Applications/Docker.app/Contents/Resources/bin/:/Applications/Docker.app/Contents/Resources/cli-plugins/":$PATH | |
% docker version | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew bootRun | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew build | |
% java -jar build/libs/sample-1.0-SNAPSHOT.jar | |
# Spring Data JPA # Gradle Wrapper # Kotlin # Reports | |
[ | |
% ./gradlew clean | |
% ./gradlew build | |
] | |
# yes | |
% ./gradlew build --scan | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/build/reports/tests/test --port 8000 | |
# Terminal Window # curl # open | |
% curl http://127.0.0.1:8000/ | |
% open http://127.0.0.1:8000/ | |
*************************************************************************************************************************** | |
# Terminal Window # Spring Data JPA # Gradle Wrapper # Groovy | |
*************************************************************************************************************************** | |
[ | |
% mkdir -p Maven; mkdir -p Gradle/Kotlin; mkdir -p Gradle/Groovy | |
% cp -r sample Maven | |
% cp -r sample Gradle/Kotlin | |
% mv sample Gradle/Groovy | |
% cd Gradle/Groovy/sample | |
] | |
# Java 23.0.2 # Gradle 8.12 | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/Gradle/gradle-8.12/bin/":$PATH | |
% java --version | |
% gradle --version | |
% rm -rf gradle gradlew gradlew.bat settings.gradle.kts build.gradle.kts build .gradle | |
% nano settings.gradle | |
[ | |
rootProject.name = 'sample' | |
] | |
% cat settings.gradle | |
% nano build.gradle | |
[ | |
plugins { | |
id 'java' | |
id 'org.springframework.boot' version '3.4.2' | |
id 'io.spring.dependency-management' version '1.1.7' | |
} | |
group = 'com.commons.project' | |
version = '1.0-SNAPSHOT' | |
java { | |
toolchain { | |
languageVersion = JavaLanguageVersion.of(23) | |
} | |
} | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' | |
testImplementation 'org.springframework.boot:spring-boot-starter-test' | |
testImplementation 'org.springframework.boot:spring-boot-testcontainers' | |
testImplementation 'org.testcontainers:junit-jupiter' | |
testImplementation 'org.testcontainers:mongodb' | |
} | |
test { | |
useJUnitPlatform() | |
} | |
] | |
% cat build.gradle | |
% gradle wrapper | |
[ | |
% brew services start mongodb-community | |
% brew services stop mongodb-community | |
] | |
% brew services restart mongodb/brew/mongodb-community | |
% export PATH="/Applications/Docker.app/Contents/Resources/bin/:/Applications/Docker.app/Contents/Resources/cli-plugins/":$PATH | |
% docker version | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew bootRun | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew build | |
% java -jar build/libs/sample-1.0-SNAPSHOT.jar | |
# Spring Data JPA # Gradle Wrapper # Groovy # Reports | |
[ | |
% ./gradlew clean | |
% ./gradlew build | |
] | |
# yes | |
% ./gradlew build --scan | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/build/reports/tests/test --port 8000 | |
# Terminal Window # curl # open | |
% curl http://127.0.0.1:8000/ | |
% open http://127.0.0.1:8000/ | |
*************************************************************************************************************************** | |
########################################################################################################################### | |
########################################################################################################################### | |
# Gradle # Kotlin # Groovy # Maven # Java # Spring JPA Hibernate # Docker | |
########################################################################################################################### | |
*************************************************************************************************************************** | |
# Gradle # Kotlin # Maven # Java # Spring JPA Hibernate | |
*************************************************************************************************************************** | |
. | |
├── compose.yaml | |
├── pom.xml | |
└── src | |
├── main | |
│ ├── java | |
│ │ └── com | |
│ │ └── commons | |
│ │ └── project | |
│ │ ├── AccessingDataMysqlApplication.java | |
│ │ ├── MainController.java | |
│ │ ├── User.java | |
│ │ └── UserRepository.java | |
│ └── resources | |
│ └── application.properties | |
└── test | |
└── java | |
└── com | |
└── commons | |
└── project | |
└── AccessingDataMysqlApplicationTests.java | |
13 directories, 8 files | |
*************************************************************************************************************************** | |
% mkdir -p sample | |
% cd sample | |
% mkdir -p src/main/java/com/commons/project | |
% ls src/main/java/com/commons/project | |
% mkdir -p src/test/java/com/commons/project | |
% ls src/test/java/com/commons/project | |
% mkdir -p src/main/resources | |
% ls src/main/resources | |
% tree | |
. | |
└── src | |
├── main | |
│ ├── java | |
│ │ └── com | |
│ │ └── commons | |
│ │ └── project | |
│ └── resources | |
└── test | |
└── java | |
└── com | |
└── commons | |
└── project | |
13 directories, 0 files | |
% nano src/main/resources/application.properties | |
[ | |
spring.jpa.hibernate.ddl-auto=update | |
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase | |
spring.datasource.username=myuser | |
spring.datasource.password=secret | |
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver | |
spring.jpa.show-sql: true | |
] | |
% cat src/main/resources/application.properties | |
% nano compose.yaml | |
[ | |
services: | |
mysql: | |
image: 'mysql:latest' | |
environment: | |
- 'MYSQL_DATABASE=mydatabase' | |
- 'MYSQL_PASSWORD=secret' | |
- 'MYSQL_ROOT_PASSWORD=verysecret' | |
- 'MYSQL_USER=myuser' | |
ports: | |
- '3306' | |
] | |
% cat compose.yaml | |
% nano src/main/java/com/commons/project/User.java | |
[ | |
package com.commons.project; | |
import jakarta.persistence.Entity; | |
import jakarta.persistence.GeneratedValue; | |
import jakarta.persistence.GenerationType; | |
import jakarta.persistence.Id; | |
@Entity // This tells Hibernate to make a table out of this class | |
public class User { | |
@Id | |
@GeneratedValue(strategy=GenerationType.AUTO) | |
private Integer id; | |
private String name; | |
private String email; | |
public Integer getId() { | |
return id; | |
} | |
public void setId(Integer id) { | |
this.id = id; | |
} | |
public String getName() { | |
return name; | |
} | |
public void setName(String name) { | |
this.name = name; | |
} | |
public String getEmail() { | |
return email; | |
} | |
public void setEmail(String email) { | |
this.email = email; | |
} | |
} | |
] | |
% cat src/main/java/com/commons/project/User.java | |
% nano src/main/java/com/commons/project/UserRepository.java | |
[ | |
package com.commons.project; | |
import org.springframework.data.repository.CrudRepository; | |
import com.commons.project.User; | |
// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository | |
// CRUD refers Create, Read, Update, Delete | |
public interface UserRepository extends CrudRepository<User, Integer> { | |
} | |
] | |
% cat src/main/java/com/commons/project/UserRepository.java | |
% nano src/main/java/com/commons/project/MainController.java | |
[ | |
package com.commons.project; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.stereotype.Controller; | |
import org.springframework.web.bind.annotation.GetMapping; | |
import org.springframework.web.bind.annotation.PostMapping; | |
import org.springframework.web.bind.annotation.RequestMapping; | |
import org.springframework.web.bind.annotation.RequestParam; | |
import org.springframework.web.bind.annotation.ResponseBody; | |
@Controller // This means that this class is a Controller | |
@RequestMapping(path="/sample") // This means URL's start with /demo (after Application path) | |
public class MainController { | |
@Autowired // This means to get the bean called userRepository | |
// Which is auto-generated by Spring, we will use it to handle the data | |
private UserRepository userRepository; | |
@PostMapping(path="/add") // Map ONLY POST Requests | |
public @ResponseBody String addNewUser (@RequestParam String name | |
, @RequestParam String email) { | |
// @ResponseBody means the returned String is the response, not a view name | |
// @RequestParam means it is a parameter from the GET or POST request | |
User n = new User(); | |
n.setName(name); | |
n.setEmail(email); | |
userRepository.save(n); | |
return "Saved"; | |
} | |
@GetMapping(path="/all") | |
public @ResponseBody Iterable<User> getAllUsers() { | |
// This returns a JSON or XML with the users | |
return userRepository.findAll(); | |
} | |
} | |
] | |
% cat src/main/java/com/commons/project/MainController.java | |
% nano src/main/java/com/commons/project/AccessingDataMysqlApplication.java | |
[ | |
package com.commons.project; | |
import org.springframework.boot.SpringApplication; | |
import org.springframework.boot.autoconfigure.SpringBootApplication; | |
@SpringBootApplication | |
public class AccessingDataMysqlApplication { | |
public static void main(String[] args) { | |
SpringApplication.run(AccessingDataMysqlApplication.class, args); | |
} | |
} | |
] | |
% cat src/main/java/com/commons/project/AccessingDataMysqlApplication.java | |
% nano src/test/java/com/commons/project/AccessingDataMysqlApplicationTests.java | |
[ | |
package com.commons.project; | |
import org.junit.jupiter.api.Test; | |
import org.testcontainers.containers.MySQLContainer; | |
import org.testcontainers.junit.jupiter.Container; | |
import org.testcontainers.junit.jupiter.Testcontainers; | |
import org.testcontainers.utility.DockerImageName; | |
import org.springframework.boot.test.context.SpringBootTest; | |
import org.springframework.boot.testcontainers.service.connection.ServiceConnection; | |
@Testcontainers | |
@SpringBootTest | |
class AccessingDataMysqlApplicationTests { | |
@Container | |
@ServiceConnection | |
static MySQLContainer<?> mySQLContainer = new MySQLContainer<>(DockerImageName.parse("mysql:latest")); | |
@Test | |
void contextLoads() { | |
} | |
} | |
] | |
% cat src/test/java/com/commons/project/AccessingDataMysqlApplicationTests.java | |
% nano settings.gradle.kts | |
[ | |
rootProject.name = "sample" | |
] | |
% cat settings.gradle.kts | |
% nano build.gradle.kts | |
[ | |
plugins { | |
java | |
war | |
id("org.springframework.boot") version "3.4.2" | |
id("io.spring.dependency-management") version "1.1.7" | |
} | |
group = "com.commons.project" | |
version = "1.0-SNAPSHOT" | |
java { | |
toolchain { | |
languageVersion = JavaLanguageVersion.of(23) | |
} | |
} | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
implementation("org.springframework.boot:spring-boot-starter-data-jpa") | |
implementation("org.springframework.boot:spring-boot-starter-web") | |
developmentOnly("org.springframework.boot:spring-boot-docker-compose") | |
runtimeOnly("com.mysql:mysql-connector-j") | |
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat") | |
testImplementation("org.springframework.boot:spring-boot-starter-test") | |
testImplementation("org.springframework.boot:spring-boot-testcontainers") | |
testImplementation("org.testcontainers:junit-jupiter") | |
testImplementation("org.testcontainers:mysql") | |
testRuntimeOnly("org.junit.platform:junit-platform-launcher") | |
} | |
tasks.withType<Test> { | |
useJUnitPlatform() | |
} | |
] | |
% cat build.gradle.kts | |
% nano pom.xml | |
[ | |
<?xml version="1.0" encoding="UTF-8"?> | |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<parent> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-parent</artifactId> | |
<version>3.4.2</version> | |
<relativePath/> <!-- lookup parent from repository --> | |
</parent> | |
<groupId>com.commons.project</groupId> | |
<artifactId>sample</artifactId> | |
<version>1.0-SNAPSHOT</version> | |
<packaging>war</packaging> | |
<name>sample</name> | |
<description>Spring Boot Web JPA MySQL Docker Testcontainers Maven</description> | |
<url/> | |
<licenses> | |
<license/> | |
</licenses> | |
<developers> | |
<developer/> | |
</developers> | |
<scm> | |
<connection/> | |
<developerConnection/> | |
<tag/> | |
<url/> | |
</scm> | |
<properties> | |
<java.version>23</java.version> | |
</properties> | |
<dependencies> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-data-jpa</artifactId> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-web</artifactId> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-docker-compose</artifactId> | |
<scope>runtime</scope> | |
<optional>true</optional> | |
</dependency> | |
<dependency> | |
<groupId>com.mysql</groupId> | |
<artifactId>mysql-connector-j</artifactId> | |
<scope>runtime</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-tomcat</artifactId> | |
<scope>provided</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-test</artifactId> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-testcontainers</artifactId> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.testcontainers</groupId> | |
<artifactId>junit-jupiter</artifactId> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.testcontainers</groupId> | |
<artifactId>mysql</artifactId> | |
<scope>test</scope> | |
</dependency> | |
</dependencies> | |
<build> | |
<plugins> | |
<plugin> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-maven-plugin</artifactId> | |
</plugin> | |
</plugins> | |
</build> | |
<reporting> | |
<plugins> | |
<plugin> | |
<groupId>org.apache.maven.plugins</groupId> | |
<artifactId>maven-jxr-plugin</artifactId> | |
<version>3.6.0</version> | |
<reportSets> | |
<reportSet> | |
<reports> | |
<report>jxr-no-fork</report> | |
<report>test-jxr-no-fork</report> | |
</reports> | |
</reportSet> | |
</reportSets> | |
</plugin> | |
</plugins> | |
</reporting> | |
</project> | |
] | |
% cat pom.xml | |
% tree | |
. | |
├── build.gradle.kts | |
├── compose.yaml | |
├── pom.xml | |
├── settings.gradle.kts | |
└── src | |
├── main | |
│ ├── java | |
│ │ └── com | |
│ │ └── commons | |
│ │ └── project | |
│ │ ├── AccessingDataMysqlApplication.java | |
│ │ ├── MainController.java | |
│ │ ├── User.java | |
│ │ └── UserRepository.java | |
│ └── resources | |
│ └── application.properties | |
└── test | |
└── java | |
└── com | |
└── commons | |
└── project | |
└── AccessingDataMysqlApplicationTests.java | |
13 directories, 10 files | |
*************************************************************************************************************************** | |
# Terminal Window # Spring JPA Hibernate # Maven Wrapper | |
*************************************************************************************************************************** | |
[ | |
% cd sample | |
] | |
# Java 23.0.2 # Apache Maven 3.9.9 | |
% export JAVA_HOME="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home" | |
% export M2_HOME="$HOME/Downloads/Software/ApacheMaven/apache-maven-3.9.9" | |
% export M2="$M2_HOME/bin" | |
% export PATH=$PATH:"$M2:$JAVA_HOME/bin" | |
[ | |
% export MAVEN_OPTS="-Xms256m -Xmx512m --enable-preview" | |
] | |
% export MAVEN_OPTS="-Xms256m -Xmx512m" | |
# Or | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/ApacheMaven/apache-maven-3.9.9/bin/":$PATH | |
% java --version | |
% mvn --version | |
% mvn wrapper:wrapper | |
% export PATH="/Applications/Docker.app/Contents/Resources/bin/:/Applications/Docker.app/Contents/Resources/cli-plugins/":$PATH | |
% docker version | |
[ | |
% ./mvnw clean | |
] | |
% ./mvnw spring-boot:run | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/sample/all | |
[ | |
[] | |
] | |
% curl http://localhost:8080/sample/add -d name=Maven -d [email protected] | |
[ | |
Saved | |
] | |
% curl http://localhost:8080/sample/all | |
[ | |
[{"id":1,"name":"Maven","email":"[email protected]"}] | |
] | |
# Spring MVC # Maven Wrapper # Surefire Report | |
# Original Terminal Window | |
<control + c> | |
[ | |
% ./mvnw test | |
] | |
% ./mvnw surefire-report:report | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/target/reports --port 8000 | |
# Terminal Window # curl # open | |
% curl http://127.0.0.1:8000/surefire.html | |
% open http://127.0.0.1:8000/surefire.html | |
*************************************************************************************************************************** | |
# Terminal Window # Spring JPA Hibernate # Gradle Wrapper # Kotlin | |
*************************************************************************************************************************** | |
[ | |
% cd sample | |
] | |
# Java 23.0.2 # Gradle 8.12 | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/Gradle/gradle-8.12/bin/":$PATH | |
% java --version | |
% gradle --version | |
% gradle wrapper | |
% export PATH="/Applications/Docker.app/Contents/Resources/bin/:/Applications/Docker.app/Contents/Resources/cli-plugins/":$PATH | |
% docker version | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew bootRun | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/sample/all | |
[ | |
[{"id":1,"name":"Maven","email":"[email protected]"}] | |
] | |
% curl http://localhost:8080/sample/add -d name=Kotlin -d [email protected] | |
[ | |
Saved | |
] | |
% curl http://localhost:8080/sample/all | |
[ | |
[{"id":1,"name":"Maven","email":"[email protected]"},{"id":2,"name":"Kotlin","email":"[email protected]"}] | |
] | |
# Spring JPA Hibernate # Gradle Wrapper # Kotlin # Reports | |
# Terminal Window # Spring Data JPA # Maven Wrapper | |
<control + c> | |
[ | |
% ./gradlew clean | |
% ./gradlew build | |
] | |
# yes | |
% ./gradlew build --scan | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/build/reports/tests/test --port 8000 | |
# Terminal Window # curl # open | |
% curl http://127.0.0.1:8000/ | |
% open http://127.0.0.1:8000/ | |
*************************************************************************************************************************** | |
# Terminal Window # Spring JPA Hibernate # Gradle Wrapper # Groovy | |
*************************************************************************************************************************** | |
[ | |
% mkdir -p Maven; mkdir -p Gradle/Kotlin; mkdir -p Gradle/Groovy | |
% cp -r sample Maven | |
% cp -r sample Gradle/Kotlin | |
% mv sample Gradle/Groovy | |
% cd Gradle/Groovy/sample | |
] | |
# Java 23.0.2 # Gradle 8.12 | |
% export PATH="$HOME/Downloads/Software/OpenJDK/JDK23.0.2/jdk-23.0.2.jdk/Contents/Home/bin/:$HOME/Downloads/Software/Gradle/gradle-8.12/bin/":$PATH | |
% java --version | |
% gradle --version | |
% rm -rf gradle gradlew gradlew.bat settings.gradle.kts build.gradle.kts build .gradle | |
% nano settings.gradle | |
[ | |
rootProject.name = 'sample' | |
] | |
% cat settings.gradle | |
% nano build.gradle | |
[ | |
plugins { | |
id 'java' | |
id 'war' | |
id 'org.springframework.boot' version '3.4.2' | |
id 'io.spring.dependency-management' version '1.1.7' | |
} | |
group = 'com.commons.project' | |
version = '1.0-SNAPSHOT' | |
java { | |
toolchain { | |
languageVersion = JavaLanguageVersion.of(23) | |
} | |
} | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' | |
implementation 'org.springframework.boot:spring-boot-starter-web' | |
developmentOnly 'org.springframework.boot:spring-boot-docker-compose' | |
runtimeOnly 'com.mysql:mysql-connector-j' | |
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' | |
testImplementation 'org.springframework.boot:spring-boot-starter-test' | |
testImplementation 'org.springframework.boot:spring-boot-testcontainers' | |
testImplementation 'org.testcontainers:junit-jupiter' | |
testImplementation 'org.testcontainers:mysql' | |
testRuntimeOnly 'org.junit.platform:junit-platform-launcher' | |
} | |
tasks.named('test') { | |
useJUnitPlatform() | |
} | |
] | |
% cat build.gradle | |
% gradle wrapper | |
% export PATH="/Applications/Docker.app/Contents/Resources/bin/:/Applications/Docker.app/Contents/Resources/cli-plugins/":$PATH | |
% docker version | |
[ | |
% ./gradlew clean | |
] | |
% ./gradlew bootRun | |
# Terminal Window # curl # open | |
% curl http://localhost:8080/sample/all | |
[ | |
[{"id":1,"name":"Maven","email":"[email protected]"},{"id":2,"name":"Kotlin","email":"[email protected]"}] | |
] | |
% curl http://localhost:8080/sample/add -d name=Groovy -d [email protected] | |
[ | |
Saved | |
] | |
% curl http://localhost:8080/sample/all | |
[ | |
[{"id":1,"name":"Maven","email":"[email protected]"},{"id":2,"name":"Kotlin","email":"[email protected]"},{"id":52,"name":"Groovy","email":"[email protected]"}] | |
] | |
# Spring JPA Hibernate # Gradle Wrapper # Groovy # Reports | |
# Terminal Window # Spring JPA Hibernate # Gradle Wrapper # Groovy | |
<control + c> | |
[ | |
% ./gradlew clean | |
% ./gradlew build | |
] | |
# yes | |
% ./gradlew build --scan | |
% jwebserver --version | |
% jwebserver --directory $(pwd)/build/reports/tests/test --port 8000 | |
# Terminal Window # curl # open | |
% curl http://127.0.0.1:8000/ | |
% open http://127.0.0.1:8000/ | |
*************************************************************************************************************************** | |
########################################################################################################################### | |
########################################################################################################################### | |
*************************************************************************************************************************** | |
# Docker # Cleanup | |
*************************************************************************************************************************** | |
% docker version | |
% docker container list --all | |
% docker image list --all | |
[ | |
% docker ps --all --quiet | |
% docker stop $(docker ps -a -q) | |
% docker rm $(docker ps -a -q) --force | |
] | |
% docker container list --all --quiet | |
% docker stop $(docker container list -a -q) | |
% docker rm $(docker container list -a -q) --force | |
% docker container prune | |
% docker image list --all --quiet | |
% docker rmi $(docker image list -a -q) --force | |
% docker image prune --all | |
% docker volume list --quiet | |
% docker volume rm $(docker volume list --quiet) --force | |
% docker volume prune --all | |
% docker network list --quiet --filter "type=custom" | |
% docker network rm $(docker network list --quiet --filter "type=custom") | |
% docker network prune | |
% docker system info | |
% docker system prune --all --volumes | |
*************************************************************************************************************************** | |
########################################################################################################################### | |
// Credits | |
/* | |
https://openjdk.org/ | |
https://oracle.com/java/ | |
https://spring.io/ | |
https://start.spring.io/ | |
https://maven.apache.org/ | |
https://gradle.org/ | |
https://gradle.com/ | |
https://groovy-lang.org/ | |
https://kotlinlang.org/ | |
https://mongodb.com/ | |
https://hibernate.org/ | |
https://docker.com/ | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment