0
XML配置春:豆无法读出从外部属性文件值使用@Value注释时
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<util:properties id="mongoProperties" location="file:///storage/local.properties" />
<bean id="mongoService" class="com.business.persist.MongoService"></bean>
</beans>
和MongoService看起来像
@Service
public class MongoService {
@Value("#{mongoProperties[host]}")
private String host;
@Value("#{mongoProperties[port]}")
private int port;
@Value("#{mongoProperties[database]}")
private String database;
private Mongo mongo;
private static final Logger LOGGER = LoggerFactory.getLogger(MongoService.class);
public MongoService() throws UnknownHostException {
LOGGER.info("host=" + host + ", port=" + port + ", database=" + database);
mongo = new Mongo(host, port);
}
public void putDocument(@Nonnull final DBObject document) {
LOGGER.info("inserting document - " + document.toString());
mongo.getDB(database).getCollection(getCollectionName(document)).insert(document, WriteConcern.SAFE);
}
我写我的MongoServiceTest作为
public class MongoServiceTest {
@Autowired
private MongoService mongoService;
public MongoServiceTest() throws UnknownHostException {
mongoRule = new MongoRule();
}
@Test
public void testMongoService() {
final DBObject document = DBContract.getUniqueQuery("001");
document.put(DBContract.RVARIABLES, "values");
document.put(DBContract.PVARIABLES, "values");
mongoService.putDocument(document);
}
我看到测试中的失败为
12:37:25.224 [main] INFO c.s.business.persist.MongoService - host=null, port=0, database=null
java.lang.NullPointerException
at com.business.persist.MongoServiceTest.testMongoService(MongoServiceTest.java:40)
这意味着豆无法从local.properties读出的值
local.properties
### === MongoDB interaction === ###
host="127.0.0.1"
port=27017
database=contract
我该如何解决这个问题?
更新 即使为字段创建setter/getters之后,它似乎也没有读取值。我现在真的很无能。
更新01
增加init()方法并将其添加到豆腐后,还是老样子不起作用。我甚至不看日志消息
XML
<bean id="mongoService" class="com.business.persist.MongoService" init-method="init"></bean>
MongoService
@Service
public class MongoService {
@Value("#{mongoProperties['host']}")
private String host;
@Value("#{mongoProperties['port']}")
private int port;
@Value("#{mongoProperties['database']}")
private String database;
private Mongo mongo;
private static final Logger LOGGER = LoggerFactory.getLogger(MongoService.class);
public MongoService() {}
public void init() throws UnknownHostException {
LOGGER.info("host=" + host + ", port=" + port + ", database=" + database);
mongo = new Mongo(host, port);
}
public void putDocument(@Nonnull final DBObject document) {
LOGGER.info("inserting document - " + document.toString());
mongo.getDB(database).getCollection(getCollectionName(document)).insert(document, WriteConcern.SAFE);
}
我怎么能连调试这个问题?
非常感谢!
看到你的更新,你还拥有一个组件-scan在某处,这可能是你的bean的另一个地方正在创建,如果是这样的话,用'@ PostConstruct'注释来注释你的'init'方法 –