27
1 ธีระยุทธ ทองเครือ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยขอนแก่น Spring Framework & Spring Boot

Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

  • Upload
    others

  • View
    62

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

1

ธระยทธ ทองเครอ

ภาควชาวทยาการคอมพวเตอร คณะวทยาศาสตร

มหาวทยาลยขอนแกน

Spring Framework & Spring Boot

Page 2: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

Java Framework Technologies

2

Page 3: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

Java Runtime Platform

3

Page 4: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

Spring FrameworkFramework ส ำหรบพฒนำแอปพลเคชนส ำหรบองคกรบนแพลตฟอรม

ของจำวำ

เปำหมำยของ Spring คอ ลดเวลำในกำรพฒนำ และเสนอแนวปฏบตทดใหกบนกพฒนำ

เปน Open source ทมขนำดเลก (Lightweight) และสำมำรถเพมขยำยไดงำย

4

Page 5: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

Spring Framework

5

Page 6: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

Dependency Injection Dependency Injection เรยกอกชอหนงวำ IOC (Inversion of Control Principle)

เปนวธกำรออกแบบซอฟทแวรตำม pattern ทมกำรแยก component ตำง ๆ ใหมควำมเกยวของกนนอยทสด (loosely coupled)

Component แตละสวนสำมำรถน ำมำประกอบกน และสำมำรถทดสอบไดอยำงงำยดำย ชวยให reuse code ไปใชใน application อน ๆ ไดงำย ไมมกำร Hard code หรอก ำหนดคำภำยในคลำสตำงๆ โดยตรง แตจะแยกไฟลส ำหรบ Config

ในรปแบบ XML configuration files หรอ จำวำคลำสส ำหรบ Config คำโดยเฉพำะ Spring Container คอ ผทท ำหนำทในกำรฉด (Injecting) หรอสรำง object เขำไปยง object ทม

ควำมเกยวของกน (dependencies of objects) เพอใหเกดกำรท ำงำนรวมกนในแอปพลเคชน Dependency Injection แบงออกเปน 2 ประเภท ไดแก Setter Injection และ Constructor

Injection

6

Page 7: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

Spring BootSpring Boot ไมใช Framework แตเปนเครองมอ

ทชวยสรำง package และรนแอปพลเคชนทสรำงดวย Spring Framework

มชด Starter Library ใหเรยกใชงำนไดสะดวก ลดขนตอนกำรเพม library อนๆ ทเกยวของ

ม Auto Configuration เพอใหลดขนตอนกำรก ำหนดคำตำงๆ

ม Built-in web server เชน Tomcat ชวยใหสรำงแอปพลเคชนแบบแยกสวนกำรท ำงำนไดงำย

7

Page 8: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

Spring Boot Architecture

8

Spring Boot Container

JPA

Hibernate

JDBC Database

Web Container

Spring Data

DAO

DispatcherServlet

Spring Security

RestService

Service

Client

Page 9: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

Spring Boot ท ำอะไรไดบำงตวอยำงโคดและค ำอธบำย Spring Boot ในเคสตำงๆ -> https://spring.io/guides

9

Page 10: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

Spring Boot application starters

10

ชอ Dependency ค ำอธบำยspring-boot-starter ใชกบแอปพลเคชนทใชเฉพำะสวนหลกของ Spring Boot ในสวน auto-configuration ตำงๆspring-boot-starter-web ใชในกำรพฒนำเวบแบบ full-stack ประกอบดวย Tomcat และ spring-webmvcspring-boot-starter-jdbc ใชกบกำรตดตอฐำนขอมลผำน JDBCspring-boot-starter-data-jpa สนบสนน JPA (Java Persistence API) ประกอบดวย spring-data-jpa, spring-orm และ Hibernatespring-boot-starter-data-mongodb สนบสนน MongoDB NoSQL Databasespring-boot-starter-data-rest ใชพฒนำ Web API (RESTful API) จำก spring-data-rest-webmvcspring-boot-starter-freemarker ใช Render หนำแสดงผลโดยไมใชโคดภำษำจำวำดวย FreeMarker templating enginespring-boot-starter-thymeleaf ใช Render หนำแสดงผลโดยไมใชโคดภำษำจำวำดวย Thymeleaf templating enginespring-boot-starter-ws ใชพฒนำ Web Servicesspring-boot-starter-cloud-connectors ใชตดตอกบ “Spring Cloud Connectors” เชน Cloud Foundry และ Herokuspring-boot-starter-security ใชจดกำรควำมปลอดภยในกำรเขำถงระบบspring-boot-starter-social-facebook ใชตดตอกบ Facebook APIspring-boot-starter-social-twitter ใชตดตอกบ Twitter API

Spring Boot มชดแมแบบ (Starter พรอมใช) แบงตำมประเภทของแอปพลเคชน มชอ artifactId ขนตนดวย spring-boot-starter-* สำมำรถน ำชอ Dependency ไประบในไฟล POM ของโปรเจค Maven ซงจะไดชดLibrary .jar ตำงๆ ทเกยวของมำเกบไวในโปรเจคแบบอตโนมต

Page 11: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

กำรสรำง Spring Boot Project

ใชตวสรำงตนแบบจำกเวบ Spring Initializrhttps://start.spring.io/

จะไดไฟลเรมตนส ำหรบน ำไปสรำง Project บนเครองมอทใชพฒนำ เชน Eclipse ในรปแบบ

[ชอโปรเจค].zip

11

Page 12: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

Spring Initializr

12

เลอกทไมใช SNAPSHOT

ใสชอ Project

เลอก Version Java ใหตรงกบทตดตง

Page 13: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

Spring Initializr

13

เลอกชดแมแบบ1. Spring Boot DevTools2. Spring Web3. Spring Data JPA4. MySQL Driver

download ไฟลเรมตน จะไดไฟล .zip

Page 14: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

กำรเปด Project บน Eclipse

14

1. Extract ไฟล .zip ไวทใดกได2. เปดโปรเจค เลอกเมน Open Projects from File System…

เลอกโฟลเดอรทExtract

Page 15: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

โครงสรำงกำรเกบไฟล

15

โฟลเดอรส ำหรบเกบคลำสจำวำ

package ส ำหรบเกบ class file

ไฟล Configuration เกยวกบ Spring Boot Application เชนURL ของฐำนขอมล

Page 16: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

ไฟล application.propertiesกำร Config คำเกยวกบ Spring Boot Application จะถกก ำหนดในไฟล

application.propertiesกำรเกบขอมลจะอยในรปแบบ

property-name = value

แมแบบ spring-boot-starter-web ม Web Container Tomcat ฝงมำในตวแลว และก ำหนด port เปน 8080 ดงนนควร Stop Server ทเคยเปดอย เพอปองกน port ชนกน หรอเปลยน port ของ Spring Boot Application โดยเพม property ดงน

16

Page 17: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

กำร Config คำเกยวกบฐำนขอมล

17

spring.mvc.view.prefix=/jsp/spring.mvc.view.suffix=.jsp

spring.datasource.url = jdbc:mysql://localhost/mydb?characterEncoding=utf-8spring.datasource.username = rootspring.datasource.password =

spring.jpa.show-sql = truespring.jpa.properties.hibernate.format_sql=truespring.jpa.hibernate.ddl-auto = update# spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect

หมำยเหต ภำษำ SQL แบงค ำสงออกเปน 2 สวน1. สวนนยำมขอมล (Data Definition Language: DDL) เชน ค ำสง create/alter/drop table2. สวนจดกำรขอมล (Data Manipulation Language: DML) เชน ค ำสง select, insert, update, delete

ก ำหนดคำส ำหรบทตดตอฐำนขอมลในไฟล application.properties

ก ำหนดใหแสดงค ำสง SQL บน consoletrue - แสดง, false - ไมแสดง

ชอฐำนขอมล

Page 18: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

คำ spring.jpa.hibernate.ddl-autoเปนกำรก ำหนดใหสรำงค ำสงส ำหรบสรำงโครงสรำงตำรำงในฐำนขอมล

(DDL) แบบอตโนมต เมอเจอ Entity class ขณะเรม start spring boot คำทก ำหนดไดประกอบดวย none, create-drop, create , update

create-drop – สรำง schema ตำม Entity class ทมและท ำลำยเมอจบกำรท ำงำน

create – สรำง schema ตำม Entity class ทมแตไมท ำลำยเมอจบกำรท ำงำน

update – หำกยงไมเคยสรำง schema จะสรำงกอน ถำ start server ใหมจะตรวจสอบวำ entity มกำรปรบปรงหรอไม ถำมจะเพมใหอตโนมต

18

Page 19: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

ตวอยำง property อนๆ

19

# EMBEDDED SERVER CONFIGURATION (ServerProperties)server.port=8080server.address= # bind to a specific NICserver.session-timeout= # session timeout in seconds

# HTTP encoding (HttpEncodingProperties)

# encoding of HTTP requests/responsesspring.http.encoding.charset=UTF-8

# enable http encoding supportspring.http.encoding.enabled=true

# force the configured encodingspring.http.encoding.force=true

ด property อน ๆ ไดจำก https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#json-properties

Page 20: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

ทดสอบสรำง Controller

@RestController

public class FirstController {

@GetMapping("/hello")

public String home() {

return "Hello World";

}

}

20

ระบวำใหคลำสนเปน Controller ของ RESTful API

ก ำหนด Path ของ HTTP request ทใชเขำถงเมธอดนแบบ GET

สง HTTP response กลบไปดวยขอควำมธรรมดำ (plain text)

Page 21: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

คลำสส ำหรบรน Spring Boot ApplicationSpring Initializr จะสรำงคลำสหลกส ำหรบใชในกำรรน Spring Boot Application มำ

ใหแลว

21

@SpringBootApplication

public class MainApplication {

public static void main(String[] args) {

SpringApplication.run(MainApplication.class, args);

}

}

annotation เพอใหมกำร config แอปพลเคชนแบบอตโนมต

สงให Spring Boot Application เรมท ำงำน ใชรบคำทำง command line

คลำสเรมตนจะมเมธอด main( )

Page 22: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

กำรรน Spring Boot Applicationคลกขวำทคลำสหลก เลอก Run As > Java Application

22

Page 23: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

กำรรน Spring Boot Application

23

ใช port 8080

ผลลพธจำกกำรสง HTTP Request ผำน Browser

Version ของ Spring Boot ทใช

Page 24: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

กำรสรำง Executable jar file (fat jars)Spring Boot Application ทสรำงเสรจแลว สำมำรถน ำไปรนทเครองใดกไดทม JRE

แตตองสรำง Executable jar file ขนมำกอนคลกขวำทชอ Project เลอก Run As > Maven build… ทชอง Goals ใสค ำวำ "package" และกดปม Run

24

Page 25: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

ก ำหนดต ำแหนง Java SE

25

1. เลอกแทบ JRE

2. คลก

3. เลอก JavaSEVersion ทตรงกบ Project

4. เรม package

Page 26: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

jar file ทไดคลกขวำทชอ Project > Refresh จะเหนไฟล Executable jar file (.jar) ภำยใน

โฟลเดอร target

26

Page 27: Spring Boot & Framework - Spring Boot.pdf · spring-boot-starter-jdbc ใช้กับกำรติดต่อฐำนขอ้มูลผ่ำนJDBC spring-boot-starter-data-jpa

กำรรน Executable jar file คลกขวำทโฟลเดอร target

เลอก Show In > System Explorer

กดปม Shift คำงไวแลวคลกขวำทโฟลเดอร targetเลอก Open command window here

พมพค ำสงเพอเปดกำรท ำงำนไฟล .jar ทสรำงขน รปแบบดงน

java -jar ชอไฟล.jar

27หมำยเหต ควร stop กำรท ำงำนใน Eclipse กอน เพรำะ port จะชนกน