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日

相关文章

  • SpringBoot集成Spring Data JPA及读写分离

    Spring Boot集成Spring Data JPA及读写分离 Spring Data JPA是Spring社区的一个子项目,它简化了JPA的重复性代码,使得与JPA的交互更加便捷。如果我们想要在Spring Boot项目中使用JPA,那么我们可以使用Spring Data JPA轻松实现该功能。另外,当我们需要将读写操作分离到不同的数据库中,我们可以使…

    Java 2023年5月20日
    00
  • java list与数组之间的转换详细解析

    Java List与数组之间的转换详细解析 在Java中,List是常用的数据结构之一,而数组也是Java中常用的数据结构。我们有时候需要在它们之间进行转换,本文将详细讲解Java List与数组之间的转换攻略。 1. 将List转换为数组 将List转换成数组需要注意以下几点: 首先,需要确定要转换的List的元素类型; 其次,需要创建一个与List元素类…

    Java 2023年5月26日
    00
  • java创建一个类实现读取一个文件中的每一行显示出来

    下面是详细的攻略: 创建一个Java类 首先,要在Java中创建一个类来实现读取文件中每一行并显示出来。在这个类中,我们需要使用Java的文件读取API以及循环来逐行读取文件中的内容并将其显示出来。 public class FileReadExample { public static void main(String[] args) { try { //…

    Java 2023年5月19日
    00
  • struts2中实现多个文件同时上传代码

    当在Struts2中需要同时上传多个文件时,需要进行以下几个步骤: 1.在JSP中设置表单属性 enctype=multipart/form-data,以便能够上传文件。 <form action="upload.action" method="post" enctype="multipart/form…

    Java 2023年5月20日
    00
  • Ajax实现异步加载数据

    Ajax实现异步加载数据 什么是Ajax Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页内容的技术。它利用JavaScript在后台与服务器交换数据,实现局部更新网页的效果。 Ajax的优点 Ajax的优点主要有以下几个: 减少数据传输量:采用Ajax技术,仅需要更新页面的部分…

    Java 2023年6月15日
    00
  • SpringBoot和Redis实现Token权限认证的实例讲解

    下面我会为您介绍如何使用Spring Boot和Redis实现Token权限认证。 为什么使用Token认证? 在Web应用程序中,为了保护页面和API,需要用户进行登录并验证其身份。其中一种常用的方法是使用Token认证。在Token认证中,用户首先输入用户名和密码进行登录,验证成功后,服务器会返回一个Token令牌,将其存储在客户端。随后,客户端将该To…

    Java 2023年5月20日
    00
  • Java 实现倒计时功能(由秒计算天、小时、分钟、秒)

    那我来为您详细讲解Java实现倒计时功能的步骤和示例。 首先,我们需要定义一个倒计时的时间间隔,例如30秒: int countDownTime = 30; // 定义倒计时时长,单位为秒 然后,我们需要定义一个计时器,使用Java的Timer和TimerTask类。 Timer timer = new Timer(); 接着,我们需要编写一个倒计时的任务,…

    Java 2023年5月20日
    00
  • 一小时迅速入门Mybatis之Prepared Statement与符号的使用

    一小时迅速入门Mybatis之Prepared Statement与符号的使用 什么是Mybatis Mybatis是一款优秀的ORM框架,通过XML或注解的方式将Java对象与数据库进行映射,极大地简化了数据库操作的流程。本篇攻略旨在介绍如何快速使用Mybatis的Prepared Statement与符号。 Prepared Statement与符号的使…

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