Spring引导以及如何在cloud foundry上配置到MongoDB的连接详细信息?

Spring引导以及如何在cloud foundry上配置到MongoDB的连接详细信息?,spring,mongodb,cloud,cloud-foundry,Spring,Mongodb,Cloud,Cloud Foundry,我目前正在使用mongodb创建SpringBootWeb应用程序。在本地,我可以运行我的应用程序,并检索和存储数据。 但不是云铸造。任何提示,链接或任何帮助我将不胜感激 问题 当我将其推入cloud foundry时,我无法连接到我的mongodb。我知道我们必须在CloudFoundry上配置一些东西才能让它工作。我尝试使用mongodb PCF,即使我将它绑定到我的应用程序,它仍然没有运行我的应用程序。我一直在互联网上搜索,试图找到正确的配置 其他想法 我在使用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:连接被拒绝}引起]


从理论上讲,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(
“我的