SpringBoot项目搭建指南
SpringBoot项目搭建指南
文章目录
- SpringBoot项目搭建指南
- 一、SpringBoot项目搭建
- 1.1 SpringBoot 版本选择
- 1.2 SpringBoot 框架引入方式
- 1.2.1 继承 Starter Parent POM
- 1.2.2 不使用 Parent POM 来使用 Spring Boot
- 1.3 SpringBoot 打包插件
- 二、日志框架引入
- 2.1 引入SpringBoot管理的Slf4j+Log4j2
- 2.2 log4j2.xml
- 2.3 application.properties
- 三、数据库相关框架引入
- 3.1 数据库驱动
- 3.2 数据源
- 3.3 MyBatis
- 3.4 数据库相关配置
- 四、其他解决方案
- 4.1 springboot多数据源
github: https://github.com/chen-jiacheng/data-access-samples
一、SpringBoot项目搭建
1.1 SpringBoot 版本选择
Spring Boot 2.7.18 需要Java 8,并且兼容 Java 21(包括 Java 21)。 还需要Spring Framework 5.3.31或更高版本。
Spring Boot 3.5.0 至少需要Java 17,并且兼容 Java 24 及以上版本。 还需要Spring Framework 6.2.7或更高版本。
https://docs.spring.io/spring-boot/docs/2.7.18/reference/htmlsingle/#getting-started
1.2 SpringBoot 框架引入方式
https://docs.spring.io/spring-boot/docs/2.7.18/maven-plugin/reference/htmlsingle/
1.2.1 继承 Starter Parent POM
<!-- Inherit defaults from Spring Boot -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version>
</parent>
1.2.2 不使用 Parent POM 来使用 Spring Boot
<dependencyManagement><dependencies><dependency><!-- Import dependency management from Spring Boot --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.18</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><build><pluginManagement><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.7.18</version></plugin></plugins></pluginManagement></build>
1.3 SpringBoot 打包插件
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
二、日志框架引入
https://docs.spring.io/spring-boot/docs/2.7.18/reference/htmlsingle/#spring-boot-starter-logging
2.1 引入SpringBoot管理的Slf4j+Log4j2
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
2.2 log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="TRACE" monitorInterval="30"><Properties><Property name="PROJECT_NAME">spring-boot-samples</Property><Property name="LOG_PATH">./data/logs</Property><Property name="pattern">[%d{yyyy-MM-dd HH:mm:ss,SSS}] [%c{1.}::%M] [%t] [%p]: %m%n</Property></Properties><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="${pattern}"/></Console><RollingFile name="RollingFile" fileName="${LOG_PATH}/${PROJECT_NAME}.log"filePattern="${LOG_PATH}/${PROJECT_NAME}-%d{yyyy-MM-dd}-%i.log"><PatternLayout pattern="${pattern}"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><DefaultRolloverStrategy max="10"><Delete basePath="${LOG_PATH}" maxDepth="10"><IfLastModified age="30d"/></Delete></DefaultRolloverStrategy></RollingFile></Appenders><Loggers><Root level="info"><appender-ref ref="Console"/><appender-ref ref="RollingFile"/></Root></Loggers>
</Configuration>
2.3 application.properties
logging.config=classpath:log4j2.xml
三、数据库相关框架引入
3.1 数据库驱动
使用SpringBoot管理的就行
<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId>
</dependency>
3.2 数据源
前置条件: JDK8
Druid Spring Boot Starter 用于帮助你在Spring Boot项目中轻松集成Druid数据库连接池和监控。 druid-spring-boot-starter 适用于Spring boot 2。 如果Spring boot版本 >= 3.0.0请使用 druid-spring-boot-3-starter。
https://github.com/alibaba/druid
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId>
</dependency>
3.3 MyBatis
前置条件: JDK8
master : MyBatis 3.5, MyBatis-Spring 3.0, Java 17+ and Spring Boot 3.0-3.4
2.3.x : MyBatis 3.5, MyBatis-Spring 2.1, Java 8+ and Spring Boot 2.7
https://github.com/mybatis/spring-boot-starter
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency>
mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.chenjiacheng.data.access.samples.dao.mapper.SampleUserMapper"><select id="findAllUsers" resultMap="sampleUserResultMap"></select><insert id="insertUser" parameterType="com.chenjiacheng.data.access.samples.dao.model.SampleUser"></insert><delete id="deleteUser" parameterType="long"></delete><update id="updateUser" parameterType="com.chenjiacheng.data.access.samples.dao.model.SampleUser"></update>
</mapper>
3.4 数据库相关配置
## jdbc
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/data_access_samples_db
spring.datasource.username=root
spring.datasource.password=Yqywf,Rmhpy.1@
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource## driver
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver## druid
spring.datasource.druid.validationQuery="select 1 from dual"
spring.datasource.druid.initialSize=10
spring.datasource.druid.maxActive=10
spring.datasource.druid.minIdle=10
spring.datasource.druid.maxWait=500
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.timeBetweenEvictionRunsMillis=15000
spring.datasource.druid.minEvictableIdleTimeMillis=30000
spring.datasource.druid.keepAlive=true# mybatis
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.use-generated-keys=true
mybatis.mapper-locations=classpath*:mapper/*.xml
mybatis.type-aliases-package=com.chenjiacheng.webapp.plus.dao.model
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
四、其他解决方案
4.1 springboot多数据源
https://cloud.tencent.com.cn/developer/article/2416429?from=15425
相关文章:
SpringBoot项目搭建指南
SpringBoot项目搭建指南 文章目录 SpringBoot项目搭建指南一、SpringBoot项目搭建1.1 SpringBoot 版本选择1.2 SpringBoot 框架引入方式1.2.1 继承 Starter Parent POM1.2.2 不使用 Parent POM 来使用 Spring Boot 1.3 SpringBoot 打包插件 二、日志框架引入2.1 引入SpringBoot…...
分布式锁剖析
一、分布式锁 1. 为什么需要分布式锁? 在单体应用中,通过synchronized或ReentrantLock等进程内锁即可解决多线程资源竞争问题。但在分布式系统中,多个服务实例运行在不同进程中,传统进程内锁失效,此时需要一种跨进程…...
C语言中函数指针和指针函数的定义及用法
在C/C中,函数指针和指针函数是两个容易混淆但完全不同的概念。以下是它们的详细对比和学习指南,结合代码示例帮助你彻底掌握。 1. 函数指针(Function Pointer) 本质:一个指向函数的指针变量,用于动态调用…...
Spring Boot DevTools 热部署
在Spring Boot项目中加入 spring-boot-devtools 热部署依赖启动器后,通常不需要手动重启项目即可让更改生效。spring-boot-devtools 的核心特性之一就是自动重启或热加载。 Spring Boot DevTools 热部署关键知识点 🔥 目的:spring-boot-devt…...
unix/linux source 命令,其基本属性、语法、操作、api
现在像解剖精密仪器一样,来细致地审视 source (或 .) 命令的各个方面:它的属性、语法、操作方式,以及可以称之为“API”的交互接口。这种细致的分析有助于我们精确地理解和使用它。 让我们深入细节: 一、基本属性 (Core Attributes) 命令类型 (Command Type): Shell 内置…...

FPGA仿真中阻塞赋值(=)和非阻塞赋值(<=)区别
FPGA仿真中阻塞赋值和非阻塞赋值的区别 单独仿真小模块对但将小模块加入整个工程仿真不对就有可能是没有注意到仿真中阻塞赋值和非阻塞赋值的区别 目录 前言 一、简介 二、设计实例 三、仿真实例 1、仿真用非阻塞赋值 2、仿真用阻塞赋值 总结 前言 网上很多人介绍verilo…...

LabVIEW轴角编码器自动检测
LabVIEW 开发轴角编码器自动检测系统,针对指控系统中高故障率的轴角编码器性能检测需求,通过模块化硬件架构与软件设计,实现编码器运转状态模拟、扭矩 / 转速实时监测、19 位并行编码采集译码、数据自动分析及报告生成等功能,解决…...

MySQL数据库从0到1
目录 数据库概述 基本命令 查询命令 函数 表的操作 增删改数据和表结构 约束 事务 索引 视图 触发器 存储过程和函数 三范式 数据库概述 SQL语句的分类: DQL:查询语句,凡是select语句都是DQL。 DML:insert,delete,up…...

WiFi万能钥匙鲲鹏服务器部署 TiDB 集群实战指南
作者: TiDBer_yangxi 原文来源: https://tidb.net/blog/15a234d0 一、环境准备 1. 硬件要求 服务器架构 :鲲鹏服务器(ARM架构),TiDB 官方明确支持 ARM 架构服务器部署 推荐配置 (生产环…...
正则表达式的前世今生
当你熟练地用正则表达式查找替换代码时,这个工具的历史可以追溯到1943年。那时候还没有计算机,更别说编程语言了。 从神经网络到文本匹配 故事要从两个神经生理学家说起。1943年,Warren McCulloch和Walter Pitts发表了一篇论文《A logical ca…...

Vue 核心技术与实战智慧商城项目Day08-10
温馨提示:这个黑马的视频在b占可以找到,里面有完整的教学过程 然后这个项目有完整的代码,我已经上传了,如果审核成功大家就可以看了,但是需要审核多久我也不是很确定 1.项目演示 2. 项目收获 3. 创建项目 4. 调整初始化…...

TCP/IP协议精华总结pdf分享
hi ,大家好,应小伙伴们的要求,上次分享了个人的一些学习和职场经验,其中网络协议PDF文档是我之前学习协议的时候总结一些精华知识,网络属于基本功,是互联网必备知识,我深信掌握好核心20%知识&am…...
组件化:软件工程化的基础
在现代软件系统中,**组件化(Componentization)**不仅是一种设计技术,更是推动软件工程走向工业化、体系化的关键基础。随着业务复杂度、团队规模与生命周期成本的持续上升,软件开发从“写代码”演变为“构建系统”。而…...

⚡️ Linux grep 命令参数详解
⚡️ Linux grep 用法及参数详解 📘 1. grep 简介 grep 是 Linux/Unix 系统中用于文本搜索的命令,其全称为 Global Regular Expression Print,意为全局正则表达式打印器。 它根据给定的 模式(pattern) 对文件或标准…...

2025年第三届CCF·夜莺开源创新论坛通知
点击蓝字 关注我们 CCF Opensource Development Committee 01 大会简介 由中国计算机学会主办、CCF开源发展委员会及夜莺开源社区承办的第三届CCF夜莺开源创新论坛拟于2025年7月4日在北京召开。本次论坛以“AI 加速可观测”为主题,汇聚了开源夜莺核心开发团队&#…...

GMDCMonitor企业版功能分享0602
企业版包含了拓扑中心、签退中心、知识库、通知渠道配置、平台自定义,这5个功能 1)拓扑中心 拓扑中心绘制的时候需要注意2点: 1)要先选择 “矩形区域” 或 “圆形区域” 来添加各个背景区域,同时录入区域尺寸&#x…...
automa
网页版插件 https://extension.automa.site/(可能插件下架了) https://github.com/AutomaApp/automa/releases/tag/v1.29.9(可以直接在git上下载) automa官网地址: https://www.automa.site/ 官方的文档 https://docs.automa.si…...

Warm-Flow发布1.7.3 端午节(设计器流和流程图大升级)
Warm-Flow发布1.7.3 端午节(设计器流和流程图大升级) 更新内容项目介绍功能思维导图演示地址官网Warm-Flow视频 更新内容 [feat] 新版流程图通过前端渲染[perf] 美化流程设计器ui[feat] 办理人权限处理器,新增办理人转换接口,比如…...

【存储基础】SAN存储基础知识
文章目录 1. 什么是SAN存储?2. SAN存储组网架构3. SAN存储的主要协议SCSI光纤通道(FC)协议iSCSIFCoENVMe-oFIB 4. SAN存储的关键技术Thin Provision:LUN空间按需分配Tier:分级存储Cache:缓存机制QoS&#x…...

2025年ESWA SCI1区TOP,改进成吉思汗鲨鱼算法MGKSO+肝癌疾病预测,深度解析+性能实测
1.摘要 本文针对肝癌(HCC)早期诊断难题,提出了一种基于改进成吉思汗鲨鱼优化算法(MGKSO)的计算机辅助诊断系统。由于HCC在早期症状不明显且涉及高维复杂数据,传统机器学习方法易受噪声和冗余特征干扰。为提…...
精益数据分析(93/126):增长率的真相——从数据基准到科学增长策略
精益数据分析(93/126):增长率的真相——从数据基准到科学增长策略 在创业领域,增长率常被视为企业成功的核心指标,但多少才算“足够好”?如何避免陷入“盲目增长陷阱”?今天,我们将…...
MAC上怎么进入隐藏目录
在Mac上,由于系统保护的原因,一些系统目录如/usr默认是隐藏的,但可以通过以下方法进入: 方法一:使用Finder的“前往文件夹”功能 打开Finder。使用快捷键Command Shift G,或者在菜单栏中选择“前往”-“…...

Spark-TTS: AI语音合成的“变声大师“
嘿,各位AI爱好者!还记得那些机器人般毫无感情的合成语音吗?或者那些只能完全模仿但无法创造的语音克隆?今天我要介绍的Spark-TTS模型,可能会让这些问题成为历史。想象一下,你可以让AI不仅说出任何文字&…...
【Python 进阶3】常见的 call 和 forward 区别
在 Python 和深度学习框架(如 PyTorch)中,__call__ 和 forward 是两个不同的概念,它们的用途和实现方式有明显区别: 1. __call__ 方法(Python 内置特殊方法) 在 Python 中,__call_…...

WEB3——简易NFT铸造平台之nft.storage
该平台目前已经不太支持免费试用,现在推荐Pinata平台,免费用1GB Pinata | Cryptos file storage 下面web3.storage也可以用,但是需要你有可以交易的外币卡 w3up console 🧠 1. nft.storage 是什么? https://nft.stor…...

一元函数积分
1. 不同名函数积分 2.三角函数有理式...

6年“豹变”,vivo S30系列引领手机进入场景“体验定义”时代
出品 | 何玺 排版 | 叶媛 5月29日晚,备受用户期待的vivo S30系列如约而至。 相比前几代S系列产品,S30系列变化显著,堪称“豹变”。首先,其产品打造思路发生了质变,产品体验更好,综合竞争力更为强。其次&a…...
Pytorch的梯度控制
在之前的实验中遇到一些问题,因为之前计算资源有限,我就想着微调其中一部分参数做,于是我误打误撞使用了with torch.no_grad,可是发现梯度传递不了,于是写下此文来记录梯度控制的两个方法与区别。 在PyTorch中&#x…...

linux驱动开发(1)-内核模块
内核模块 模块最大的好处是可以动态扩展应用程序的功能而无须重新编译链接生成新的应用程序镜像,在微软的Windows系统上动态链接库DLL(Dynamic Link Library),Linux系统上的共享库so(shared object)文件的…...

AI产品风向标:从「工具属性」到「认知引擎」的架构跃迁
近年来,人工智能正在改变法律行业的游戏规则。从最初的“工具属性”——帮律师干些重复的杂活儿,到如今逐渐变身为“认知引擎”——能够理解法律逻辑、分析案例,法律AI产品正在迎来一场华丽的转身。这篇文章将带你一探究竟,看看这…...