我需要根据在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");
}
}
但是我一直在第34行"字符串值= 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: {}
答案 0 :(得分:0)
我在下面添加了一个基本的工作解决方案。实质上,在getCountryGeoFilter()
方法上删除@Bean,并更改调用方式。我在@RestController类中提供了一个示例调用。
此外,此配置未使用任何XML配置。
@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;
}
}
prop1=prop_1_value
prop2=prop_2_value
@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);
}
}