Spring Boot - คุณสมบัติการใช้งาน

คุณสมบัติของแอปพลิเคชันสนับสนุนให้เราทำงานในสภาพแวดล้อมที่แตกต่างกัน ในบทนี้คุณจะได้เรียนรู้วิธีกำหนดค่าและระบุคุณสมบัติของแอปพลิเคชัน Spring Boot

คุณสมบัติบรรทัดคำสั่ง

แอ็พพลิเคชัน Spring Boot แปลงคุณสมบัติบรรทัดคำสั่งเป็นคุณสมบัติ Spring Boot Environment คุณสมบัติบรรทัดคำสั่งมีความสำคัญเหนือกว่าแหล่งคุณสมบัติอื่น ๆ ตามค่าเริ่มต้น Spring Boot จะใช้หมายเลขพอร์ต 8080 เพื่อเริ่ม Tomcat ให้เราเรียนรู้วิธีเปลี่ยนหมายเลขพอร์ตโดยใช้คุณสมบัติบรรทัดคำสั่ง

Step 1 - หลังจากสร้างไฟล์ JAR ที่เรียกใช้งานได้แล้วให้รันโดยใช้คำสั่ง java –jar <JARFILE>.

Step 2 - ใช้คำสั่งที่กำหนดในภาพหน้าจอด้านล่างเพื่อเปลี่ยนหมายเลขพอร์ตสำหรับแอปพลิเคชัน Spring Boot โดยใช้คุณสมบัติบรรทัดคำสั่ง

Note - คุณสามารถระบุคุณสมบัติของแอปพลิเคชันได้มากกว่าหนึ่งรายการโดยใช้ตัวคั่น -

ไฟล์คุณสมบัติ

ไฟล์คุณสมบัติใช้เพื่อเก็บจำนวนคุณสมบัติ 'N' ไว้ในไฟล์เดียวเพื่อเรียกใช้แอปพลิเคชันในสภาพแวดล้อมที่แตกต่างกัน ใน Spring Boot คุณสมบัติจะถูกเก็บไว้ในไฟล์application.properties ไฟล์ภายใต้ classpath

ไฟล์ application.properties อยู่ในไฟล์ src/main/resourcesไดเรกทอรี รหัสสำหรับตัวอย่างapplication.properties ไฟล์ได้รับด้านล่าง -

server.port = 9090
spring.application.name = demoservice

โปรดทราบว่าในโค้ดที่แสดงด้านบนบริการสาธิตแอปพลิเคชัน Spring Boot เริ่มต้นที่พอร์ต 9090

ไฟล์ YAML

Spring Boot รองรับการกำหนดค่าคุณสมบัติตาม YAML เพื่อเรียกใช้แอปพลิเคชัน แทนapplication.properties, เราสามารถใช้ application.ymlไฟล์. ไฟล์ YAML นี้ควรถูกเก็บไว้ใน classpath ตัวอย่างapplication.yml ไฟล์ได้รับด้านล่าง -

spring:
   application:
      name: demoservice
   server:
port: 9090

คุณสมบัติภายนอก

แทนที่จะเก็บไฟล์คุณสมบัติไว้ภายใต้ classpath เราสามารถเก็บคุณสมบัติไว้ในตำแหน่งหรือเส้นทางอื่นได้ ขณะรันไฟล์ JAR เราสามารถระบุพา ธ ไฟล์คุณสมบัติ คุณสามารถใช้คำสั่งต่อไปนี้เพื่อระบุตำแหน่งของไฟล์คุณสมบัติขณะรัน JAR -

-Dspring.config.location = C:\application.properties

การใช้ @Value Annotation

คำอธิบายประกอบ @Value ใช้เพื่ออ่านค่าคุณสมบัติของสภาวะแวดล้อมหรือแอ็พพลิเคชันในโค้ด Java ไวยากรณ์ในการอ่านค่าคุณสมบัติแสดงอยู่ด้านล่าง -

@Value("${property_key_name}")

ดูตัวอย่างต่อไปนี้ที่แสดงไวยากรณ์ที่จะอ่าน spring.application.name ค่าคุณสมบัติในตัวแปร Java โดยใช้คำอธิบายประกอบ @Value

@Value("${spring.application.name}")

สังเกตรหัสที่ระบุด้านล่างเพื่อความเข้าใจที่ดีขึ้น -

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {
   @Value("${spring.application.name}")
   private String name;
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
   @RequestMapping(value = "/")
   public String name() {
      return name;
   }
}

Note - หากไม่พบคุณสมบัติขณะรันแอปพลิเคชัน Spring Boot จะโยนข้อยกเว้น Illegal Argument เป็น Could not resolve placeholder 'spring.application.name' in value "${spring.application.name}".

ในการแก้ไขปัญหาตัวยึดตำแหน่งเราสามารถตั้งค่าเริ่มต้นสำหรับคุณสมบัติโดยใช้ไวยากรณ์ thr ที่ระบุด้านล่าง -

@Value("${property_key_name:default_value}")

@Value("${spring.application.name:demoservice}")

โปรไฟล์ Spring Boot Active

Spring Boot รองรับคุณสมบัติต่างๆตามโปรไฟล์ที่ใช้งาน Spring ตัวอย่างเช่นเราสามารถเก็บไฟล์สองไฟล์แยกกันสำหรับการพัฒนาและการผลิตเพื่อเรียกใช้แอปพลิเคชัน Spring Boot

Spring โปรไฟล์ที่ใช้งานอยู่ใน application.properties

ให้เราเข้าใจวิธีการมี Spring active profile ใน application.properties โดยค่าเริ่มต้นแอปพลิเคชัน คุณสมบัติจะถูกใช้เพื่อเรียกใช้แอปพลิเคชัน Spring Boot หากคุณต้องการใช้คุณสมบัติตามโปรไฟล์เราสามารถเก็บไฟล์คุณสมบัติแยกกันสำหรับแต่ละโปรไฟล์ดังที่แสดงด้านล่าง -

application.properties

server.port = 8080
spring.application.name = demoservice

application-dev.properties

server.port = 9090
spring.application.name = demoservice

application-prod.properties

server.port = 4431
spring.application.name = demoservice

ในขณะที่รันไฟล์ JAR เราจำเป็นต้องระบุ spring active profile ตามแต่ละไฟล์คุณสมบัติ โดยดีฟอลต์แอ็พพลิเคชัน Spring Boot ใช้ไฟล์ application.properties คำสั่งในการตั้งค่าโปรไฟล์ที่ใช้งานสปริงแสดงอยู่ด้านล่าง -

คุณสามารถดูชื่อโปรไฟล์ที่ใช้งานได้ในบันทึกของคอนโซลดังที่แสดงด้านล่าง -

2017-11-26 08:13:16.322  INFO 14028 --- [           
   main] com.tutorialspoint.demo.DemoApplication  :
   The following profiles are active: dev

ตอนนี้ Tomcat ได้เริ่มต้นบนพอร์ต 9090 (http) ดังที่แสดงด้านล่าง -

2017-11-26 08:13:20.185  INFO 14028 --- [           
   main] s.b.c.e.t.TomcatEmbeddedServletContainer : 
   Tomcat started on port(s): 9090 (http)

คุณสามารถตั้งค่าโปรไฟล์ที่ใช้งานการผลิตได้ดังที่แสดงด้านล่าง -

คุณสามารถดูชื่อโปรไฟล์ที่ใช้งานได้ในบันทึกของคอนโซลดังที่แสดงด้านล่าง -

2017-11-26 08:13:16.322  INFO 14028 --- [           
   main] com.tutorialspoint.demo.DemoApplication  :
   The following profiles are active: prod

ตอนนี้ Tomcat เริ่มต้นที่พอร์ต 4431 (http) ดังที่แสดงด้านล่าง -

2017-11-26 08:13:20.185  INFO 14028 --- [          
   main] s.b.c.e.t.TomcatEmbeddedServletContainer :
   Tomcat started on port(s): 4431 (http)

Spring active profile สำหรับ application.yml

ให้เราเข้าใจวิธีการเก็บ Spring active profile สำหรับ application.yml เราสามารถเก็บคุณสมบัติ Spring active profile ไว้ใน singleapplication.ymlไฟล์. ไม่จำเป็นต้องใช้ไฟล์แยกต่างหากเช่น application.properties

ต่อไปนี้เป็นโค้ดตัวอย่างสำหรับเก็บ Spring active profiles ไว้ในไฟล์ application.yml โปรดสังเกตว่าตัวคั่น (---) ใช้เพื่อแยกแต่ละโปรไฟล์ในไฟล์ application.yml

spring:
   application:
      name: demoservice
server:
   port: 8080

---
spring:
   profiles: dev
   application:
      name: demoservice
server:
   port: 9090

---
spring: 
   profiles: prod
   application:
      name: demoservice
server: 
   port: 4431

คำสั่งเพื่อตั้งค่าโปรไฟล์ที่ใช้งานการพัฒนาได้รับด้านล่าง -

คุณสามารถดูชื่อโปรไฟล์ที่ใช้งานได้ในบันทึกของคอนโซลดังที่แสดงด้านล่าง -

2017-11-26 08:41:37.202  INFO 14104 --- [           
   main] com.tutorialspoint.demo.DemoApplication  : 
   The following profiles are active: dev

ตอนนี้ Tomcat เริ่มต้นที่พอร์ต 9090 (http) ดังที่แสดงด้านล่าง -

2017-11-26 08:41:46.650  INFO 14104 --- [           
   main] s.b.c.e.t.TomcatEmbeddedServletContainer : 
   Tomcat started on port(s): 9090 (http)

คำสั่งในการตั้งค่าโปรไฟล์ที่ใช้งานการผลิตได้รับด้านล่าง -

คุณสามารถดูชื่อโปรไฟล์ที่ใช้งานได้ในบันทึกของคอนโซลดังที่แสดงด้านล่าง -

2017-11-26 08:43:10.743  INFO 13400 --- [    
   main] com.tutorialspoint.demo.DemoApplication  : 
   The following profiles are active: prod

สิ่งนี้จะเริ่ม Tomcat บนพอร์ต 4431 (http) ดังที่แสดงด้านล่าง:

2017-11-26 08:43:14.473  INFO 13400 --- [     
   main] s.b.c.e.t.TomcatEmbeddedServletContainer : 
   Tomcat started on port(s): 4431 (http)