使用@Value在属性文件中找不到属性

时间:2013-11-05 02:19:33

标签: java spring spring-mvc properties controller

我在spring框架中使用属性文件

root-context.xml

<context:property-placeholder location="classpath:config.properties" />
<util:properties id="config" location="classpath:config.properties" />

java代码

@Value("#{config[ebookUseYN]}")
String EBOOKUSEYN;

使用网址调用(@RequestMapping(value="/recommendbooks" , method=RequestMethod.GET, produces="application/json;charset=UTF-8"))时..这项工作!

但是,我使用方法调用,

public void executeInternal(JobExecutionContext arg0) throws JobExecutionException {

IndexManageController indexManage = new IndexManageController();
CommonSearchDTO commonSearchDTO = new CommonSearchDTO();

try {          
      if("Y".equals(EBOOKUSEYN)){
          indexManage.deleteLuceneDocEbook();
          indexManage.initialBatchEbook(null, commonSearchDTO);
      }
      indexManage.deleteLuceneDoc(); <= this point
      indexManage.deleteLuceneDocFacet();

      indexManage.initialBatch(null, commonSearchDTO);


     }catch (Exception e) {
      e.printStackTrace();
  }
}

当'this point'方法调用时,更改控制器,并且不读取属性文件字段..


@Value("#{config[IndexBasePath]}")
    String IndexBasePath;

@RequestMapping(value="/deleteLuceneDoc" , method=RequestMethod.GET, produces="application/json;charset=UTF-8")
    public @ResponseBody ResultCodeMessageDTO deleteLuceneDoc()
            throws Exception
{

long startTime = System.currentTimeMillis();

ResultCodeMessageDTO result = new ResultCodeMessageDTO();
System.out.println(IndexBasePath);
}

它不会读取IndexBasePath

1 个答案:

答案 0 :(得分:0)

在您的代码中,您正在创建IndexManageController的新实例,Spring不知道此实例,因此它永远不会被处理。

public void executeInternal(JobExecutionContext arg0) throws JobExecutionException {

    IndexManageController indexManage = new IndexManageController();

而不是创建新实例注入IndexManageController的依赖项,以便它使用由Spring构造和管理的预配置实例。 (并删除构造该类的新实例的行。)

public class MyJob {

    @Autowired
    private IndexManageController indexManage;

}

您的配置也在加载属性两次

<context:property-placeholder location="classpath:config.properties" />
<util:properties id="config" location="classpath:config.properties" />

两者都加载config.properties文件。只需将配置连接到property-placeholder元素。

<context:property-placeholder properties-ref="config"/>
<util:properties id="config" location="classpath:config.properties" />

保存两次加载并为您保存另一个bean。