2015-02-06 21 views
5

Có cách nào để nói với IntelliJ rằng một tệp .properties cụ thể sẽ được tải vào môi trường của dự án không? Chúng tôi sử dụng @PropertySource chú thích để tải các tập tin thuộc tính, và ở một số nơi tải các giá trị override từ một tập tin xác định bởi một đặc tính đã được cấu hình, như vậy:Làm cho IntelliJ biết về một tệp thuộc tính

@Configuration 
@PropertySource("classpath:com/example/package/db.properties") 
@PropertySource("classpath:com/example/package/db.${db.instance}.properties") 
public class DatabaseConfig { 
    private @Value("${db.someProperty}") String someDBProperty; 
    // ... 
} 

Vấn đề là trong một trong những tập tin gián tiếp tham chiếu, ví dụ db.test.properties, IntelliJ không biết liệu tệp thuộc tính có được tham chiếu hay không, do đó, nó không thể kết hợp bất kỳ mục nhập nào với tập quán của chúng. (Bizarrely, một số thuộc tính của các thuộc tính được liệt kê trong các tệp này không được tô xám để chỉ ra 'Thuộc tính không sử dụng', mặc dù ngay cả những kết quả này không cho kết quả tìm kiếm 'Tìm kiếm tập quán'. Không có vấn đề với tệp được đặt tên trực tiếp, ví dụ: db.properties ở trên.

Có cách nào để nói với IntelliJ về những tệp này ngắn tạo thêm giả @Configuration tệp tham chiếu đến chúng không?

+0

Bạn đã bao giờ tìm thấy một giải pháp cho điều này? Trái với hoàn cảnh của bạn, khi tôi sử dụng Spel trong mã Java của tôi, các thuộc tính luôn được đánh dấu là không sử dụng. –

Trả lời

2

Đây là cách tôi làm điều đó:

  • Từ thám hiểm dự án, tôi nhấp chuột phải trong src/main/nguồn lực, tôi lơ lửng trên "Mark mục As ..." và tôi bấm vào "Root Tài "

enter image description here

  • trong cấu hình Spring tôi chỉ cần chỉ định tên của các thuộc tính tập tin trực tiếp.

Dưới đây là một ví dụ khi tôi đang làm điều này trong một trong những dự án của tôi: https://github.com/SFRJ/springpractice/blob/master/src/main/java/part3/PropertiesLoaderConfiguration.java

Bằng cách này, nếu bạn đang sử dụng nhiều nguồn tài sản mà bạn cũng có thể làm một cái gì đó như thế này:

@PropertySources({ 
     @PropertySource("a.properties"), 
     @PropertySource("b.properties") 
    }) 
+0

Cảm ơn câu trả lời của bạn sfrj, tôi không chắc chắn điều này trả lời câu hỏi mặc dù - Tôi muốn tham khảo các nguồn tài sản khác nhau tùy thuộc vào một tài sản đã được tải. Ví dụ. trong ví dụ tôi đưa ra nơi tôi muốn tải cấu hình cho một cá thể cơ sở dữ liệu cụ thể, trong đó cá thể DB sử dụng đã được cấu hình ở nơi khác (trong trường hợp của tôi, nó được tra cứu tại thời điểm khởi động ứng dụng phụ thuộc vào máy chủ đang chạy). – yjo

+0

Ngoài ra, chú thích PropertySources không cần thiết từ Java 8 hỗ trợ các chú thích lặp lại. – yjo

+0

Sự cố của tôi khác (đơn giản). Tôi muốn mở tệp thuộc tính bằng cách sử dụng Thuộc tính thuộc tính = null; InputStream là = getClass(). GetClassLoader(). GetResourceAsStream ("mysql.properties") properties.load (is); nhưng luôn luôn là rỗng. Câu trả lời của sfrj đã giải quyết được vấn đề của tôi –

Các vấn đề liên quan