【问题标题】:How can Spring boot/Application.java pick up Mongo AbstractMongoConfiguration in another package?Spring boot/Application.java 如何在另一个包中获取 Mongo AbstractMongoConfiguration?
【发布时间】:2014-06-06 06:28:57
【问题描述】:

我想将我的课程组织成包。使用以下示例:

https://spring.io/guides/gs/accessing-data-mongodb/

我在“my.main.package”中有 Application.java 我在下面定义了自己的 AbstractMongoConfiguration 实现:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;

import com.mongodb.Mongo;
import com.mongodb.MongoClient;

@Configuration
public class MyMongoConfig extends AbstractMongoConfiguration{
    @Override
    @Bean
    public Mongo mongo() throws Exception {
        return new MongoClient("remotehost:27018");
    }

    @Override
    protected String getDatabaseName() {
        return "mydb";
    }
}

如果我把这个类和我的 Application.java 放在同一个包中,那么它就可以工作。如果我将 MyMongoConfig 放在它自己的包中,即“my.config.package.settings”,那么运行 Application.java 似乎会使用默认的 MongoDB 连接设置而不使用“MyMongoConfig”。为什么我的应用程序在不同的包中时不会自动找到“MyMongoConfig”?有没有合适的方法或可能性来做到这一点,而无需将它们都放在同一个包中?

【问题讨论】:

    标签: java spring mongodb spring-boot


    【解决方案1】:

    It is recommended 主 Spring Boot 应用程序类位于其他类之上的根包中,以便基础“搜索包”成为根包。将扫描根目录中的所有包以查找配置类。

    如果你选择在其他包中放置一些其他的配置类,我相信这些都需要指定。例如,如果您的主应用程序类在包“demo”中,而您的 Mongo 配置类在包“another.demo”中,则主应用程序类的 @ComponentScan 注释需要如下所示:

    @Configuration
    @ComponentScan(basePackages={"another.demo", "demo"})
    @EnableAutoConfiguration
    public class Application {
    

    【讨论】:

    • 我目前在包“demo.main”中有Application.java,在“demo.main.config”中有我的帖子中的配置。 (这两个包在 src/main/java 下是对等的。看起来我收到以下错误:org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 java.lang.IllegalStateException:this Mongo 已关闭。配置文件在同一个包中时不会发生这种情况。是否需要添加其他注释或必须执行的操作?
    • 不,应该够了。您的 Application.java 代码是什么,您使用什么代码访问 Mongo 会引发异常?
    • Application.java 没有 bean 或任何与我的 MyMongoConfig 相关的行。它使用 Configuration , ComponentScan EnableAutoConfiguration 进行注释。我尝试了 ComponentScan (basePackages={"demo.main", "demo.config"} (我将 MyMongoConfig 移动到 demo.config)。用于访问的代码是扩展 MongoRepository 的 "UserRepository.java" 类并且在同一个打包为 Application.java (demo.main)。
    • 你能分享你提到的代码吗?我已经测试了我能想象到的最简单的场景,并在此基础上提出了建议。如果你能分享你到目前为止不起作用的东西,那会简单得多,这样我就可以测试它,如果我可以复制它,可能会提出其他建议。因此,您提供的详细信息/代码越多,调查就越快。
    猜你喜欢
    • 2017-06-06
    • 2021-01-02
    • 2021-08-06
    • 2020-08-23
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多