Spring Social: необходимо запустить 2 источника в SpringApplication.run(sources, args);

Есть ли способ я могу 2 источника в SpringApplication.run()? Вот мой основной класс. Вы можете ясно понять, что я пробовал до сих пор.

@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' (которое я дал для TwitterController) дает белую метку.

1 ответ

На первый взгляд, это выглядит как вопрос, специфичный для Spring Boot (который действительно есть), но мне кажется, что вы хотите, чтобы ваше приложение поддерживало как Twitter, так и LinkedIn. Правильно?

Все, что вы передаете в SpringApplication.run() - это набор классов конфигурации. Обычно вы передаете только одну конфигурацию и позволяете компонентному сканированию автоматически находить другие классы @Configuration. И, хотя это не обязательно, вы, как правило, передаете класс конфигурации, который также имеет метод 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 для примера того, как я это делаю в Spring Social Showcase с включенной загрузкой. Там Application.java переходит в SpringApplication.run(). А поскольку он позволяет сканирование компонентов, другие классы конфигурации также будут обнаружены и использованы.

Конечно, может быть, я неправильно понял, что вы пытаетесь сделать. Если так, то, пожалуйста, повторите то, что вы пытаетесь достичь, и я постараюсь помочь.

Другие вопросы по тегам