我正在将我们的 Spring REST 应用程序迁移到 Spring Boot 微服务。我有些疑惑:
据我所知,spring boot 有一个 main()
它调用静态 run()
它存在于 SpringApplication 中。所以,当我们在 Eclipse IDE 中将它作为“Java 应用程序”运行时,这个 main()
被调用和 @SpringBootApplication
注释发挥作用。但是当我在 Websphere Application Servers 上部署这个应用程序时,它是如何工作的,因为现在 main()
不会被调用。那么如何在不调用 main()
的情况下加载所有 bean .
最佳答案
Spring Boot 隐式启动了一个嵌入式服务器,它包含在 spring-boot-starter-tomcat
中。依赖性。这就是为什么main()
方法在引导环境中有效。
典型的解决方案是创建两个配置文件 - 一个用于启动开发,另一个用于部署 - 那么您可能有几个起点。
开发配置:
@Configuration
@Profile(Profiles.DEV)
@Import(AppConfig.class)
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.profiles(Profiles.DEV)
.run(args);
}
}
部署配置(适用于 WAS、tomcat 等):
@Configuration
@Profile(Profiles.DEPLOY)
@Import(AppConfig.class)
public class ApplicationTomcat extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application
.profiles(Profiles.DEPLOY)
.sources(ApplicationTomcat.class);
}
}
简介:
public class Profiles {
public final static String DEV = "dev";
public final static String DEPLOY = "deploy";
}
在您的部署配置文件中,不要忘记排除
spring-boot-starter-tomcat
依赖并使其成为 war
捆。通过这种方式,您可以以标准方式在 WAS(或 tomcat,...)上部署应用程序,并使用
main()
在本地启动您的应用程序方法。
关于spring-boot - Spring Boot 如何在应用服务器上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51870138/