Spring Batch:当没有其他注释时,@ Value为null

时间:2014-11-09 17:07:01

标签: spring spring-batch

我有一个连接到Mongo数据库的Java / Spring应用程序。该应用程序始终使用Spring注释。我有一个基本数据库类,如下所示:

public abstract class MongoDataBase {

@Value("${db.url}")
private String DB_URL;
@Value("${db.index}")
private String DB_INDEX;

public DBCollection createConnection() {
    try {
        MongoURI mongoURI = new MongoURI(DB_URL);
        DB db = mongoURI.connectDB();
        db.authenticate(mongoURI.getUsername(), mongoURI.getPassword());
        return db.getCollection(DB_INDEX);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

}

当我通过MVC方式连接时,这非常有效(@Controller类自动连接到一个@Service类,该类自动连接到另一个@Service类(我的DAO),后者又加载这样的连接:

 DBCollection coll = createConnection();

但是,当我尝试从Spring Batch作业访问数据库时,基类中的@ Value是null。然而,其余的注释工作(@Autowired)。我有一个Spring批处理XML,它调用以下runMeJob:

@Component
public class RunMeJob extends QuartzJobBean {

private RunMeTask runMeTask;

public void setRunMeTask(RunMeTask runMeTask) {
    this.runMeTask = runMeTask;
}

protected void executeInternal(JobExecutionContext context)
        throws JobExecutionException {
    runMeTask.batchRunner();
}
}

这反过来调用runMeTask:

@Component
public class RunMeTask {

@Autowired
private AccountService accountService;
@Autowired
private ScanService scanService;

public void batchRunner() {
    JSONArray accounts = accountService.getAllAccounts();
    HashSet<String> uniqueAccounts
            = accountService.getAccountProp(accounts, "name");
}
}

从此处自动装配的accountService连接到基础数据库类,@ Value为null。我错过了什么?

1 个答案:

答案 0 :(得分:0)

想出来 - 非常简单。我通过以下方式将属性文件映射到mvc-dispatcher-servlet中:

<context:property-placeholder location="classpath:prop.properties" />


但是在我的Spring批量xml文件中没有这个。不知道为什么在批处理作业运行时没有拾取mvc-dispatcher?