我有一个连接到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。我错过了什么?
答案 0 :(得分:0)
想出来 - 非常简单。我通过以下方式将属性文件映射到mvc-dispatcher-servlet中:
<context:property-placeholder location="classpath:prop.properties" />
但是在我的Spring批量xml文件中没有这个。不知道为什么在批处理作业运行时没有拾取mvc-dispatcher?