2014-07-25 11 views
9

पर जाने के बाद @Value और application.properties के साथ समस्या जारी करें क्योंकि मुझे एक समस्या है क्योंकि मैं संस्करण 1.1.4 पर चला गया। स्प्रिंग बूट का रिलीज।स्प्रिंग बूट 1.1.4.RELEASE

@ वैल्यू के साथ एनोटेट किए गए मेरे चर वर्तमान में आवेदन में मौजूद होने के बावजूद मूल्यों के साथ पॉप्युलेट नहीं किए जा रहे हैं। प्रॉपर्टीज। इससे पहले मैं स्प्रिंग बूट @ संस्करण 1.0.2 का उपयोग कर रहा था, और यह ठीक काम कर रहा था।

यह सब अपग्रेड के बाद से शुरू हुआ, और मैंने कोई कोड परिवर्तन नहीं किया।

SampleApplication.java

package org.sample; 

import org.springframework.beans.factory.annotation.Value; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.PropertySource; 
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; 

@Configuration 
@ComponentScan 
@EnableAutoConfiguration 
@PropertySource(value = "classpath:application.properties") 
public class SampleApplication { 

private static Logger logger = LoggerFactory 
     .getLogger(TaskManagerApplication.class); 

@Value("${org.sample.sampleProperty}") 
private static String sampleProperty; 

public static void main(String[] args) { 

    SpringApplication.run(SampleApplication.class, args); 
    System.out.print("SampleApplication started: " + sampleProperty); 

} 

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 

    return new PropertySourcesPlaceholderConfigurer(); 

} 
} 

application.properties

spring.datasource.url: jdbc:mysql://127.0.0.1:3306/mydb 
spring.datasource.username: root 
spring.datasource.password: root 
spring.datasource.driverClassName: com.mysql.jdbc.Driver 
spring.jpa.show-sql: true 

#Disable the ddl-auto:create once tables have been created 
#spring.jpa.hibernate.ddl-auto: create 

org.sample.sampleProperty=This is a sample property 

photos.upload.dir=C:/temp/UserPhotos/ 

# Server port 
server.port=8081 

मैं एक PropertySourcesPlaceholderConfigurer सेम और यहां तक ​​कि PropertySourcesPlaceholderConfigurer जोड़ने की कोशिश की है, लेकिन अभी भी समस्या बनी रहती है।

किसी को भी इसका अनुभव हुआ? या गुण फ़ाइल लोड करने के लिए एक नया तरीका है?

कृपया ध्यान दें कि मेरा डीबी कनेक्शन और सर्वर पोर्ट ठीक से पढ़ा जा रहा है क्योंकि मेरा एप्लिकेशन डीबी से कनेक्ट हो सकता है और मुझे इसे निर्दिष्ट पोर्ट के माध्यम से एक्सेस करना है। नमूनाप्रोपर्टी चर यद्यपि शून्य रहता है।

+3

क्यों आप एक '@PropertySource घोषित '? यह बॉक्स से बाहर काम करना चाहिए (यानी '@ प्रॉपर्टीसोर्स' और 'PropertySourcesPlaceholderConfigurer' बीन –

+0

हां, मुझे पता है। मैं' @ PropertySource' और '@ PropertySourcesPlaceholderConfigurer' के बिना उपयोग कर रहा था। मैंने इस समस्या का सामना करने के बाद इन्हें आजमाया, लेकिन कोई फायदा नहीं :( – Zaheeb

+3

'@ वैल्यू '(जैसे' @Autowired) स्थिर क्षेत्रों पर काम नहीं करता है। अगर यह काम करता है, स्थिर क्षेत्रों पर, मैं कहूंगा कि यह अनजान था। –

उत्तर

14
  1. @Value अपने आप उसके लिए @PropertySource निर्दिष्ट किए बिना स्थिर खेतों पर काम करने के लिए नहीं होती है application.properties से
  2. गुण उपलब्ध हैं। main() विधि में संपत्ति को प्रिंट की
  3. इसके बजाय, आप यह उदाहरण के लिए @PostConstruct

का उपयोग करके पूरी तरह से उदाहरण के काम करने के बाद क्या करना चाहिए सेम का निर्माण किया है,:

package demo; 

import org.springframework.beans.factory.annotation.Value; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 

import javax.annotation.PostConstruct; 

@Configuration 
@ComponentScan 
@EnableAutoConfiguration 
public class Application { 

    @Value("${org.sample.sampleProperty}") 
    private String sampleProperty; 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @PostConstruct 
    public void postConstruct() { 
     System.out.print("SampleApplication started: " + sampleProperty); 
    } 
} 
+0

यह मेरे कंसोल पर मूल्य के साथ प्रिंट करता है। लेकिन जब मैं लोकलहोस्ट खोलता हूं तो यह शून्य हो जाता है? – Jesse