Spring Boot - Kotlin
Overview
Github: https://github.com/gitorko/project03
Code
1package com.demo.project03
2
3import com.demo.project03.domain.Customer
4import com.demo.project03.repo.CustomerRepository
5import org.slf4j.Logger
6import org.slf4j.LoggerFactory
7import org.springframework.boot.CommandLineRunner
8import org.springframework.boot.autoconfigure.SpringBootApplication
9import org.springframework.boot.runApplication
10import org.springframework.context.annotation.Bean
11
12@SpringBootApplication
13class Main {
14 private val log: Logger = LoggerFactory.getLogger(this::class.java)
15
16 @Bean
17 fun onStart(repo: CustomerRepository) = CommandLineRunner {
18 log.info("Seeding!")
19 val customer = Customer(0, "Jack", 35)
20 repo.save(customer)
21 }
22}
23
24fun main(args: Array<String>) {
25 runApplication<Main>(*args)
26}
1package com.demo.project03.controller
2
3import com.demo.project03.domain.Customer
4import com.demo.project03.repo.CustomerRepository
5import org.slf4j.Logger
6import org.slf4j.LoggerFactory
7import org.springframework.beans.factory.annotation.Autowired
8import org.springframework.web.bind.annotation.GetMapping
9import org.springframework.web.bind.annotation.PostMapping
10import org.springframework.web.bind.annotation.RequestBody
11import org.springframework.web.bind.annotation.RestController
12
13@RestController
14class HomeController {
15
16 private val log: Logger = LoggerFactory.getLogger(this::class.java)
17
18 @Autowired
19 lateinit var repo: CustomerRepository
20
21 @GetMapping("/customer")
22 fun getCustomer(): MutableIterable<Customer> {
23 log.info("Getting customers!")
24 return repo.findAll()
25 }
26
27 @PostMapping("/customer")
28 fun save(@RequestBody customer: Customer): Customer {
29 return repo.save(customer)
30 }
31}
1package com.demo.project03.domain
2
3import org.springframework.data.annotation.Id
4import java.time.LocalDateTime
5import javax.persistence.Entity
6import javax.persistence.GeneratedValue
7import javax.persistence.GenerationType
8import javax.persistence.Table
9
10@Entity
11@Table(name = "customer")
12data class Customer(
13 @javax.persistence.Id @Id
14 @GeneratedValue(strategy = GenerationType.IDENTITY)
15 val id: Long = 0,
16 val name: String,
17 val age: Int,
18 val createdAt: LocalDateTime = LocalDateTime.now(),
19)
1package com.demo.project03.repo
2
3import com.demo.project03.domain.Customer
4import org.springframework.data.jpa.repository.JpaRepository
5import org.springframework.stereotype.Repository
6
7@Repository
8interface CustomerRepository : JpaRepository<Customer, Long>
Postman
Import the postman collection to postman
Setup
Project03
kotlin spring boot rest
https://github.com/gitorko/project03
Version
Check version
1$java --version
2openjdk 17.0.3 2022-04-19 LTS
Postgres DB
1docker run -p 5432:5432 --name pg-container -e POSTGRES_PASSWORD=password -d postgres:9.6.10
2docker ps
3docker exec -it pg-container psql -U postgres -W postgres
4CREATE USER test WITH PASSWORD 'test@123';
5CREATE DATABASE "test-db" WITH OWNER "test" ENCODING UTF8 TEMPLATE template0;
6grant all PRIVILEGES ON DATABASE "test-db" to test;
7
8docker stop pg-container
9docker start pg-container
Dev
To run the backend in dev mode.
1./gradlew clean build
2./gradlew bootRun
Prod
To run as a single jar, both UI and backend are bundled to single uber jar.
1./gradlew bootJar
2java -jar build/libs/project03-1.0.0.jar
References
comments powered by Disqus