【问题标题】:Reading properties file using @Autowired Environment spring java Null pointer exception使用@Autowired Environment spring java Null指针异常读取属性文件
【发布时间】:2018-01-11 16:11:02
【问题描述】:

我需要根据在 maven 项目中使用 spring 框架传递的输入来读取属性文件。我的属性文件和应用程序上下文存在于 src/main/resources 下

我正在尝试使用环境 api 来注入属性文件。

代码:

@Component
@Configuration
@PropertySource("classpath:GeoFilter.properties")
public class CountryGeoFilter {

    @Autowired
    public Environment environment;

    @Bean
    public GeoFilterStore getCountryGeoFilter(String country) throws 
CountryNotFoundException, IOException {

    GeoFilterStore countryFilterStore = new GeoFilterStore();

    String value = environment.getProperty(country);
    if (value == null) {
        throw CountryNotFoundException.getBuilder(country).build();
    }
    String[] seperateValues = value.split(":");

    countryFilterStore.setGameStore(isTrueValue(seperateValues[0]));

    countryFilterStore.setVideoStore(isTrueValue(seperateValues[1]));
    return countryFilterStore;
    }

    private boolean isTrueValue(String possibleTrueValue) {
        return !possibleTrueValue.equals("No") && 
        !possibleTrueValue.equals("N/A");
    }
}

但我在“String value = environment.getProperty(country);”行不断收到空指针异常

我的 applicationContext.xml(src/main/resources)

<bean
    class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />

<bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:GeoFilter.properties" />
</bean>

我还在 web.xml 中设置了 contextparam

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

我正在通过以下方式启动和调用函数

    CountryGeoFilter objGeo = new CountryGeoFilter();
    GeoFilterStore response = objGeo.getCountryGeoFilter(country);
    return response;

我对春天很陌生,不知道我哪里出错了。任何帮助将不胜感激。

编辑:

我更新了启动代码以使用上下文

    ApplicationContext context = new 
    AnnotationConfigApplicationContext(CountryGeoFilter.class);
    CountryGeoFilter testGeoFilter = 
    context.getBean(CountryGeoFilter.class);
    testGeoFilter.getCountryGeoFilter(country);

现在我得到以下异常

   Exception in thread "main" 
   org.springframework.beans.factory.UnsatisfiedDependencyException: 
   Error creating bean with name 'getCountryGeoFilter' defined in .. 
   Unsatisfied dependency expressed through method 
   'getCountryGeoFilter' parameter 
   0; nested exception is 
   org.springframework.beans.factory.NoSuchBeanDefinitionException: No 
   qualifying bean of type 'java.lang.String' available: expected at 
   least 1 bean which qualifies as autowire candidate. Dependency 
   annotations: {}

【问题讨论】:

    标签: java spring maven autowired properties-file


    【解决方案1】:

    我在下面添加了一个基本的工作解决方案。本质上,删除 getCountryGeoFilter() 方法上的 @Bean,并更改调用它的方式。我在 @RestController 类中提供了一个示例调用。

    此外,此配置没有使用任何 XML 配置。

    TestClass.java

    @Component
    @Configuration
    @PropertySource("classpath:test.properties")
    public class TestClass {
    
        @Autowired
        Environment environment;
    
        public String test (String property) {
    
            final String value = environment.getProperty(property);
    
            System.out.println("========> Property: " + value);
            // TODO: Something with the prop val
    
            return value;
    
        }
    
    }
    

    test.properties

    prop1=prop_1_value
    prop2=prop_2_value
    

    TestController.java

    @RestController
    @RequestMapping("/test")
    public class TestController {
    
        private TestClass testClass;
    
        TestController(TestClass testClass) {
            this.testClass = testClass;
        }
    
        @RequestMapping("/{propName}")
        public String test(@PathVariable String propName) {
            return testClass.test(propName);
        }
    
    }
    

    【讨论】:

    • 完美运行。只需要删除 @Bean 注释。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多