0

有什么办法可以在 SpringApplication.run() 中使用 2 个源吗?这是我的主要课程。你可以清楚地理解我到目前为止所做的尝试。

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {

    /*
     * SPRING BOOTSTRAP MAIN
     */
    public static void main(String[] args) {
//        SpringApplication.run(com.twitter.Application.class, args);
//        SpringApplication.run(com.linkedin.Application.class, args);
        Object[] sources = new Object[2];
        sources[0] = com.twitter.Application.class;
        sources[1] = com.linkedin.Application.class;
        SpringApplication.run(sources, args);
    }

}

如果我跑..

SpringApplication.run(com.twitter.Application.class, args);
SpringApplication.run(com.linkedin.Application.class, args);

com.linkedin.Application.class 给出错误,因为地址已在使用中。

如果我跑..

sources[0] = com.twitter.Application.class;
sources[1] = com.linkedin.Application.class;
SpringApplication.run(sources, args);

Linkedin 工作正常,Twitter 不行。'/twitter' 映射(我为 TwitterController 提供的)给出了一个白色标签。

4

1 回答 1

0

从表面上看,这看起来像是一个特定于 Spring Boot 的问题(确实如此),但在我看来,您希望您的应用程序同时支持 Twitter 和 LinkedIn。正确的?

您传递给 SpringApplication.run() 的只是一组配置类。通常,您只需要传入一个配置,然后让组件扫描自动查找其他 @Configuration 类。而且,虽然它不是必需的,但您通常会传入一个配置类,该类也具有启动它的 main() 方法。

那么为什么你有一个带有 main 方法的 Application 类,然后还有两个 Application 类(你没有共享源代码,但我猜它们本质上是相互重复的,LinkedIn 和 Twitter 是唯一的区别.如果是这样的话,你真正想要的是一个配置Spring Social的配置类,带有@Configuration注解(意思是组件扫描可以取到它),并且可以命名任何你想要的东西。没有必要通过它进入 SpringApplication.run()。相反,您只需将主 Application.class 传递给 Spring Application.run()。

看看https://github.com/spring-projects/spring-social-samples/blob/master/spring-social-showcase-boot/src/main/java/org/springframework/social/showcase/config/ Application.java中的一个示例,说明了我如何在启用 Boot 的 Spring Social Showcase 中执行此操作。在那里,Application.java 将自身传递给 SpringApplication.run()。由于它启用了组件扫描,其他配置类也将被发现和使用。

当然,也许我误解了你想要做什么。如果是这样,那么请重申您要完成的工作,我会尽力提供帮助。

于 2014-10-16T21:16:53.483 回答