springboot聚合工程的部署与深入讲解

SpringBoot聚合工程的部署与深入讲解

什么是SpringBoot聚合工程?

SpringBoot聚合工程是指在一个工程中集成了多个模块,每个模块都是一个独立的SpringBoot项目。这些模块可以共享公共的代码和资源,同时也可以单独部署和运行。SpringBoot聚合工程的好处在于将多个关联的应用程序组合在一起,简化了项目的部署、维护和扩展。

如何创建SpringBoot聚合工程?

在创建SpringBoot聚合工程时,我们需要使用SpringBoot的Maven插件来创建一个父工程,然后再在其中创建多个子模块。以下是创建SpringBoot聚合工程的步骤:

  1. 打开Maven的POM文件,使用标签<packaging>pom</packaging>指定当前项目为父工程。
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
    <module>module1</module>
    <module>module2</module>
</modules>
  1. 创建子模块,注意要在父工程的目录下创建子模块的目录。
mkdir module1
cd module1
mvn archetype:generate -DgroupId=com.example -DartifactId=module1 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  1. 在子模块的POM中引入SpringBoot依赖。同时可以将公共的依赖放到父工程中,子模块可以通过继承来实现代码复用。
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

如何部署SpringBoot聚合工程?

在部署SpringBoot聚合工程时,我们需要先将父工程打包,然后部署各个子模块的jar包。以下是部署SpringBoot聚合工程的步骤:

  1. 在父工程的目录下执行mvn clean install命令,将父工程打包成一个jar包。
mvn clean install
  1. 进入每个子模块的目录,执行mvn clean package命令,将每个子模块打成独立的jar包。
cd module1
mvn clean package
  1. 使用java -jar命令启动每个子模块的jar文件。
java -jar module1/target/module1-1.0-SNAPSHOT.jar

示例一

我们现在要实现一个简单的blog系统,包含文章管理和用户管理两个模块,每个模块都是一个独立的SpringBoot项目。我们可以将这两个模块放到一个SpringBoot聚合工程中,以下是具体的步骤:

  1. 创建父工程。
mkdir blog
cd blog
mvn archetype:generate -DgroupId=com.example -DartifactId=blog -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  1. 在父工程的POM文件中指定子模块。
<modules>
    <module>article</module>
    <module>user</module>
</modules>
  1. 创建文章模块和用户模块。
cd blog
mkdir article
cd article
mvn archetype:generate -DgroupId=com.example.article -DartifactId=article -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

cd ../blog
mkdir user
cd user
mvn archetype:generate -DgroupId=com.example.user -DartifactId=user -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  1. 在每个子模块的POM中引入SpringBoot依赖。
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
  1. 分别在每个子模块的src/main/java目录下创建入口类,并在每个类上加上@SpringBootApplication注解。
@SpringBootApplication
public class ArticleApplication {

    public static void main(String[] args) {
        SpringApplication.run(ArticleApplication.class, args);
    }
}
  1. 在每个子模块的src/main/resources目录下创建配置文件application.yml,配置数据库连接等信息。
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_article
    username: root
    password: root
  1. 在每个子模块的src/main/java目录下创建相应的Controller和Service类。
@RestController
@RequestMapping("/api/article")
public class ArticleController {

    @Autowired
    private ArticleService articleService;

    @GetMapping("/{id}")
    public Article get(@PathVariable long id) {
        return articleService.getById(id);
    }
}

@Service
public class ArticleService {

    @Autowired
    private ArticleRepository articleRepository;

    public Article getById(long id) {
        return articleRepository.getOne(id);
    }
}
  1. 打包并运行
cd article
mvn clean package
cd ../user
mvn clean package
java -jar article/target/article-1.0-SNAPSHOT.jar
java -jar user/target/user-1.0-SNAPSHOT.jar

以上步骤就完成了一个简单的blog系统的创建和部署,我们可以通过访问不同的url来调用不同的模块。

示例二

在聚合工程中,一个子模块也可以作为另一个子模块的依赖,以实现代码复用和依赖管理的功能。下面我们以创建一个简单的用户认证系统为例,演示如何实现子模块之间的依赖管理。

  1. 创建父工程。
mkdir auth
cd auth
mvn archetype:generate -DgroupId=com.example -DartifactId=auth -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  1. 在父工程的POM文件中指定子模块。
<modules>
    <module>auth-server</module>
    <module>auth-client</module>
</modules>
  1. 创建服务端和客户端模块。
cd auth
mkdir auth-server
cd auth-server
mvn archetype:generate -DgroupId=com.example.server -DartifactId=auth-server -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

cd ../auth
mkdir auth-client
cd auth-client
mvn archetype:generate -DgroupId=com.example.client -DartifactId=auth-client -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  1. 关闭掉auth-client模块的入口类的自动运行功能,因为它是一个库模块,不需要运行入口类。
<build>
    <defaultGoal>install</defaultGoal>
    <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>
  1. 在服务端模块的POM文件中引入auth-client模块的依赖。
<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>auth-client</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>
  1. 在服务端模块的src/main/java目录下创建Controller和Service类。
@RestController
@RequestMapping("/api/user")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public String login(@RequestBody User user) {
        if (userService.login(user.getUsername(), user.getPassword())) {
            return "success";
        } else {
            return "failure";
        }
    }
}

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public boolean login(String username, String password) {
        User user = userMapper.getByUsername(username);
        if (user != null && user.getPassword().equals(password)) {
            return true;
        } else {
            return false;
        }
    }
}
  1. 在客户端模块的POM文件中引入auth-client模块的依赖。
<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>auth-client</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>
  1. 在客户端模块的src/main/java目录下创建Controller类,并在Controller中调用服务端提供的API。
@RestController
@RequestMapping("/api")
public class AuthController {

    @Autowired
    private AuthClient authClient;

    @PostMapping("/login")
    public String login(@RequestBody User user) {
        return authClient.login(user);
    }
}
  1. 在auth-client模块的src/main/java目录下创建AuthClient接口,并在接口上加上@FeignClient注解来指定服务端的地址。
@FeignClient(name = "auth-server", url = "http://localhost:8080")
public interface AuthClient {

    @PostMapping("/api/user/login")
    String login(@RequestBody User user);
}
  1. 打包并运行
cd auth-server
mvn clean package
cd ../auth-client
mvn clean install
cd ../auth-server
mvn clean package
java -jar auth-server/target/auth-server-1.0-SNAPSHOT.jar
java -jar auth-client/target/auth-client-1.0-SNAPSHOT.jar

以上步骤我们成功实现了一个简单的用户认证系统,其中客户端模块通过@FeignClient注解来调用服务端模块的API,实现了子模块之间的依赖管理和代码复用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot聚合工程的部署与深入讲解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 详解Java的回调机制

    详解Java的回调机制 什么是回调机制? 回调(Callback)指的是程序员在编写程序时,将一个函数作为参数传递到另一个函数中,并在另一个函数中调用这个函数的行为。具体来说,会有一个方法 A,在执行某个动作时,会调用另一个方法 B,方法 B 中的代码会在方法 A 完成时被调用,这样的方法调用方式被称为回调。 为什么需要回调机制? 在Java开发中,我们常常…

    Java 2023年5月26日
    00
  • 解析Tomcat的启动脚本–startup.bat

    解析Tomcat的启动脚本–startup.bat 什么是startup.bat文件 startup.bat是Tomcat服务器的启动脚本之一,通常在Windows操作系统中使用。该脚本文件位于Tomcat的bin目录下,用于启动Tomcat服务器及其Web应用程序。 启动流程 startup.bat启动Tomcat服务器的流程如下: 检查JAVA_HOM…

    Java 2023年5月19日
    00
  • Java 中的语法糖,真甜

    Java 中的语法糖是指用来简化代码编写并增强代码的可读性的一些特殊语法结构。这些语法糖不是 Java 语言本身所特有的特性,而是在编译过程中自动翻译成标准的 Java 代码,因此其实际效果就是让 Java 的代码更易读、更易懂。 下面介绍两个较为常见的 Java 中的语法糖: 1. for-each 循环语法 for-each 循环语法是一种非常方便的遍历…

    Java 2023年5月23日
    00
  • C#桥接模式完整实例

    C#桥接模式是一种软件设计模式,旨在将抽象和实现分离开来,以便它们可以独立地进行变化和演化。在此模式下,一个抽象类在其内部维护一个实现类的引用,并将具体的实现委托给实现类。这样便可以在不改变抽象类结构的情况下,改变具体实现类。 下面我们采用一个“图形和颜色”系统作为示例,在这个系统中,“图形”和“颜色”是两个独立的概念,它们可以独立从抽象和实现上进行扩展,并…

    Java 2023年5月19日
    00
  • SpringCloud Feign如何在远程调用中传输文件

    在SpringCloud Feign中,我们可以通过使用MultipartFile来传输文件。MultipartFile是Spring提供的一个接口,允许我们以字节流的形式传递文件。在远程调用时,我们可以在请求参数中添加MultipartFile类型的参数,即可将文件传输到远程服务。 对于使用Feign进行远程调用的场景,我们需要配置MultipartRes…

    Java 2023年5月20日
    00
  • Spring Security如何为用户示例添加角色详解

    为用户添加角色,是在Spring Security中实现权限控制的重要手段。下面我将详细讲解Spring Security如何为用户示例添加角色,并提供两个示例说明。 1. 添加角色和权限 首先,需要添加角色和权限至Security配置文件中。示例配置代码如下: spring: security: user: name: admin password: ad…

    Java 2023年6月3日
    00
  • Lombok基本注解之@SneakyThrows的作用

    下面是关于Lombok基本注解之@SneakyThrows的作用的完整攻略。 1. @SneakyThrows简介 在Java中,我们通常使用try-catch语句捕获异常。但是,有时候代码中出现的异常并不是我们想要处理的,而是完全出乎意料的异常情况,这时候需要抛出异常。抛出异常通常要求在方法签名上声明当前方法可能会抛出某种类型的异常,这会使代码变得冗长,甚…

    Java 2023年5月26日
    00
  • Spring实战之Bean销毁之前的行为操作示例

    下面我将详细讲解 Spring 实战之 Bean 销毁之前的行为操作示例。 什么是 Bean 的销毁行为操作 在 Spring 中,每个 Bean 都有生命周期,其中最后一个阶段就是销毁。在销毁之前,我们可以执行一些行为操作,例如释放资源、删除临时文件、关闭网络连接等等。Spring 提供了多种方式让我们在 Bean 销毁之前执行这些行为操作,下面我们将介绍…

    Java 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部