【问题标题】:Configurable Mongo database url and name in Spring Boot ApplicationSpring Boot 应用程序中可配置的 Mongo 数据库 url 和名称
【发布时间】:2016-10-24 11:30:27
【问题描述】:

我正在尝试通过application-{environment-name}.properties 配置 mongodb 属性以连接到 mongodb。

这是我与 mongo 建立连接的代码:

@Configuration
@EnableAutoConfiguration
public class SpringMongoConfig {

    @Value("${db.connectionURL}")
    private String databaseURL;

    @Value("${db.name}")
    private String databaseName;

    @Bean
    public MongoDbFactory mongoDbFactory() throws Exception {
        System.out.println("database url: " + databaseURL + " db name: " + databaseName);
        return new SimpleMongoDbFactory(new MongoClient(databaseURL), databaseName);
    }

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
        return mongoTemplate;
    }
}

这是我的application-test.properties 文件:

db.connectionURL=localhost
db.name=rahab

我得到了 databaseURLdatabaseName 的空值。我的想法是在 bean 创建期间这些值仍然不可用。但我没有任何想法来实现这一点。

【问题讨论】:

  • 您是否激活了test 个人资料?尝试在application.properties 中指定spring.profiles=test,看看它是否仍然不起作用
  • @OriDar 尝试过这样做。在终端中,我看到数据库 url 和名称被打印了两次。一个实际值后跟空值,之后我在终端上收到此消息:java.lang.IllegalArgumentException: Database name must not be empty!
  • 您还应该通过将@Profile("test") 添加到SpringMongoConfig 来激活配置文件。但是请注意,指定的 mongo 配置仅可用于测试配置文件。您应该阅读 Spring Boot 参考文档的第 24 节(配置)第 25 节(配置文件)和 mongodb 部分以更好地理解
  • 我不知道您两次打印的消息是什么。我怀疑您有重复的配置类,其中一个与配置文件一起正确设置,而另一个没有

标签: java spring mongodb spring-boot


【解决方案1】:

您可以在配置中使用 PropertySource 来指定您创建的属性文件的位置。示例代码如下:

@Configuration
@EnableAutoConfiguration
@PropertySource("application-test.properties")
public class SpringMongoConfig {

@Value("${db.connectionURL}")
private String databaseURL;

@Value("${db.name}")
private String databaseName;

@Bean
public MongoDbFactory mongoDbFactory() throws Exception {
    System.out.println("database url: " + databaseURL + " db name: " + databaseName);
    return new SimpleMongoDbFactory(new MongoClient(databaseURL), databaseName);
}

@Bean
public MongoTemplate mongoTemplate() throws Exception {
    MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
    return mongoTemplate;
}
}

希望它有助于解决您的问题。

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 2017-03-22
    • 2022-08-23
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2018-03-15
    • 2016-06-12
    相关资源
    最近更新 更多