小编Ale*_*lex的帖子

spring-data mongodb从更新中排除字段

如何确保在创建时可以插入特定字段,但可以选择在更新对象时将其排除.我基本上是在寻找以下内容:

mongoOperations.save(theObject, <fields to ignore>)
Run Code Online (Sandbox Code Playgroud)

从我看来,最近推出的@ReadOnlyProperty将忽略插入和更新的属性.

通过实现我的Custom MongoTemplate并覆盖其doUpdate方法,我能够获得所需的行为,如下所示:

@Override
protected WriteResult doUpdate(String collectionName, Query query,
        Update originalUpdate, Class<?> entityClass, boolean upsert, boolean multi) {

    Update updateViaSet = new Update();

    DBObject dbObject = originalUpdate.getUpdateObject();
    Update filteredUpdate = Update.fromDBObject(dbObject, "<fields to ignore>");

    for(String key : filteredUpdate.getUpdateObject().keySet()){

        Object val = filteredUpdate.getUpdateObject().get(key);

        System.out.println(key + "::" + val);

        updateViaSet.set(key, filteredUpdate.getUpdateObject().get(key));
    }

    return super
            .doUpdate(collectionName, query, updateViaSet, entityClass, upsert, multi);
}
Run Code Online (Sandbox Code Playgroud)

但问题是,现在它将使用Mongo $ set形式的更新,而不仅仅是针对特定情况.请告知是否有更简单(和正确)的方法来实现这一目标.

mongodb spring-data-mongodb

7
推荐指数
1
解决办法
980
查看次数

Netflix Eureka和2个本地环境应用实例

我开始使用Netflix Eureka并使用其1.1.145(https://github.com/Netflix/eureka/tree/1.1.145)版本.

我想在不同的端口上本地启动同一应用程序的2个实例,并让它们都注册到Eureka.我正在使用示例服务(https://github.com/Netflix/eureka/blob/1.1.145/eureka-server/conf/sampleservice/sample-eureka-service.properties)

所以我使用上面的配置启动了Eureka本身和2个实例 - 一个应用程序在8001端口上,另一个在8002上.

出于某种原因,我在任何时候都只有一个在Eureka注册的实例.他们两个都没有例外地开始,可以和Eureka OK谈谈.当我启动第二个实例时,它似乎只是用自己的信息覆盖有关第一个实例的信息.

我想要的是在http:// localhost/eureka/v2/apps下的同一个逻辑eureka.name下有2个'instance'元素

我错过了什么?

netflix spring-cloud netflix-eureka

2
推荐指数
1
解决办法
3419
查看次数