0

XML 構成

<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)

これは、Bean が local.properties から値を読み取ることができなかったことを意味します。

local.properties

### === MongoDB interaction === ###
host="127.0.0.1"
port=27017
database=contract

これを修正するにはどうすればよいですか?

更新 フィールドのセッター/ゲッターを作成した後でも、値を読み取っていないようです。私は今本当に無知です。

更新 01

init() メソッドを追加して bean に追加しても、まだ機能しません。Logging メッセージ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);
    }

この問題をデバッグするにはどうすればよいですか?

どうもありがとう!

4

1 に答える 1

1

ここで目にする問題が 1 つあります。MongoServiceコンストラクター内で Mongo クラスをインスタンス化していますが、この時点では、ファイルに基づいてプロパティが挿入されていないlocal.propertiesため、ホスト、ポート、およびデータベースの値は null になります。

代わりに、Service コンストラクター内で Mongo クラスをインスタンス化せず、プロパティを MongoService に挿入して、プロパティが設定された後に呼び出される init-method の一部として作成することができます。

MongoService で:

public void init(){
    mongo = new Mongo(host, port);
}

そしてあなたのBean設定で:

<bean id="mongoService" class="com.business.persist.MongoService" init-method="init"></bean>
于 2012-06-29T21:12:38.243 に答える