搭建SpringBoot项目

基于Maven搭建SpringBoot项目骨架,模块化管理项目

新建项目

当前项目作为父工程、作管理项目用

处理父工程目录结构

红框的目录文件都可以删除

其中包含一些配置文件,还有src目录,因为我们是将project作为父工程管理项目,所以不需要src目录了,只需要在pom文件中做好管理配置

删完后:

修改.gitignore文件:

可根据自己的项目情况增减文件内容

HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
out/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

# Compiled class file
*.class

# Log file
*.log

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# IDEA
.idea/
*.iws
*.iml
*.ipr

# NetBeans
nbproject/private/
build/
nbbuild/
dist/
nbdist/
nbactions.xml
nb-configuration.xml

# Gradle
.gradle/
gradle/
*.gradle
gradle-wrapper.jar

修改父工程的pom文件

原pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.oliver</groupId>
    <artifactId>SpringbootProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringbootProject</name>
    <description>SpringbootProject</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>21</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

修改后:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

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

    <groupId>com.oliver</groupId>
    <artifactId>SpringbootProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringbootProject</name>
    <description>Springboot项目骨架demo</description>

    <properties>
        <java.version>21</java.version>
        <lombok.version>1.18.36</lombok.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
  • 删除了原pom依赖中有一些无用标签
  • 删除了原pom文件中的依赖,当前父工程只作依赖管理,不导入依赖
  • 版本管理:以lombok为例,当前父工程对lombok进行了管理,确定了lombok版本。后面继承父工程的module若使用lombok只需直接导入该依赖坐标即可,不用指明版本号。当父工程中的版本号修改了,那么所有导入该依赖的子模块都会变化,这样就方便了工程的版本管理(此处只以lombok为例,实际要加入很多工程必要依赖)
  • 父工程的子模块需要导入SpringBoot相关的依赖时,只需写依赖坐标、无需写版本号

当你创建一个SpringBoot项目时,它就会继承spring-boot-starter-parent pom

而它又继承了spring-boot-dependencies

spring-boot-dependencies中对大量常见的依赖版本进行了预定义,这些预定义的版本是经过Spring boot团队验证过的,能保证依赖和Spring Boot框架的兼容性

所以当工程或模块导入Spring Boot的相关依赖和一些常见依赖时,根据层级关系(Spring Boot Starter Parent - 工程 - 模块 - ...)就不用写版本号了,Spring Boot 的依赖管理系统会自动为未指定版本的依赖提供合适的版本,从而保证项目的稳定性与兼容性

可以使用Maven命令查看项目实际使用的项目依赖

mvn dependency:tree

这命令会输出项目的依赖树,从中找到你想看的依赖和版本即可

新建module

注意Parent:因为我们当前是直接从项目父工程拉取创建module,所以这里自动选择了父工程

如果我们要在module中再创建子module,需要注意看一下这里,是不是选择了正确的父module,而不是父工程

创建三个module,并在module-03中又创建子模块common和utils,模拟多个模块的开发场景

可以根据业务需求,选择是否删除src目录

因为有的module只是作为通用模块,并没有业务逻辑代码,会在该模块中导入一些公用依赖,其他模块只需要直接引入该模块即可,便于管理和使用

此时的项目结构:

现在父工程的pom文件中,多了modules标签,表明已经正确管理了这些模块

我们要对这些module也进行版本控制

(较之前新增了很多依赖管理,方式和一开始的lombok相同,此处就略过过程了)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

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

    <groupId>com.oliver</groupId>
    <artifactId>SpringbootProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <packaging>pom</packaging>

    <name>SpringbootProject</name>
    <description>Springboot项目骨架demo</description>

    <modules>
        <module>module-01</module>
        <module>module-02</module>
        <module>module-03</module>
    </modules>

    <properties>
        <java.version>21</java.version>
<!--这里对三个模块进行版本控制,或者也可以不定义三个模块的版本,直接使用和父工程一样的版本即可,就直接在dependencyManagement中version使用${version}即可-->
        <module-01.version>0.0.1-SNAPSHOT</module-01.version>
        <module-02.version>0.0.1-SNAPSHOT</module-02.version>
        <module-03.version>0.0.1-SNAPSHOT</module-03.version>
        <lombok.version>1.18.36</lombok.version>
        <mybatis-plus.version>3.5.10.1</mybatis-plus.version>
        <fastjson.version>1.2.83</fastjson.version>
        <mysql.version>8.0.28</mysql.version>
        <druid.version>1.2.14</druid.version>
        <commons-lang.version>2.6</commons-lang.version>
    </properties>

    <dependencyManagement>
        <dependencies>
<!--            如果不单独定义三个模块的版本,就直接这样使用就可以了,表示版本和父工程的版本保持一致-->
<!--            <dependency>-->
<!--                <groupId>com.oliver</groupId>-->
<!--                <artifactId>module-01</artifactId>-->
<!--                <version>${version}</version>-->
<!--            </dependency>-->
            <dependency>
                <groupId>com.oliver</groupId>
                <artifactId>module-01</artifactId>
                <version>${module-01.version}</version>
            </dependency>
            <dependency>
                <groupId>com.oliver</groupId>
                <artifactId>module-02</artifactId>
                <version>${module-02.version}</version>
            </dependency>
            <dependency>
                <groupId>com.oliver</groupId>
                <artifactId>module-03</artifactId>
                <version>${module-03.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-lang</groupId>
                <artifactId>commons-lang</artifactId>
                <version>${commons-lang.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

修改module的pom文件

根据每个module的功能需要,可以为其导入对应的依赖

现在我们将共用的依赖导入到module-03中的子模块common中

当其他模块需要时直接引入common模块,然后根据自己模块的业务需求导入需要的其他依赖即可

建议

当一个模块有子模块时,最好父模块就作汇总管理就行(如同父工程对所有模块的管理和汇总),具体的业务和依赖在其子模块中进行,比如common模块做一些公共的事情、redis模块做redis相关的处理等

module-03的pom文件:

对子模块的汇总和管理,引入依赖的工作放到每个子模块中做

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.oliver</groupId>
        <artifactId>SpringbootProject</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>module-03</artifactId>
    
    <packaging>pom</packaging>

    <modules>
        <module>common</module>
        <module>utils</module>
    </modules>

</project>

common模块pom文件,引入公共依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.oliver</groupId>
        <artifactId>module-03</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>common</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>4.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  • parent标签:继承的父工程的坐标
  • 依赖:如果当前导入的依赖在父工程中已经做了管理、定义了版本,那么此处就不用写版本号了,如果没有那么就写明版本(如lombok和easyexcel)
  • spring-boot-starter依赖:只需写坐标无需写版本。因为common继承module-03、module-03继承父工程、父工程继承3.4.3版本的spring-boot-starter-parent。当导入Springboot相关依赖时,其版本已经在spring-boot-starter-parent中被定义好了
  • spring-boot-starter-test依赖:与上同理。只需注意scope标签,它表明只是在测试时该依赖生效,或者可以改为compile,表示在编译时生效等等。
  • build标签:引入一些必要插件

模块之间的引用

当前在父工程的pom文件里,已经定了三个module

假设当module-01想要引入module-02,那么直接引入即可,版本已经在父工程中控制好了

但是当我们需要引入模块的子模块时,如果直接引入其父模块,是没办法把子模块的内容引入的

以module-03中的子模块common为例,作为common模块,我现在想在module-01中把它引入,如果我直接引入module-03的坐标,企图把它下面所有子模块一网打尽的话,这样是失败的。

所以当遇到这种情况,需要做的是三件事:

  1. 父模块尽量不要去做一些依赖导入的事情,后续管理之类的会比较杂乱,它就只做子模块的管理就好,这样以后打开父模块的pom文件看是也一目了然
  2. 父模块是否在父工程中进行版本控制,我觉得控制也行不控制也行。因为它做管理并不包含任何依赖,但是以防万一和统一,可以对其控制也没问题
  3. 因为其他的模块需要引入common模块,那么我们需要把它在父工程中也做版本控制(后续如果有其他模块有相同的作用也需要这样做)。之后我们就可以在其他模块中直接引入它了

module-03的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.oliver</groupId>
        <artifactId>SpringbootProject</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>module-03</artifactId>

    <packaging>pom</packaging>

    <modules>
        <module>common</module>
        <module>utils</module>
    </modules>

</project>

 在父工程中添加了对common模块的版本控制

module-01引入common:

验证:

我在common中定义了一个CommonDTO类,我现在在module-01中使用,并且使用Common中的依赖lombok,全都可以使用,证明导入成功

新建配置文件

根据各模块的业务安排,给对应的module中添加配置文件

因为我们这个项目是父工程只作管理项目,所以我们将配置文件加到业务模块中

我们把module-01当作业务模块、module-02和03当作通用模块

所以将【启动类】和【配置文件】都加到业务模块module-01中

如下:

启动类: 

package com.oliver;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@Slf4j
public class SpringbootProjectApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootProjectApplication.class, args);
        log.info("server start success !!");
    }
}

配置文件:

此配置文件只是作为示例, 之后可以根据业务需求增删配置内容

server:
  port: 8080

spring:
  application:
    name: SpringbootProject
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/database1?useSSL=false&serverTimezone=UTC
      username: root
      password: 123456



mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
   db-config:
     id-type: assign_id

 注意!

写配置的时候,要保证写的【内容】在当前模块中已经存在该依赖

比如上面配置文件中的datasource和mybatis-plus

那就要保证,当前的module-01这个模块中,已经导入了这些依赖,要不然会报错

(因为在修改module那步时,作为示例只导入了三个依赖,并没有包含mysql和mybatis-plus的依赖,所以在写这两个配置时就报错了,需要回头去把依赖加上了再写配置就好了,这点得注意)

启动项目

启动项目,查看控制台

可以看见我们在启动类中添加的日志已经打印了,表示项目启动成功

这样一个Springboot项目的骨架就搭建完成了

之后可以根据业务需求开发即可

1. 环境准备 在开始搭建Springboot项目之前,需要安装以下环境: - JDK 8 或以上版本 - Maven - IDE(如IntelliJ IDEA、Eclipse等) 2. 创建Springboot项目 在IDE中创建一个新的Maven项目,选择Spring Initializr作为项目模板。 Spring Initializr是Spring官方提供的一个快速构建Springboot项目的工具,可以通过简单的配置和选择快速创建一个基础的Springboot项目。 在创建项目时,需要选择项目的基本配置,包括项目的名称、类型、包名、依赖等。可以根据自己的需求进行配置,也可以选择默认配置。 3. 添加依赖 Springboot项目的依赖管理非常方便,可以通过Maven中央仓库自动下载所需的依赖。 在pom.xml文件中添加需要的依赖即可,例如: ```xml <dependencies> <!-- Springboot核心依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Mybatis依赖 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <!-- 数据库驱动依赖 --> <dependency> <groupId>com.mysql.jdbc</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> ``` 4. 编写代码 在src/main/java目录下创建Springboot项目的主程序,该程序需要使用@SpringBootApplication注解标注。 ```java @SpringBootApplication public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } } ``` 在src/main/resources目录下创建application.properties文件,用于配置Springboot项目的一些参数。 例如,可以配置数据库连接参数: ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 在src/main/java目录下创建具体的业务逻辑代码,例如: ```java @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") public User getUserById(@PathVariable("id") Long id) { return userService.getUserById(id); } @PostMapping("/") public void saveUser(@RequestBody User user) { userService.saveUser(user); } } ``` 5. 运行项目 在IDE中运行Springboot项目,可以通过浏览器访问http://localhost:8080/user/1测试接口是否正常。 如果一切正常,则说明Springboot项目已经搭建成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值