Mongo未在Spring4JavaAPI中打开连接
我有一个API,我们使用Spring4和Mongo数据库编写。当应用程序加载到我的本地WAS时,我可以看到应用程序将退出并连接到数据库。然而,当我执行一个应该打开查询的函数时,我得到了套接字关闭错误 我的配置: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
@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();
}
...
}