javascript
Spring Boot微服务,Docker和Kubernetes研讨会–第一部分
在本系列研討會中,我們將使用spring boot,docker構建一些微服務,然后將它們部署到kubernetes中。 因此,讓我們開始吧。
首先,我們需要定義一個問題陳述。 可以說我們要建立一個訂單管理系統。
識別域
第一步將是了解需要哪些域,為簡單起見,假設我們需要以下域:
命令
產品展示
客戶或用戶 購物車
現在我們知道我們正在構建什么,讓我們開始開發。
在本研討會中,我們將使用以下內容
用于微服務的Spring Boot
數據庫的Postgres
構建的搖籃 Docker容器
第一微服務:產品
讓我們為產品構建第一個微服務,我們將其稱為產品服務,其中將包含產品的詳細信息。
步驟1:使用spring初始化程序設置spring boot應用程序。
轉到https://start.spring.io/并使用Java和SpringBoot 2.1.0生成gradle項目,并提供以下值:
群組ID:com.anirudhbhatnagar
工件:productService
dependecies:Web,Jpa,postgresSQL
單擊生成項目,然后下載壓縮的項目。 創建一個名為“ order_management_system”的新目錄。 將項目解壓縮到一個文件夾中,然后將其內容復制到這個新目錄中。
將項目導入到您喜歡的IDE中,我們很容易開始。 通過在終端中運行項目來檢查安裝程序是否運行正常:
./gradlew build由于DataSourceBeanCreationException,構建將失敗,這是因為我們在項目中添加了PostgresSQL依賴關系,但沒有通過提供數據庫憑證及其uri配置數據源。 讓我們在下一步中做。
步驟2:配置數據庫
我們需要一個數據庫來保存產品服務的產品詳細信息。
為此,我們需要兩件事: –正在運行的postgres數據庫 –在Spring配置其詳細信息 首先創建一個本地postgres數據庫。 我們可以使用docker映像來運行本地postgres DB。 為了使postgres數據庫服務器作為docker映像運行,我們需要在系統中安裝docker。 使用此鏈接在您的mac中安裝docker(在Windows和Linux中可以找到類似的鏈接)。 在您的機器上安裝docker之后。 拉出最新的postgres映像,然后在本地運行。 我們還將使用用戶名和密碼初始化數據庫。 在終端中運行以下命令:
這將在您本地的端口5432上啟動一個postgres服務器,并用用戶名“ dbuser”和密碼“ password”初始化一個空的數據庫“ postgres_db”。 一旦數據庫啟動并運行,我們現在將配置Spring Boot應用程序的數據源。 使用Spring Boot的一種方法(也許是最簡單的一種方法)是在application.properties文件中定義數據源URI和數據庫憑據。 Spring Boot將使用這些憑據自動配置數據源。
打開項目中的application.properties文件,然后添加以下內容:
spring.datasource.url=jdbc:postgresql://localhost:5432/products_db spring.datasource.username=dbuser spring.datasource.password=password spring.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect現在,我們已經為應用程序配置了數據庫,讓我們再次運行gradle構建。 建立:
./gradlew build如果一切正常,那么這次構建應該可以通過。 跑 :
./gradlew bootRun現在,我們將在以下位置運行一個應用程序: http:// localhost:8080 /,但是由于我們尚未實現任何服務,因此它將提供一個404。為了使其正常工作,請添加一些代碼。
注意:如果您使用的是postgres版本,則可能會出現以下錯誤:
java.sql.SQLFeatureNotSupportedException: Method org.postgresql.jdbc.PgConnection.createClob() is not yet implemented.出現此異常是因為Atomikos支持的JPA(休眠)正在嘗試驗證PostgreSQL CLOB功能。 JDBC驅動程序未實現此功能,因此驅動程序會引發不重要的異常。 要解決此問題,請將以下內容添加到application.properties文件中:
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true這將禁用驅動程序的功能檢測(無論如何我們都不會使用此功能)
步驟3:在產品服務中添加代碼
現在我們的服務和數據庫已設置完畢,我們可以開始為產品服務編寫一些代碼。 在“ com.anirudhbhatnagar.productService”包中創建一個名為“ domain”的包,并創建一個新的Java類“ Product”,其屬性為:
Lombok
我們將使用Lombok為我們的bean添加構造函數,getter,setter和builder方法。 要使用lombok,請將其依賴項添加到build.gradle文件中:
在“產品”類上添加注釋
@Entity @Builder @AllArgsConstructor @NoArgsConstructor @Getter public class Product {@Id@GeneratedValue(strategy = GenerationType.AUTO)private Long id;private String name;private String description;private String sku; } 注釋的含義:
1. @Entity告訴spring boot JPA將此類視為一個實體,并將其持久保存在數據庫中。
2. @Builder –這個lmobok注釋將builder方法添加到我們的類中,以使用Builder模式創建對象。 3. @AllArgsConstructor –此lmobok批注將所有參數構造函數添加到類中,Builder方法需要此方法。 4. @NoArgsConstructor –該lmobok批注為該類添加了默認構造函數,JPA需要此構造函數來獲取實體。 5. @Getter –這個lombok注釋將getters添加到類中的所有字段,這是獲取產品的各個屬性所必需的,Jackson也使用此方法對字段進行序列化/反序列化。
為了在數據庫中創建該表,我們需要將jpa hibernate auto-ddl設置為true。 為此,將以下行添加到application.properties文件:
spring.jpa.hibernate.ddl-auto =創建
我們還在字段Id中添加了@GeneratedValue和@Id,以告訴hibernate在表中創建新條目時自動為id生成值。
添加控制器
添加一個控制器以實現公開的Web服務,并使用Jackson來對請求進行序列化/反序列化。 在“ com.anirudhbhatnagar.productService”包中創建一個名稱為“ controller”的包,并在其中創建一個新的Java類“ ProductController”。
用“ @RestController”注釋該類,以將該類擴展為公開Web服務的Servlet。 用注解“ @GetMapping”創建端點
@RestController public class ProductController {@GetMapping("/products")public List getProducts() {return Collections.EMPTY_LIST;}@PostMapping("/products")public Product save(@RequestBody Product product) {return null;} } 添加存儲庫
添加JPA存儲庫以將產品持久存儲在數據庫中。 在“ com.anirudhbhatnagar.productService”包中創建一個名稱為“ repository”的包,并在其中創建一個新接口“ ProductRepository”:
將productRepository注入ProductController,以便我們可以使用ProductController中的productRepository將在控制器中接收到的產品請求對象傳遞到存儲庫以進行獲取和持久化。
@RestController public class ProductController {private ProductRepository productRepository;@Autowiredpublic ProductController(ProductRepository productRepository) {this.productRepository = productRepository;}@GetMapping("/products")public List getProducts() {return productRepository.findAll();}@PostMapping("/products")public Product save(@RequestBody Product product) {return productRepository.save(product);} }現在,我們已經啟動了產品服務,并在以下端點上運行:
GET / products –獲取所有產品
POST / products –創建新產品
在這里查看整個代碼。
Dockerise應用
在應用程序的根文件夾中創建一個名為“ dockerFile”的文件,并將以下內容添加到其中:
建立:
docker build .跑 :
docker run -p 8080:8080 [image-id]這應該在localhost:8080啟動服務
測試應用程序:
使用郵遞員或任何其他類似工具,提交此請求以創建產品:
Http POST http:// localhost:8080 / products。 標頭:Content-Type application / json
{ "name" : "Nike shoes", "description" : "mens shoes size 10", "sku" : "1234asc" }可以通過以下方式獲取產品:GET http:// localhost:8080 / products
在下一個研討會中,我們將研究以下內容:
Spring Cloud,用于服務發現和客戶端負載平衡的功能區
OpenFeign客戶端
Kubernetes用于容器管理 API網關
翻譯自: https://www.javacodegeeks.com/2018/11/spring-microservices-docker-kubernetes.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Spring Boot微服务,Docker和Kubernetes研讨会–第一部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何修复无效的目标版本:Maven Bu
- 下一篇: stacktraces_Stacktra