Skip to content

Commit

Permalink
springboot-in-10-steps spring-boot upgrade
Browse files Browse the repository at this point in the history
  • Loading branch information
in28minutes committed May 27, 2022
1 parent d079bb3 commit f045b91
Show file tree
Hide file tree
Showing 23 changed files with 851 additions and 479 deletions.

This file was deleted.

Binary file not shown.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,300 @@
<!---
Current Directory : /in28Minutes/git/java-a-course-for-beginners/52-learn-spring-boot
-->

## Complete Code Example


### /pom.xml

```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>2.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.in28minutes</groupId>
<artifactId>learn-spring-boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>learn-spring-boot</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</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>

</project>
```
---

### /src/test/java/com/in28minutes/learnspringboot/LearnSpringBootApplicationTests.java

```java
package com.in28minutes.learnspringboot;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class LearnSpringBootApplicationTests {

@Test
void contextLoads() {
}

}
```
---

### /src/main/resources/data.sql

```
insert into COURSE (ID, AUTHOR, NAME)
values (100001, 'in28minutes', 'Learn Microservices');
insert into COURSE (ID, AUTHOR, NAME)
values (100002, 'in28minutes', 'Learn FullStack with React and Angular');
insert into COURSE (ID, AUTHOR, NAME)
values (100003, 'in28minutes', 'Learn AWS, GCP and Azure');
```
---

### /src/main/resources/application.properties

```properties
#logging.level.org.springframework=DEBUG
#management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.include=health,metrics
spring.datasource.url=jdbc:h2:mem:testdb
```
---

### /src/main/java/com/in28minutes/learnspringboot/LearnSpringBootApplication.java

```java
package com.in28minutes.learnspringboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
//@SpringBootConfiguration
//@EnableAutoConfiguration
//@ComponentScan
public class LearnSpringBootApplication {

public static void main(String[] args) {
SpringApplication.run(LearnSpringBootApplication.class, args);
}

}
```
---

### /src/main/java/com/in28minutes/learnspringboot/courses/repository/CourseRepository.java

```java
package com.in28minutes.learnspringboot.courses.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.in28minutes.learnspringboot.courses.bean.Course;

public interface CourseRepository extends JpaRepository<Course, Long> {

}
```
---

### /src/main/java/com/in28minutes/learnspringboot/courses/bean/Course.java

```java
package com.in28minutes.learnspringboot.courses.bean;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Course {

@Id
@GeneratedValue
private long id;

//@Column(name="course_name")
private String name;

private String author;

public Course() {
}

public Course(long id, String name, String author) {
super();
this.id = id;
this.name = name;
this.author = author;
}

public long getId() {
return id;
}

public String getName() {
return name;
}

public String getAuthor() {
return author;
}

@Override
public String toString() {
return "Course [id=" + id + ", name=" + name + ", author=" + author + "]";
}

}
```
---

### /src/main/java/com/in28minutes/learnspringboot/courses/controller/CourseController.java

```java
package com.in28minutes.learnspringboot.courses.controller;

import java.util.List;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.in28minutes.learnspringboot.courses.bean.Course;
import com.in28minutes.learnspringboot.courses.repository.CourseRepository;

@RestController
public class CourseController {

@Autowired
private CourseRepository repository;

// http://localhost:8080/courses
@GetMapping("/courses")
public List<Course> getAllCourses() {
return repository.findAll();
}

//// http://localhost:8080/courses/1
@GetMapping("/courses/{id}")
public Course getCourseDetails(@PathVariable long id) {

Optional<Course> course = repository.findById(id);

if(course.isEmpty()) {
throw new RuntimeException("Course not found with id " + id);
}

return course.get();
}

/*
POST http://localhost:8080/courses
{
"name": "Learn DevOps",
"author": "in28minutes"
}*/

//POST - Create a new resource (/courses)
@PostMapping("/courses")
public void createCourse(@RequestBody Course course){
repository.save(course);
}

/*
PUT - http://localhost:8080/courses/100001
{
"id": 100001,
"name": "Learn Microservices 2",
"author": "in28minutes"
}
*/

//PUT - Update/Replace a resource (/courses/1)
@PutMapping("/courses/{id}")
public void updateCourse(@PathVariable long id, @RequestBody Course course){
repository.save(course);
}


//DELETE - Delete a resource (/courses/1)
@DeleteMapping("/courses/{id}")
public void deleteCourse(@PathVariable long id){
repository.deleteById(id);
}


// docker run --detach
// --env MYSQL_ROOT_PASSWORD=dummypassword
// --env MYSQL_USER=courses-user
// --env MYSQL_PASSWORD=dummycourses
// --env MYSQL_DATABASE=courses
// --name mysql
// --publish 3306:3306 mysql:5.7
}
```
---
Binary file not shown.
Loading

0 comments on commit f045b91

Please sign in to comment.