sách gpt4 ăn đã đi

Giải quyết các cạm bẫy mà SpringBoot gặp phải khi sử dụng yaml làm tệp cấu hình

In lại Tác giả: qq735679552 Thời gian cập nhật: 27-09-2022 22:32:09 26 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN này giải quyết những cạm bẫy mà SpringBoot gặp phải khi sử dụng yaml làm file cấu hình. Nó được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.

  。

Những cạm bẫy gặp phải với SpringBoot yaml dưới dạng tệp cấu hình

  。

lý lịch

Gần đây tôi đã bắt đầu một dự án mới và xây dựng lại khung phát triển dựa trên SpringBoot.

Nguyên nhân của sự cố là khi tôi tiến hành kiểm tra đơn vị dao, nó liên tục bị lỗi. Thông báo lỗi có thể là "thuộc tính maxActive không thể bằng 0 khi tạo dataSource." Dựa trên kinh nghiệm trước đây, có thể thuộc tính cấu hình đã không được tải thành công. Khi khắc phục sự cố lớp thuộc tính cấu hình được chú thích bằng chú thích @ConfigurationProperties, tại sao các thuộc tính trong application.yml không được đưa vào?

Kiểm tra nhật ký gỡ lỗi, tôi tìm thấy một dòng nhật ký rất lạ.

Đã bỏ qua (trống) tệp cấu hình "file:/E:/workspace/union-service/union-service-dao/target/test-classes/application.yml" (classpath:/application.yml)

Rõ ràng là nó không trống rỗng! Tôi nghi ngờ tên tệp bị sai. Tôi đã xác nhận và thử lại nhiều lần nhưng vẫn không được.

Đã gỡ lỗi lớp PropertySourcesLoader.

public PropertySource load(Resource resource, String group, String name, String profile) throws IOException {if (isFile(resource)) { String sourceName = generatePropertySourceName(name, profile); for (PropertySourceLoader loader : this.loaders) { if (canLoadFileExtension(loader, resource)) { PropertySource specific = loader.load(sourceName, resource, profile); addPropertySource(group, specific, profile); return specific; } }}return null;}

Phương thức tải của lớp YamlPropertySourceLoader:

@Overridepublic PropertySource load(String name, Resource resource, String profile) throws IOException {if (ClassUtils.isPresent("org.yaml.snakeyaml.Yaml", null)) { Bộ xử lý processor = new Processor(resource, profile); Map source = processor.process(); if (!source.isEmpty()) { return new MapPropertySource(name, source); }}return null;}

Tìm lớp "org.yaml.snakeyaml.Yaml" và trả về null nếu nó không tồn tại. Việc sửa đổi mã dự án của tôi thật dễ dàng, chỉ cần thêm phần phụ thuộc của Snakeyaml.

Nhưng khi đoạn mã SpringBoot được thực thi ở đây có nghĩa là file tài nguyên đã tồn tại. Bởi vì không có lớp nào để phân tích yaml, hãy bỏ qua nó và tìm các file cấu hình phù hợp khác. nhắc nhở bạn về mật mã bất cẩn và bướng bỉnh thì sao?

  。

Tôi cảm thấy sẽ tốt hơn nếu sửa đổi nó, đại loại như thế này:

@Overridepublic PropertySource load(String name, Resource resource, String profile) throws IOException {if (ClassUtils.isPresent("org.yaml.snakeyaml.Yaml", null)) { Bộ xử lý processor = new Processor(resource, profile); Map source = processor.process(); if (!source.isEmpty()) { return new MapPropertySource(name, source); }} else { logger.warn("Đã tìm thấy " + name + " khi thiếu snakeyaml");}return null;}

Các vấn đề liên quan đã được gửi tới Spring Boot trên github.

  。

Chèn cấu hình SpringBoot-yaml

  。

cú pháp cơ bản yaml

Lưu ý: Yêu cầu ngữ pháp rất nghiêm ngặt! .

1. Không được bỏ sót dấu cách.

2. Sử dụng thụt lề để kiểm soát các mối quan hệ phân cấp miễn là một cột dữ liệu được căn chỉnh sang trái thì nó ở cùng cấp độ.

3. Trường hợp thuộc tính và giá trị rất nhạy cảm.

  。

Nghĩa đen: giá trị thông thường [số, boolean, chuỗi]

Giá trị bằng chữ có thể được viết trực tiếp ở cuối và chuỗi không cần phải được đặt trong dấu ngoặc kép hoặc dấu ngoặc đơn theo mặc định;

k:v。

Để ý:

" " Dấu ngoặc kép sẽ không thoát khỏi các ký tự đặc biệt trong chuỗi và các ký tự đặc biệt sẽ được sử dụng làm ý nghĩa mà chúng muốn diễn đạt;

Ví dụ :

tên yaml: "kuang shen"

Đầu ra:

yaml kang dòng mới shen.

""Dấu ngoặc đơn sẽ thoát khỏi các ký tự đặc biệt và các ký tự đặc biệt cuối cùng sẽ được xuất ra như các ký tự thông thường.

Ví dụ :

tên yaml: 'kuang shen"

Đầu ra:

yaml kung she.

  。

Đối tượng, Bản đồ (cặp khóa-giá trị)

#Object, Định dạng bản đồ k: v1: v2:

Viết các thuộc tính và mối quan hệ giá trị của đối tượng trên dòng tiếp theo, chú ý đến vết lõm, ví dụ:

học sinh: tên: qinjiang tuổi: 3

Viết nội tuyến.

học sinh: {name: qinjiang,age: 3}

  。

Mảng (Danh sách, bộ)

Sử dụng - value để biểu diễn một phần tử trong mảng, ví dụ:

vật nuôi: - mèo - chó - lợn

Viết nội tuyến.

vật nuôi: [mèo, chó, lợn]

  。

Sửa đổi số cổng mặc định của SpringBoot

Bằng cách thêm tham số số cổng vào tệp cấu hình, bạn có thể chuyển đổi cổng;

máy chủ: cổng: 8082

  。

tập tin cấu hình tiêm yaml

  。

phương pháp ban đầu

1. Tạo một tệp mới application.yml trong thư mục tài nguyên của dự án springboot.

2. Viết một lớp thực thể Dog;

package com.kuang.springboot.pojo;@Component //Đăng ký Bean vào container public class Dog { Private String name; Private Integer age; //Xây dựng có tham số và không có tham số, phương thức get, set, toString() }

3. Hãy nghĩ về cách chúng ta chèn các giá trị thuộc tính vào đậu! @Value, kiểm tra nó trên lớp chó:

@Component // Thành phần beanpublic class Dog { @Value("阿黄") private String name; @Value("18") private Integer age;}

4. Đưa đầu ra của con chó vào lớp kiểm tra SpringBoot;

@SpringBootTestclass DemoApplicationTests { @Autowired // Tự động tiêm con chó vào Dog dog; @Test public void contextLoads() { System.out.println(dog);

Kết quả được xuất thành công và @Value được chèn thành công. Đây là phương thức ban đầu.

Giải quyết các cạm bẫy mà SpringBoot gặp phải khi sử dụng yaml làm tệp cấu hình

  。

phương pháp Yaml

Chúng tôi đang viết một lớp thực thể: Lớp người.

@Component // Đăng ký đậu vào vùng chứa công khai lớp Person { tên chuỗi riêng tư; số nguyên riêng tư hạnh phúc; riêng tư Ngày sinh; bản đồ riêng tư; / /Xây dựng có tham số và không có tham số, phương thức get, set, phương thức toString() }

Sử dụng cấu hình yaml để tiêm Hãy chú ý đến sự khác biệt và ưu điểm khi viết cấu hình yaml! .

người: tên: qinjiang tuổi: 3 hạnh phúc: giả ngày sinh: 2000/01/01 bản đồ: {k1: v1,k2: v2} danh sách: - mã - cô gái - âm nhạc chó: tên: 旺财 tuổi: 1

Tất cả các giá trị của đối tượng người đã được ghi và bây giờ là lúc đưa chúng vào lớp.

/* Hàm @ConfigurationProperties: Ánh xạ giá trị của từng thuộc tính được định cấu hình trong tệp cấu hình tới thành phần này; yêu cầu SpringBoot liên kết tất cả các thuộc tính trong lớp này với cấu hình có liên quan trong tệp cấu hình. người trong tệp cấu hình một đối một */@Component //Đăng ký Bean@ConfigurationProperties(prefix = "person")public class Person { Private String name; Private Integer age; Ngày sinh; Bản đồ riêng bản đồ; Danh sách riêng tư chó;}

Sau khi xác nhận cấu hình trên, hãy kiểm tra nó trong lớp kiểm tra.

@SpringBootTestclass DemoApplicationTests { @Autowired Person Person; // Tự động tiêm người @Test public void contextLoads() { System.out.println(person);

Kết quả: Tất cả các giá trị đã được chèn thành công.

Giải quyết các cạm bẫy mà SpringBoot gặp phải khi sử dụng yaml làm tệp cấu hình

Tải tập tin cấu hình được chỉ định.

@PropertySource: Tải tệp cấu hình được chỉ định;

@configurationProperties: Theo mặc định, giá trị được lấy từ tệp cấu hình chung;

  。

Sử dụng @PropertySource

1. Tạo tệp Person.properties mới trong thư mục tài nguyên.

tên=quan thần

2. Sau đó chỉ định trong mã để tải tệp Person.properties.

@PropertySource(value = "classpath:person.properties")@Component // Sử dụng beanpublic class Person { @Value("${name}") private String name; ...... }

3. Kiểm tra lại đầu ra: tệp cấu hình được chỉ định đã được liên kết thành công.

Giải quyết các cạm bẫy mà SpringBoot gặp phải khi sử dụng yaml làm tệp cấu hình

  。

Sử dụng @configurationProperties

Được sử dụng với các tập tin yaml, vui lòng xem chương trình trên để biết chi tiết.

  。

Tóm lại

Giá trị có thể đạt được bằng cách định cấu hình yml và định cấu hình thuộc tính yml;

Nếu chúng ta đang kinh doanh một số ngành nghề nhất định và chỉ cần lấy một giá trị nhất định trong tệp cấu hình, chúng ta có thể sử dụng @value;.

Nếu chúng tôi đặc biệt viết JavaBean để ánh xạ 1-1 với tệp cấu hình, chỉ cần @configurationProperties trực tiếp, đừng ngần ngại! .

Trên đây là kinh nghiệm cá nhân của mình, hi vọng có thể cho các bạn tham khảo và mong các bạn có thể ủng hộ mình.

Link gốc: https://my.oschina.net/bfleeee/blog/879209.

Cuối cùng, bài viết về cách giải quyết những cạm bẫy mà SpringBoot gặp phải khi sử dụng yaml làm tệp cấu hình sẽ kết thúc tại đây. Nếu bạn muốn biết thêm về cách giải quyết những cạm bẫy mà SpringBoot gặp phải khi sử dụng yaml làm tệp cấu hình, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục. bài viết, hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress