[
  {
    "path": ".gitignore",
    "content": ".classpath\n.project\nwebapp/WEB-INF/classes/\nlib_managed/\nproject/target/*\nproject/project/target/*\nproject/build/target/*\nproject/boot/*\nproject/plugins/lib_managed/*\nproject/plugins/project/*\nproject/plugins/target/*\nproject/plugins/src_managed/*\ntarget/\n.idea/\n.idea_modules/\n*.iml\n.DS_Store\nout/\nlogs/\n*.log\n.settings/\n"
  },
  {
    "path": "README.md",
    "content": "# 项目介绍\n\nDubbo项目的SpringBoot自动配置module项目， 会提供一个CommandLineRunner来帮助latch当前dubbo服务端进程的退出。\n\n# 使用说明\n\n在要开发的基于dubbo和springboot的微服务项目的pom.xml中追加如下依赖配置：\n\n\n~~~~~~~ {.xml}\n        <dependency>\n            <groupId>com.alibaba</groupId>\n            <artifactId>dubbo</artifactId>\n            <version>2.5.3</version>\n            <exclusions>\n                <exclusion>\n                    <groupId>org.springframework</groupId>\n                    <artifactId>spring</artifactId>\n                </exclusion>\n            </exclusions>\n        </dependency>\n\n        <dependency>\n            <groupId>com.wacai</groupId>\n            <artifactId>spring-boot-starter-dubbo</artifactId>\n            <version>1.0.2</version>\n        </dependency>\n~~~~~~~\n\n然后， 在SpringBootApplication启动类中加载dubbo相关的spring xml配置即可：\n\n\n~~~~~~~ {.java}\n@SpringBootApplication\npublic class DubboWithSpringbootApplication {\n    /**\n     * SpringApplication的构造参数中， 标注了@SpringBootApplication的Main入口类是必须的；\n     * 后面的参数一般传入dubbo服务的bean定义所在的配置文件路径，比如\"classpath*:/spring/*.xml\"\n     * 之后，直接运行即可；（当然也可以设置一些参数，比如禁止banner打印等）\n     */\n    public static void main(String[] args) {\n        SpringApplication application = new SpringApplication(DubboWithSpringbootApplication.class, \"classpath*:/spring/**/*.xml\");\n        application.run(args);\n    }\n}\n~~~~~~~\n\n\n就这些~\n\n\n\n"
  },
  {
    "path": "pom.xml",
    "content": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starters</artifactId>\n        <version>1.2.5.RELEASE</version>\n    </parent>\n    <groupId>com.wacai</groupId>\n    <artifactId>spring-boot-starter-dubbo</artifactId>\n    <version>1.0.3-SNAPSHOT</version>\n    <packaging>jar</packaging>\n\n    <name>spring-boot-starter-dubbo</name>\n    <url>https://github.com/wacai/spring-boot-starter-dubbo</url>\n\n    <licenses>\n        <license>\n            <name>Apache License 2.0</name>\n            <url>http://www.apache.org/licenses/LICENSE-2.0</url>\n        </license>\n    </licenses>\n\n    <developers>\n        <developer>\n            <id>yunshi</id>\n            <name>陨石, aka.扶墙老师</name>\n            <email>yunshi@wacai.com</email>\n            <url>http://afoo.me/whoami.html</url>\n            <organization>wacai.com</organization>\n            <organizationUrl>http://www.wacai.com/</organizationUrl>\n        </developer>\n    </developers>\n\n    <scm>\n        <url>https://github.com/wacai/spring-boot-starter-dubbo</url>\n        <connection>git@github.com:wacai/spring-boot-starter-dubbo.git</connection>\n    </scm>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>com.wacai</groupId>\n            <artifactId>goodies</artifactId>\n            <version>1.0.0</version>\n        </dependency>\n    </dependencies>\n</project>\n"
  },
  {
    "path": "src/main/java/com/wacai/springboot/dubbo/autoconfigure/DubboAutoConfiguration.java",
    "content": "package com.wacai.springboot.dubbo.autoconfigure;\n\nimport com.wacai.springboot.dubbo.commands.DubboServiceLatchCommandLineRunner;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnClass;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.core.annotation.Order;\n\n@Configuration\n@Order\npublic class DubboAutoConfiguration {\n\n    protected Logger logger = LoggerFactory.getLogger(DubboAutoConfiguration.class);\n\n    @Value(\"${shutdown.latch.domain.name:com.wacai.lifecycles}\")\n    private String shutdownLatchDomainName;\n\n    @Bean\n    @ConditionalOnClass(name = \"com.alibaba.dubbo.rpc.Exporter\")\n    public DubboServiceLatchCommandLineRunner configureDubboServiceLatchCommandLineRunner() {\n        logger.debug(\"DubboAutoConfiguration enabled by adding DubboServiceLatchCommandLineRunner.\");\n        DubboServiceLatchCommandLineRunner runner = new DubboServiceLatchCommandLineRunner();\n        runner.setDomain(shutdownLatchDomainName);\n        return runner;\n    }\n}\n\n"
  },
  {
    "path": "src/main/java/com/wacai/springboot/dubbo/commands/DubboServiceLatchCommandLineRunner.java",
    "content": "package com.wacai.springboot.dubbo.commands;\n\nimport com.wacai.goodies.lifecycle.ShutdownLatch;\nimport org.springframework.boot.CommandLineRunner;\n\n\npublic class DubboServiceLatchCommandLineRunner implements CommandLineRunner {\n\n    private String domain = \"com.wacai.lifecycles\";\n\n    @Override\n    public void run(String... args) throws Exception {\n        ShutdownLatch latch = new ShutdownLatch(getDomain());\n        latch.await();\n    }\n\n\n    public String getDomain() {\n        return domain;\n    }\n\n    public void setDomain(String domain) {\n        this.domain = domain;\n    }\n}\n"
  },
  {
    "path": "src/main/resources/META-INF/spring.factories",
    "content": "org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.wacai.springboot.dubbo.autoconfigure.DubboAutoConfiguration"
  }
]