2016-07-09 42 views
8

Tôi có một ứng dụng khởi động mùa xuân và tôi muốn đọc một số biến từ tệp application.properties của mình. Infact trên mã làm điều đó. Nhưng tôi nghĩ có một phương pháp tốt cho phương án này.Cách đọc dữ liệu từ tệp thuộc tính java bằng cách sử dụng Spring Boot

Properties prop = new Properties(); 
InputStream input = null; 

try { 
    input = new FileInputStream("config.properties"); 
    prop.load(input); 
    gMapReportUrl = prop.getProperty("gMapReportUrl"); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} finally { 
    ... 
} 

Trả lời

19

Bạn có thể sử dụng @PropertySource để externalize cấu hình của mình thành tệp thuộc tính. Có số cách để làm điều có được thuộc tính:

1. Gán các giá trị tài sản cho các lĩnh vực bằng cách sử dụng @Value với PropertySourcesPlaceholderConfigurer để giải quyết ${} trong @Value:

@Configuration 
@PropertySource("file:config.properties") 
public class ApplicationConfiguration { 

    @Value("${gMapReportUrl}") 
    private String gMapReportUrl; 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 

} 

2. Nhận tài sản các giá trị bằng cách sử dụng Environment:

@Configuration 
@PropertySource("file:config.properties") 
public class ApplicationConfiguration { 

    @Autowired 
    private Environment env; 

    public void foo() { 
     env.getProperty("gMapReportUrl"); 
    } 

} 

Hy vọng điều này có thể giúp

+0

Tại sao foo void? Làm thế nào để sử dụng lớp học này? – gstackoverflow

-1

Tôi khuyên bạn nên sử dụng gói tài nguyên là cách đọc tập tin thuộc tính chuẩn trên đường dẫn lớp (cũng có thể được sử dụng trên các tệp cụ thể).

Lưu ý rằng các gói tài nguyên thường được sử dụng với các tệp lưu trữ các cặp khóa giá trị.

Mã mẫu:

ResourceBundle bundle = ResourceBundle.getBundle("config"); //creates bundle from file `config.properties` 
List<String> keys = (List<String>) bundle.getKeys(); //gets the list of keys found in the bundle (file) 
String value = bundle.getString("gMapReportUrl"); //gets the value for the key `mykey` 

config.properties:

gMapReportUrl = somevalue

someOtherKey = ngẫu nhiên

Sử dụng một sự kết hợp của các phương pháp này bạn sẽ có thể để có được tất cả dữ liệu bạn cần từ bạn tệp perty.

+0

Không phải là cách thích hợp để truy cập các tệp thuộc tính trong các ứng dụng Spring. –

+0

khởi động mùa xuân có triển khai tốt hơn bro ... – SAM

3

tôi sẽ đề nghị theo cách sau:

@PropertySource(ignoreResourceNotFound = true, value = "classpath:otherprops.properties") 
@Controller 
public class ClassA { 
    @Value("${myName}") 
    String name; 

    @RequestMapping(value = "/xyz") 
    @ResponseBody 
    public void getName(){ 
     System.out.println(name); 
    } 
} 

Đây nộp tính mới của bạn tên là "otherprops.properties" và tên thuộc tính là "Myname". Đây là cách triển khai đơn giản nhất để truy cập tệp thuộc tính trong phiên bản khởi động mùa xuân 1.5.8.

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