SpringBoot如何在应用程序服务器上工作

时间:2018-08-16 05:28:31

标签: spring-boot

我正在将Spring REST应用程序迁移到Spring Boot微服务。我有些疑问:

我知道spring boot有一个 var cpaclassids = FetchProductTypes(ids); var cpaclids = string.Join(",", cpaclassids); var query = (from x in partJoinTableRepository.GetPartJoinQuery() join y in partRepository.GetPartsQuery() on x.PartId equals y.Id join z in partProductTypeReposiotry.GetPartProductTypesQuery() on x.PartId equals z.PartId where y.IsSkipped == 0 && (y.IsDisabled != "Y" || y.IsDisabled == null) && z.CreatedDate == x.CreatedDate && x.CreatedDate == Convert.ToDateTime(fromDate) select x).Cast<PartJoinTable>(); var predicate1 = PredicateBuilder.True(query); predicate1 = predicate1.And(x => cpaclassids.Contains(x.ProductTypeId.ToString())); int lst = query.Where(predicate1).Select(x => x.PartId).Distinct().ToList().Count(); ,它调用SpringApplication中存在的静态main()。因此,当我们在Eclipse IDE中将其作为“ Java Applicaton”运行时,此run()被调用,而main()注释起到了神奇的作用。但是,当我在Websphere Application Server上部署此应用程序时,它如何工作,因为现在不会调用@SpringBootApplication。然后如何在不调用main()的情况下加载所有bean。

1 个答案:

答案 0 :(得分:2)

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()方法在本地启动应用程序。