2016-01-19 7 views
2

Вчера я получил очень странное поведение весной загрузочнуюSpring загрузки не ждать запроса

Например: я пытаюсь запустить сервер с помощью ./gradlew bootRun:

... 
:findMainClass 
:bootRun 

:: Spring Boot ::  (v1.3.1.RELEASE) 

2016-01-19 16:37:15.315 INFO 6118 --- [   main] c.e.server.Application$Companion   : Starting Application.Companion on fake with PID 6118 (/home/user/code/xproject/server/build/classes/main started by user in /home/user/code/xproject/server) 
2016-01-19 16:37:15.320 INFO 6118 --- [   main] c.e.server.Application$Companion   : No active profile set, falling back to default profiles: default 
2016-01-19 16:37:15.400 INFO 6118 --- [   main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.spring[email protected]a3ec6b: startup date [Tue Jan 19 16:37:15 GMT 2016]; root of context hierarchy 
2016-01-19 16:37:17.908 INFO 6118 --- [   main] o.s.j.e.a.AnnotationMBeanExporter  : Registering beans for JMX exposure on startup 
2016-01-19 16:37:17.923 INFO 6118 --- [   main] c.e.server.Application$Companion   : Started Application.Companion in 3.048 seconds (JVM running for 3.421) 
2016-01-19 16:37:17.924 INFO 6118 --- [  Thread-2] s.c.a.AnnotationConfigApplicationContext : Closing org.spring[email protected]a3ec6b: startup date [Tue Jan 19 16:37:15 GMT 2016]; root of context hierarchy 
2016-01-19 16:37:17.930 INFO 6118 --- [  Thread-2] o.s.j.e.a.AnnotationMBeanExporter  : Unregistering JMX-exposed beans on shutdown 

BUILD SUCCESSFUL 

Total time: 23.756 secs 

Так что не ждет как всегда. Я думал, что есть некоторые проблемы с classpath, поэтому я поставил несколько аннотированных методов как @PostConstruct в контроллерах и службах и могу подтвердить, что они вызываются, и все зависимости в этот момент вводятся.

Вот мой gradle.build:

buildscript { 
    ext.kotlin_version = '1.0.0-beta-4584' 
    repositories { 
     mavenCentral() 
     jcenter() 
    } 
    dependencies { 
     classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.1.RELEASE") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 
apply plugin: 'kotlin' 

jar { 
    baseName = 'xproject' 
    version = '0.1.0' 
} 

repositories { 
    mavenCentral() 
    jcenter() 
} 

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web") 
    compile("org.springframework.boot:spring-boot-starter-tomcat") 
    compile("org.springframework.boot:spring-boot-devtools") 
    compile 'org.springframework.data:spring-data-mongodb:1.8.2.RELEASE' 
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" 
    compile "com.restfb:restfb:1.18.1" 

    testCompile("junit:junit") 
    testCompile("org.springframework.boot:spring-boot-starter-test") 

} 

sourceSets { 
    main { 
     java.srcDirs += ['java', 'kotlin'] 
    } 

    test { 
     java.srcDirs += 'test' 
    } 
} 

UPD # 1

Вот класс Application (я не трогайте его с самого начала).

@SpringBootApplication 
open class Application { 
    companion object { 
     @JvmStatic fun main(args: Array<String>) { 
      SpringApplication.run(Application::class.java, *args) 
     } 
    } 
} 

UPD # 2

Малый автономный код

@RestController 
@SpringBootApplication 
@ComponentScan 
public class GreetingController { 
    public static void main(String[] a) { 
     SpringApplication.run(GreetingController.class, a); 
    } 

    @PostConstruct 
    public void postConstruct() { 
     System.out.println("!! Post construct called"); 
    } 

    private static final String template = "Hello, %s!"; 
    private final AtomicLong counter = new AtomicLong(); 

    @RequestMapping("/greeting") 
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { 
     return new Greeting(counter.incrementAndGet(), 
          String.format(template, name)); 
    } 
} 

дает мне почти тот же результат

:: Spring Boot ::  (v1.3.1.RELEASE) 

2016-01-19 17:18:19.790 INFO 8230 --- [ restartedMain] hello.GreetingController     : Starting GreetingController on fake with PID 8230 (/home/user/code/xproject/server/build/classes/main started by user in /home/user/code/xproject/server) 
2016-01-19 17:18:19.814 INFO 8230 --- [ restartedMain] hello.GreetingController     : No active profile set, falling back to default profiles: default 
2016-01-19 17:18:19.918 INFO 8230 --- [ restartedMain] s.c.a.AnnotationConfigApplicationContext : Refreshing org.spring[email protected]71ceb8: startup date [Tue Jan 19 17:18:19 GMT 2016]; root of context hierarchy 
!! Post construct called 
2016-01-19 17:18:22.860 INFO 8230 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer  : LiveReload server is running on port 35729 
2016-01-19 17:18:22.905 INFO 8230 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter  : Registering beans for JMX exposure on startup 
2016-01-19 17:18:22.922 INFO 8230 --- [ restartedMain] hello.GreetingController     : Started GreetingController in 4.022 seconds (JVM running for 4.949) 
2016-01-19 17:18:22.924 INFO 8230 --- [  Thread-8] s.c.a.AnnotationConfigApplicationContext : Closing org.spring[email protected]71ceb8: startup date [Tue Jan 19 17:18:19 GMT 2016]; root of context hierarchy 
2016-01-19 17:18:22.930 INFO 8230 --- [  Thread-8] o.s.j.e.a.AnnotationMBeanExporter  : Unregistering JMX-exposed beans on shutdown 

Process finished with exit code 1 
+0

Просьба показать ваше приложение «Приложение» или «Класс Application.Companion». – dunni

+0

@dunni Я обновил вопрос – ruX

+2

Ваш путь каким-то образом укушен, он не обнаруживает tomcat и, как таковой, не запускает веб-приложение, без этого оно заканчивается немедленно. (Он должен начинать веб-контент, а не простой контекст. Убедитесь, что нет ничего, что могло бы изменить содержимое веб-сайта. –

ответ

0

у меня был точно такой же вопрос, вы просто и в моем случае я забыл добавить весенне-бо ot-starter-web как зависимость. У меня были копии/вставки зависимостей из базового примера, только с загрузкой с пружинным загрузчиком, и я неправильно его понял. Как только я добавил его, контейнер запускался нормально, и я получил обычное веб-приложение, прослушивающее порт 8080.

Это мой первый очень простой тест, так что просто имеет пружинную загрузку-стартер-Интернет, Котлин-STDLIB и Котлин-отражать как зависимости и класс, который выглядит следующим образом:

@SpringBootApplication 
class Application { 
    private val log = LoggerFactory.getLogger(Application::class.java) 
} 

fun main(args: Array<String>) { 
    SpringApplication.run(Application::class.java, *args) 
} 

Из того, что я вижу в вашем коде, единственное, что я могу придумать, - это то, что вам может потребоваться и котлин-рефлекс. У меня есть идея включить его из этого blog post и this sample project также использует его так ... Удачи!

Смежные вопросы