SpringBoot多模块项目框架搭建过程解析
作者:seliote 发布时间:2022-10-02 06:12:34
这篇文章主要介绍了SpringBoot多模块项目框架搭建过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
创建根项目,New Project 创建一个名为 sms-bomber 的 SpringBoot 新项目,打包为 JAR 的即可,这里只添加 Lombok 与 spring-boot-starter-web 依赖,这两个依赖会传递给所有子模块,删除创建完成的项目中的 .mvn\ src\ mvnw mvnw.cmd
创建启动模块,根目录项目名上右键 New -> Model 选择 Maven 类型,不要选择 create from archetype,Parent 属性选择刚才创建的根项目,先创建一个 ${PREFIXE}-start 的模块,用于启动项目,start 模块 resources 目录下创建
server:
servlet:
# 项目上下文路径
context-path: /sms-bomber
spring:
main:
# 关闭 banner
banner-mode: off
profiles:
# 测试环境
active: dev-mysql
# 生产环境
# active: prod-mysql
以及 logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<!-- FIXME 记得更改如下配置 -->
<!-- CONSOLE/FILE -->
<property name="output-ref" value="CONSOLE" />
<property name="logfile-dir" value="D:/Tmp/Log" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<file>${logfile-dir}/ticket.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${logfile-dir}/ticket.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>5</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>1MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="INFO">
<appender-ref ref="${output-ref}" />
</root>
<!-- 指定包的日志等级 -->
<!-- 使用 additivity="true" 会同时使用 appender-ref -->
<logger name="com.seliote.smsbomber" level="DEBUG" additivity="false">
<appender-ref ref="${output-ref}" />
</logger>
</configuration>
创建项目启动类
package com.seliote.smsbomber;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 项目启动类
*
* @author LiYangDi
* @since 2020/1/26
*/
@SpringBootApplication(scanBasePackages = "com.seliote.smsbomber")
public class Application {
public static void main(String... args) {
SpringApplication.run(Application.class, args);
}
}
创建 Servlet 初始化类
package com.seliote.smsbomber;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* 打 WAR 包 Servlet 初始化
*
* @author LiYangDi
* @since 2020/1/26
*/
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
修改 IDEA 的启动类,尝试启动项目
修改启动模块打包方式为 war, 修改启动模块的 pom.xml,project 节点下添加 <packaging>war</packaging> 与
<build>
<plugins>
<!-- 打包配置 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- war 包名 -->
<finalName>sms-bomber</finalName>
</configuration>
</plugin>
</plugins>
</build>
建一个 TestCtr,maven package 一下把 war 扔进 Tomcat 里体验一下
创建模块 persistence, service, web, common 层模块层模块,并配置相关依赖,根项目 pom.xml 里添加依赖 project 节点下添加,再依次
<!-- 用于多模块版本管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.seliote</groupId>
<artifactId>sms-bomber-common</artifactId>
<version>${sms-bomber.version}</version>
</dependency>
<dependency>
<groupId>com.seliote</groupId>
<artifactId>sms-bomber-persistence</artifactId>
<version>${sms-bomber.version}</version>
</dependency>
<dependency>
<groupId>com.seliote</groupId>
<artifactId>sms-bomber-service</artifactId>
<version>${sms-bomber.version}</version>
</dependency>
<dependency>
<groupId>com.seliote</groupId>
<artifactId>sms-bomber-web</artifactId>
<version>${sms-bomber.version}</version>
</dependency>
<dependency>
<groupId>com.seliote</groupId>
<artifactId>sms-bomber-start</artifactId>
<version>${sms-bomber.version}</version>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>${mariadb.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
dependencies 节点下添加用于全局模块使用
<dependency>
<groupId>com.seliote</groupId>
<artifactId>sms-bomber-common</artifactId>
</dependency>
${sms-bomber.version} 等版本定义在 properties 标签下定义
persistence 模块的 pom.xml 下添加依赖
<dependencies>
<!-- MariaDB 驱动 -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 持久层框架 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
service 模块 pom.xml 下添加
<dependencies>
<dependency>
<groupId>com.seliote</groupId>
<artifactId>sms-bomber-persistence</artifactId>
</dependency>
</dependencies>
web 模块 pom.xml 下添加
<dependencies>
<dependency>
<groupId>com.seliote</groupId>
<artifactId>sms-bomber-service</artifactId>
</dependency>
</dependencies>
start 模块 pom.xml 下添加
<dependencies>
<dependency>
<groupId>com.seliote</groupId>
<artifactId>sms-bomber-web</artifactId>
</dependency>
</dependencies>
配置 SpringDataJpa
dev yml 下添加
spring:
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://127.0.0.1:3306/sms_bomber
username: sms_bomber
password: 123456!@#$%^qp
jpa:
database-platform: org.hibernate.dialect.MariaDB103Dialect
open-in-view: false
show-sql: true
来源:https://www.cnblogs.com/seliote/p/12234903.html


猜你喜欢
- 委托:顾名思义,让别人帮你办件事。委托是C#实现回调函数的一种机制。可能有人会问了,回调函数是个啥???举个例子:我现在是一家公司的老板,公
- java swing GUI窗口美化一般我们写出的窗口是这个样子的,文本框和按钮都不是太美观,如果按钮是原色的就更难看了。今天发现了一个更加
- 使用maven引入jar<dependency> <groupId>com.itextpdf</g
- 经常有同学问到,使用Android能不能开发游戏呢?能开发那些游戏呢?由于操作系统和开发语言局限,一般开发安卓手机游戏,我们很少使用其自带语
- 为什么使用JUnit5JUnit4被广泛使用,但是许多场景下使用起来语法较为繁琐,JUnit5中支持lambda表达式,语法简单且代码不冗余
- pom.xml配置<dependency> <groupId>org.springframework.
- 创建一个用户类类型的集合,手动输入用户库主要是判定输入的用户名和密码是否与库中的匹配做好区别是用户名输入错误还是密码输入错误的提示。定义用户
- 以下弹出框是框的实现,放入到SWT项目下就可运行。1.提示框MessageBox mb = new MessageBox(shell,SWT
- 思路首先编写程序时,或多或少会存在几个固定的Filter,那么第一步就是为确定的那几个Filter指定好顺序。(通常情况下的使用场景是:你要
- 一 前言这篇文章是很基础的一文,没多大深度,对于开发人员必然是熟练于心。本篇文章的主题是为什么java要设置类成员访问级别?其原因也很简单,
- spring容器初始化Bean操作在某些情况下,Spring容器在初始化Bean的时候,希望在初始化bean前和销毁bean前进行一些资源的
- 我们开启一个线程,线程每隔一秒发送一次消息,我们在消息中更新TextView上显示的时间就ok了。首先我们在布局文件中放一个TextView
- 源码:[StructLayout(LayoutKind.Explicit)] public struct IP {&nb
- 前言本文主要给大家介绍了关于Java读取二进制文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。读Hex写CS
- 在多线程处理问题时,无法通过@Autowired注入bean,报空指针异常,在线程中为了线程安全,是防注入的,如果要用到这个类,只能从bea
- 本文实例讲述了Android开发之组件GridView简单使用方法。分享给大家供大家参考,具体如下:案例:简单的图片浏览器,保存图片到相册保
- C#函数返回多个参数数值通过out/Ref实现,声明函数时用out指定返回变量。写了一个DEMO,输入字符“测试字符&a
- 平时项目中只要涉及表,那么一定能接触到众多各式各样的ID编号,博主整理一些常用的ID格式,整合一个ID生成工具类,供大家参考,如果有什么不足
- 前言MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手
- 使用new操作符来创建对象,其背后到底发生了什么?有一个父类Animal,Dog派生于Animal。class Program