IDEA2022 创建基于Maven的SpringBoot聚合单应用项目

基于SpringBoot的单应用项目模板(考虑到后期做微服务,内部已经做了拆分)

创建父工程

IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第1张图片
IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第2张图片
IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第3张图片
IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第4张图片

创建系统工具模块[jar包]

IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第5张图片
IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第6张图片
IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第7张图片

创建公共工具模块[jar包]

IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第8张图片

创建用户模块[jar包]

IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第9张图片

创建企业模块[jar包]

IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第10张图片

创建工单模块[jar包]

IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第11张图片

创建日志模块[jar包]

IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第12张图片

创建BFF服务模块[jar服务]

在线创建项目

IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第13张图片
IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第14张图片
IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第15张图片
IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第16张图片

  • 依赖配置
<dependencies>
	<!-- FIXME ====================================================================================== SpringBoot -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-configuration-processor</artifactId>
		<optional>true</optional>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<scope>runtime</scope>
		<optional>true</optional>
	</dependency>
	<!-- TODO ============================================================================================ MYSQL -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
	</dependency>
	<!-- TODO ============================================================================ Mybatis、Mybatis-Plus -->
	<dependency>
		<groupId>org.mybatis.spring.boot</groupId>
		<artifactId>mybatis-spring-boot-starter</artifactId>
	</dependency>
	<dependency>
		<groupId>com.baomidou</groupId>
		<artifactId>mybatis-plus-boot-starter</artifactId>
	</dependency>
	<!-- TODO ============================================================================================ Redis -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-redis</artifactId>
	</dependency>
	<!-- FIXME ======================================================================================== Redisson -->
	<dependency>
		<groupId>org.redisson</groupId>
		<artifactId>redisson-spring-boot-starter</artifactId>
	</dependency>
	<!-- TODO ========================================================================================= JetCache -->
	<dependency>
		<groupId>com.alicp.jetcache</groupId>
		<artifactId>jetcache-starter-redis-lettuce</artifactId>
	</dependency>
</dependencies>
  • maven编译配置
<build>
	<finalName>${project.artifactId}-${project.parent.version}</finalName>
	<resources>
		<!-- FIXME 用于替换resources里的变量 -->
		<resource>
			<directory>src/main/resources</directory>
			<filtering>true</filtering>
		</resource>
		<!-- FIXME 解决不编译java下的mybatis映射文件(.xml) -->
		<resource>
			<directory>src/main/java</directory>
			<includes>
				<include>**/*.xml</include>
			</includes>
			<filtering>false</filtering>
		</resource>
	</resources>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<version>2.6.7</version><!-- 必须与当前的SpringBoot主版本号保持一直 -->
			<configuration>
				<!-- 排除jar依赖 -->
				<excludes>
					<exclude>
						<groupId>org.projectlombok</groupId>
						<artifactId>lombok</artifactId>
					</exclude>
				</excludes>
				<!-- 开启热部署 -->
				<fork>true</fork>
				<addResources>true</addResources>
			</configuration>
		</plugin>
	</plugins>
</build>
  • 多开发环境配置
<profiles>
	<!-- 开发环境 -->
	<profile>
		<id>dev</id>
		<properties>
			<profiles.active>dev</profiles.active>
		</properties>
		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
	</profile>
	<!-- 测试环境 -->
	<profile>
		<id>test</id>
		<properties>
			<profiles.active>fat</profiles.active>
		</properties>
	</profile>
	<!-- 预发环境 -->
	<profile>
		<id>fat</id>
		<properties>
			<profiles.active>fat</profiles.active>
		</properties>
	</profile>
	<!-- 生产环境 -->
	<profile>
		<id>pro</id>
		<properties>
			<profiles.active>pro</profiles.active>
		</properties>
	</profile>
</profiles>
  • logback-spring.xml日志配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为INFO,则低于INFO的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true">
    <!-- 从配置文件中获取日志等级 -->
    <springProperty scope="context" name="logLevel" source="custom.log.level"/>
    <!-- 从配置文件中获取日志输出目录 -->
    <springProperty scope="context" name="logPath" source="custom.log.path"/>

    <!-- TODO 本地环境日志配置 -->
    <springProfile name="dev">
        <!-- 彩色日志 -->
        <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
        <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
        <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
        <!-- 彩色日志格式 -->
        <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
        <!-- 控制台日志输出 -->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>DEBUG</level>
            </filter>
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
        <!-- 日志输出级别 -->
        <root level="${logLevel}">
            <appender-ref ref="CONSOLE"/>
        </root>
    </springProfile>

    <!-- TODO 测试环境日志配置 -->
    <springProfile name="fat">
        <!-- INFO级别日志输出 -->
        <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${logPath}/info.log</file>
            <encoder>
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!-- 日志级别 -->
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 日志备份格式 -->
                <fileNamePattern>${logPath}/info-%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
                <!--日志文件保留天数-->
                <maxHistory>7</maxHistory>
                <!--日志文件最大的大小-->
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>50MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
        </appender>
        <!-- WARN级别日志输出 -->
        <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${logPath}/warn.log</file>
            <encoder>
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%n %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} %msg %n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!-- 日志级别 -->
                <level>WARN</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 日志备份格式 -->
                <fileNamePattern>${logPath}/warn-%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
                <!--日志文件最大的大小-->
                <maxHistory>7</maxHistory>
                <!--日志文件最大的大小-->
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>50MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
        </appender>
        <!-- ERROR级别日志输出 -->
        <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${logPath}/error.log</file>
            <encoder>
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%n %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} %msg %n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!-- 日志级别 -->
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 日志备份格式 -->
                <fileNamePattern>${logPath}/error-%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
                <!--日志文件最大的大小-->
                <maxHistory>7</maxHistory>
                <!--日志文件最大的大小-->
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>50MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
        </appender>
        <!-- 日志输出级别 -->
        <root level="${logLevel}">
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="WARN_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
        </root>
    </springProfile>

    <!-- TODO 生产环境日志配置 -->
    <springProfile name="pro">
        <!-- INFO级别日志输出 -->
        <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${logPath}/info.log</file>
            <encoder>
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!-- 日志级别 -->
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 日志备份格式 -->
                <fileNamePattern>${logPath}/info-%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
                <!--日志文件保留天数-->
                <maxHistory>7</maxHistory>
                <!--日志文件最大的大小-->
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>50MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
        </appender>
        <!-- WARN级别日志输出 -->
        <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${logPath}/warn.log</file>
            <encoder>
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%n %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} %msg %n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!-- 日志级别 -->
                <level>WARN</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 日志备份格式 -->
                <fileNamePattern>${logPath}/warn-%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
                <!--日志文件最大的大小-->
                <maxHistory>7</maxHistory>
                <!--日志文件最大的大小-->
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>50MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
        </appender>
        <!-- ERROR级别日志输出 -->
        <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${logPath}/error.log</file>
            <encoder>
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%n %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} %msg %n</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!-- 日志级别 -->
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 日志备份格式 -->
                <fileNamePattern>${logPath}/error-%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
                <!--日志文件最大的大小-->
                <maxHistory>7</maxHistory>
                <!--日志文件最大的大小-->
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>50MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
        </appender>
        <!-- 开启异步输出日志功能 -->
        <appender name ="ASYNC_INFO_FILE" class= "ch.qos.logback.classic.AsyncAppender">
            <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
            <discardingThreshold>0</discardingThreshold>
            <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
            <queueSize>512</queueSize>
            <!-- 添加附加的appender,最多只能添加一个 -->
            <appender-ref ref ="INFO_FILE"/>
        </appender>
        <appender name ="ASYNC_WARN_FILE" class= "ch.qos.logback.classic.AsyncAppender">
            <discardingThreshold>0</discardingThreshold>
            <queueSize>512</queueSize>
            <appender-ref ref ="WARN_FILE"/>
        </appender>
        <appender name ="ASYNC_ERROR_FILE" class= "ch.qos.logback.classic.AsyncAppender">
            <discardingThreshold>0</discardingThreshold>
            <queueSize>512</queueSize>
            <appender-ref ref ="ERROR_FILE"/>
        </appender>
        <!-- 日志输出级别 -->
        <root level="${logLevel}">
            <appender-ref ref="ASYNC_INFO_FILE"/>
            <appender-ref ref="ASYNC_WARN_FILE"/>
            <appender-ref ref="ASYNC_ERROR_FILE"/>
        </root>
    </springProfile>
</configuration>
  • mybatis-config.xml全局配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!--当select语句中返回ResultType时,对返回字段进行驼峰命名-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--全局性设置懒加载。如果设为'false',则所有相关联的都会被初始化加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--当设置为'true'时候,懒加载的对象可能被任何懒属性全部加载。否则每个属性都按需加载-->
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>
    <typeAliases>
        <typeAlias alias="String" type="java.lang.String"/>
        <typeAlias alias="Integer" type="java.lang.Integer"/>
        <typeAlias alias="Map" type="java.util.Map"/>
        <typeAlias alias="List" type="java.util.List"/>
    </typeAliases>
    <mappers>
        <!-- <mapper resource="snoob/gdd/mapper/impl/WxUserMapper.xml"/>-->
    </mappers>
</configuration>
  • 添加配置文件
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第17张图片
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第18张图片
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第19张图片
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第20张图片
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第21张图片
  • 配置mybatis
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第22张图片
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第23张图片
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第24张图片
  • 安装 mybatis-log-plugin 日志插件
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第25张图片
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第26张图片
  • 安装 mybatisx 快捷插件
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第27张图片
  • 设置热部署(本地开发环境)
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第28张图片
    IDEA2022 创建基于Maven的SpringBoot聚合单应用项目_第29张图片
    在这里插入图片描述

你可能感兴趣的:(IDEA,java,intellij-idea)