如何使用spring boot制作一个通用的库

Gra*_*aBa 43 java spring spring-boot

现在我想为我们的系统开发一个通用的邮件服务.在我们设计时,我们希望开发一个RabbitMQ生产者和消费者.在消费者方面,我们可以开发和部署一个Spring BootSpring Cloud应用程序,但在生产者方面,我们希望提供一个像下面的接口这样的公共邮件客户端,并为其他系统创建一个jar依赖项.

interface MailClient {
  ListentableFuture send(Message message);
}
Run Code Online (Sandbox Code Playgroud)

但我看到使用许多声明方法的spring boot和spring cloud,似乎必须使用应用程序类,但我只想要一个类引用而不需要部署.我不知道如何实现它.

San*_*jay 78

Spring Lemon就是一个很好的例子.它使用Spring Boot,并且包含在其他Spring Boot应用程序中.这就是我们创建它的方法:

  1. 创建一个春天启动应用程序,使用弹簧启动入门向导STS.
  2. 删除了生成的应用程序和测试类.
  3. 已删除spring-boot-maven-plugin,即pom.xml中的buildpluginRepositories部分.(如果没有这些部分,请查看pom.xml的外观).

  • @sanjay在使用Spring Lemon作为依赖项的地方,你是否将这个注释`@SpringBootApplication(scanBasePackages = {"com.naturalprogrammer.spring"})`添加到启动应用程序的主类中.换句话说,如果你知道我的意思,你如何弹出Spring Lemon中的所有类,以便Spring处理它. (3认同)

jav*_*301 36

Spring文档准确地解决了这个问题,并展示了使用/ for Spring boot实现公共库的正确方法:

https://spring.io/guides/gs/multi-module/

正如文档所述:虽然没有使用Spring Boot Maven插件,但您确实希望利用Spring Boot依赖项管理.

  • 这是最好的答案! (3认同)

dar*_*_mx 5

我有与您类似的需求,到目前为止,我设法构建了一个可用于其他项目的库,配置如下:

`

<modelVersion>4.0.0</modelVersion>
<groupId>mx.grailscoder</groupId>
<artifactId>library</artifactId>
<version>1.0-SNAPSHOT</version>
<name>My Custom Library built on Spring Boot</name>
<description>Spring Boot Project library</description>
<packaging>jar</packaging>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.4.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <logentries-appender>RELEASE</logentries-appender>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

`

值得一提的是,我跳过了该repackage任务,因为我的库没有任何主类,因此发出mvn install任务不会失败。


jny*_*jny -9

根据文档

Spring Boot 可以轻松创建独立的、 生产级的 基于 Spring 的应用程序,您可以“直接运行”。

但 Spring Boot 并不是适合所有情况的灵丹妙药。如果你想创建一个库,你可以创建一个常规的 spring 项目,它构建一个 jar 并将其存储在你公司的存储库中(如果有)。

  • Spring IO 文档准确地解决了这个问题,并展示了如何使用 Spring Boot 来做到这一点(请参阅我的回答) (2认同)