Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongo未在Spring4JavaAPI中打开连接_Java_Spring_Mongodb_Spring Mvc - Fatal编程技术网

Mongo未在Spring4JavaAPI中打开连接

Mongo未在Spring4JavaAPI中打开连接,java,spring,mongodb,spring-mvc,Java,Spring,Mongodb,Spring Mvc,我有一个API,我们使用Spring4和Mongo数据库编写。当应用程序加载到我的本地WAS时,我可以看到应用程序将退出并连接到数据库。然而,当我执行一个应该打开查询的函数时,我得到了套接字关闭错误 我的配置: @Bean public MongoDbFactory mongoDbFactory() throws Exception { logger.info("loading MongoDBFactory bean" ); String PROCESS_ID_MONGO_KEY

我有一个API,我们使用Spring4和Mongo数据库编写。当应用程序加载到我的本地WAS时,我可以看到应用程序将退出并连接到数据库。然而,当我执行一个应该打开查询的函数时,我得到了套接字关闭错误

我的配置:

@Bean
public MongoDbFactory mongoDbFactory() throws Exception {
    logger.info("loading MongoDBFactory bean" );
    String PROCESS_ID_MONGO_KEY = "PROCESS_ID_MONGO";

    Credentials credentials = credentialsManager().getCredentialsFor(PROCESS_ID_MONGO_KEY);

    MongoClient mongoClient = new MongoClient(
            Arrays.asList(new ServerAddress(PropertiesManagerUtility.getKeyValue(CollectionType.CREDENTIAL, "mongo.url"), 27017)),
            Arrays.asList(MongoCredential.createPlainCredential(credentials.getUserid(), "$external", credentials.getPassword().toCharArray())),
            MongoClientOptions.builder()
                    .sslEnabled(true).connectTimeout(30)
                    .writeConcern(WriteConcern.MAJORITY)
                    .socketKeepAlive(true)
                    .build());
    return new SimpleMongoDbFactory(mongoClient, PropertiesManagerUtility.getKeyValue(CollectionType.CREDENTIAL, "mongo.db"));
}
@Bean
public MongoTemplate mongoTemplate() throws Exception {
    logger.info("loading MongoTemplate bean" );
   // MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
    return new MongoTemplate(mongoDbFactory());
}
我的刀

@Component("achResponseDMDao")
public class AchResponseDMDaoImpl implements IBasicDao<AchResponseDM>{
    @Autowired
    MongoTemplate mongoTemplate;

public AchResponseDMDaoImpl(MongoTemplate mongoTemplate){
    this.mongoTemplate = mongoTemplate;
}

@Override
public AchResponseDM findByResponseCode( String responseCode){
    Query query = new Query(Criteria.where("responseCode").is(responseCode));        
    return mongoTemplate.findOne(query, AchResponseDM.class);
}
...
}
@组件(“AchResponsedDao”)
公共类AchResponsedDaoImpl实现IBasicDao{
@自动连线
MongoTemplate MongoTemplate;
公共AchResponsedDaoImpl(MongoTemplate MongoTemplate){
this.mongoTemplate=mongoTemplate;
}
@凌驾
公共AchResponsedFindByResponseCode(字符串响应代码){
Query Query=新查询(Criteria.where(“responseCode”).is(responseCode));
返回mongoTemplate.findOne(查询,AchResponseDM.class);
}
...
}

问题是我以为Spring会使用MongoFactory给我一个新的连接,但看起来原来的连接被关闭了,不再创建。我需要做什么?提前感谢。

注入工厂而不是MongoTemplate实例会根据需要创建新的连接。相应的DAOImpl将具有
@自动连线的monofacory新mongoTemplate(mongoFactory)的实例。查找(…)
或其他

生成的DAO如下所示:

@Component("achResponseDMDao")
public class AchResponseDMDaoImpl implements IBasicDao<AchResponseDM>{
    @Autowired
    MongoFactory mongoFactory;

@Override
public AchResponseDM findByResponseCode( String responseCode){
    Query query = new Query(Criteria.where("responseCode").is(responseCode));        
    List<AchResponseDM> listOfResponses = mongoTemplate(mongoFactory).find(query, AchResponseDM.class);
    return (listOfResponses!=null && !listOfResponses.isEmpty())?listOfResponses.get(0):defaultNonNullResponse();
}
...
}
@组件(“AchResponsedDao”)
公共类AchResponsedDaoImpl实现IBasicDao{
@自动连线
MongoFactory MongoFactory;
@凌驾
公共AchResponsedFindByResponseCode(字符串响应代码){
Query Query=新查询(Criteria.where(“responseCode”).is(responseCode));
ListListofResponses=mongoTemplate(mongoFactory.find)(查询,AchResponseDM.class);
return(listOfResponses!=null&&!listOfResponses.isEmpty())?listOfResponses.get(0):defaultNonNullResponse();
}
...
}