Spring引导以及如何在cloud foundry上配置到MongoDB的连接详细信息?
我目前正在使用mongodb创建SpringBootWeb应用程序。在本地,我可以运行我的应用程序,并检索和存储数据。 但不是云铸造。任何提示,链接或任何帮助我将不胜感激 问题 当我将其推入cloud foundry时,我无法连接到我的mongodb。我知道我们必须在CloudFoundry上配置一些东西才能让它工作。我尝试使用mongodb PCF,即使我将它绑定到我的应用程序,它仍然没有运行我的应用程序。我一直在互联网上搜索,试图找到正确的配置 其他想法 我在使用MongoDb时从未设置用户名和密码。我目前只在port27017上使用localhost。也许我需要在V_CAP或env变量上配置凭据,但我无法在cloudfoundry.com的UI上编辑这些凭据。是否会有命令行提示将这些变量配置为cf?我查阅了一些文档,但我不清楚在何处将这些bean添加到哪个配置文件中,或者它是否有助于在CloudFoundry上运行mongodb 云铸造上的连接错误 出去 org.springframework.beans.factory.unsatifiedDependencyException: 创建名为“indexController”的bean时出错:不满意 通过字段“apL”表示的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“appPortList”的bean:调用init方法 失败;嵌套异常是 org.springframework.dao.DataAccessResourceFailureException:超时 等待匹配的服务器时的30000毫秒后 ReadPreferenceServerSelector{readPreference=primary}。的客户端视图 群集状态为{type=UNKNOWN,servers=[{address=127.0.0.1:27017, 类型=未知,状态=正在连接, 异常={com.mongodb.mongoscocketopenexception:异常打开 套接字},由{java.net.ConnectException:连接被拒绝}}]引起; 嵌套异常为com.mongodb.MongoTimeoutException:在之后超时 等待匹配的服务器时为30000毫秒 ReadPreferenceServerSelector{readPreference=primary}。的客户端视图 群集状态为{type=UNKNOWN,servers=[{address=127.0.0.1:27017, 类型=未知,状态=正在连接, 异常={com.mongodb.mongoscocketopenexception:异常打开 套接字},由{java.net.ConnectException:连接被拒绝}引起]Spring引导以及如何在cloud foundry上配置到MongoDB的连接详细信息?,spring,mongodb,cloud,cloud-foundry,Spring,Mongodb,Cloud,Cloud Foundry,我目前正在使用mongodb创建SpringBootWeb应用程序。在本地,我可以运行我的应用程序,并检索和存储数据。 但不是云铸造。任何提示,链接或任何帮助我将不胜感激 问题 当我将其推入cloud foundry时,我无法连接到我的mongodb。我知道我们必须在CloudFoundry上配置一些东西才能让它工作。我尝试使用mongodb PCF,即使我将它绑定到我的应用程序,它仍然没有运行我的应用程序。我一直在互联网上搜索,试图找到正确的配置 其他想法 我在使用MongoDb时从未设置用户
从理论上讲,SpringBootCloudConnectors应该为您做到这一点,但我在过去遇到过一些问题 或者,您需要添加Springbean扩展AbstractMongoConfiguration。在此配置中,您必须插入在VCAP_SERVICES环境变量中找到的主机、端口、用户名、数据库名称和密码 您可以通过使用System.getEnv(“VCAP_服务”)获取VCAP_服务变量的值,并使用JACKSON或其他一些JSON库对其进行解析,从而自动插入该变量
@Configuration
@Profile("cloud")
public class DatabaseConfiguration extends AbstractMongoConfiguration {
@Bean
public ValidatingMongoEventListener validatingMongoEventListener() {
return new ValidatingMongoEventListener(validator());
}
@Bean
public LocalValidatorFactoryBean validator() {
return new LocalValidatorFactoryBean();
}
@Override
public String getDatabaseName() {
return this.databaseName;
}
@Override
@Bean
public Mongo mongo() throws Exception {
List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>();
ServerAddress address = new ServerAddress("my_host", 7777);
serverAddresses.add(address);
return new MongoClient(serverAdresses,
singletonList(
MongoCredential.createCredential(
"my_user_name",
"my_database_name",
"my_password".toCharArray()
)
)
);
}
}
@配置
@个人资料(“云”)
公共类数据库配置扩展了AbstractMongoConfiguration{
@豆子
公共验证MongoEventListener验证MongoEventListener(){
返回新的ValidatingMongoEventListener(validator());
}
@豆子
公共LocalValidatoryFactoryBean验证器(){
返回新的LocalValidatoryFactoryBean();
}
@凌驾
公共字符串getDatabaseName(){
返回this.databaseName;
}
@凌驾
@豆子
public Mongo Mongo()引发异常{
List serverAddresses=new ArrayList();
服务器地址=新服务器地址(“我的主机”,7777);
serverAddresses.add(地址);
返回新的MongoClient(服务器地址,
单音表(
MongoCredential.createCredential(
“我的用户名”,
“我的数据库名称”,
“我的密码”
)
)
);
}
}
关于您的“其他想法”。无法编辑CloudFoundry提供的VCAP_服务变量。相反,它应该由您的应用程序读取,以便您的应用程序知道在哪里可以找到CF为其提供的mongodb实例
但是,您可以使用“cf set env”向应用程序添加更多的环境变量。但就我所见,这无助于解决您的问题。理论上,Spring boot cloud connectors应该为您这样做,但我在过去遇到过问题 或者,您需要添加Springbean扩展AbstractMongoConfiguration。在此配置中,您必须插入在VCAP_SERVICES环境变量中找到的主机、端口、用户名、数据库名称和密码 您可以通过使用System.getEnv(“VCAP_服务”)获取VCAP_服务变量的值,并使用JACKSON或其他一些JSON库对其进行解析,从而自动插入该变量
@Configuration
@Profile("cloud")
public class DatabaseConfiguration extends AbstractMongoConfiguration {
@Bean
public ValidatingMongoEventListener validatingMongoEventListener() {
return new ValidatingMongoEventListener(validator());
}
@Bean
public LocalValidatorFactoryBean validator() {
return new LocalValidatorFactoryBean();
}
@Override
public String getDatabaseName() {
return this.databaseName;
}
@Override
@Bean
public Mongo mongo() throws Exception {
List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>();
ServerAddress address = new ServerAddress("my_host", 7777);
serverAddresses.add(address);
return new MongoClient(serverAdresses,
singletonList(
MongoCredential.createCredential(
"my_user_name",
"my_database_name",
"my_password".toCharArray()
)
)
);
}
}
@配置
@个人资料(“云”)
公共类数据库配置扩展了AbstractMongoConfiguration{
@豆子
公共验证MongoEventListener验证MongoEventListener(){
返回新的ValidatingMongoEventListener(validator());
}
@豆子
公共LocalValidatoryFactoryBean验证器(){
返回新的LocalValidatoryFactoryBean();
}
@凌驾
公共字符串getDatabaseName(){
返回this.databaseName;
}
@凌驾
@豆子
public Mongo Mongo()引发异常{
List serverAddresses=new ArrayList();
服务器地址=新服务器地址(“我的主机”,7777);
serverAddresses.add(地址);
返回新的MongoClient(服务器地址,
单音表(
MongoCredential.createCredential(
“我的