spring-boot

概述

为了提升halo框架在以微服务为架构模式下应用的适配度,进一步推进使用halo框架的应用系统架构演化。halo框架在doritos.3.0版本中正式引入了spring-boot,作为halo框架有一个基础构件。spring-boot让基于spring生态开发的应用系统更高效的完成生产独立部署和运行。获得“开箱即用”的体验。spring-boot构件的优势特征可以总结为以下几方面: 1. 可以创建一个独立可部署的Java应用程序,不再依赖J2EE容器中间件来实现企业级应用的功能。 2. 可以让应用通过内嵌版本的Tomcat, Jetty, Undertow,不再需要构建war包。 3. 提供了更加"直截了当"的starter依赖开发模式,简化构建配置的过程。 4. 对spring配置第三方程序依赖都能实现自动化装配。 5. 提供了“生产就绪型”的功能特性:例如metrics,健康检查,配置外化等方面。 6. 彻底的去XML配置化。以无新增代码的形式完成配置。

特性浏览

特性描述

halo使用程度

推荐使用指数

高度依赖

推荐使用

高度依赖

推荐使用

未使用

推荐试用

高度依赖

推荐使用

高度依赖

推荐使用

未使用

不推荐使用

未使用

不推荐使用

高度依赖

要求使用

未使用

不推荐使用

中度依赖

推荐试用

未使用

推荐使用

轻度依赖

不推荐使用

轻度依赖

不推荐使用

中度依赖

推荐使用

未使用

不推荐使用

轻度依赖

推荐使用

未使用

推荐试用

高度依赖

要求使用

未使用

不推荐使用

高度依赖

推荐使用

高度依赖

推荐使用

高度依赖

推荐使用

未使用

推荐试用

应用启动形式

halo在halo-xxx-starter构件簇中预置了应用在JVM本地进程的启动方式。同时也通过SpringBootServletInitializer的实现完成对外部J2EE容器的兼容性启动。

@Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, MongoAutoConfiguration.class, SecurityAutoConfiguration.class})
@ComponentScan(value = {"com.*.*.service", "com.*.*.business"}, useDefaultFilters = false, includeFilters = {
        @ComponentScan.Filter(value = {Autowired.class, Resource.class, Service.class, Scope.class})
})
@ComponentScan(value = {"com.*.*.dao"}, useDefaultFilters = false, includeFilters = {
        @ComponentScan.Filter(value = {Autowired.class, Resource.class, Repository.class})
})
@ImportResource({"classpath*:dasc/applicationContext-dasc-support.xml", "classpath*:applicationContext-*.xml"})
@AutoConfigureOrder
public class ServiceAppStarter extends SpringBootServletInitializer {

    public static void main(String[] args) {
        loadApplicationProperties(new SpringApplicationBuilder(ServiceAppStarter.class)).build().run(args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return loadApplicationProperties(builder.sources(ServiceAppStarter.class));
    }

    private static SpringApplicationBuilder loadApplicationProperties(SpringApplicationBuilder builder) {
        try {
            return builder.properties(PropertiesLoaderUtils
                    .loadProperties(new ClassPathResource("application.properties")));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

Last updated