SpringBoot项目创建,详细流程

一、前言

Spring Boot是一个开源的Java框架,由Pivotal团队(现为VMware旗下)开发,通过提供默认配置和一系列启动器(starters)来简化项目配置,使得开发者能够快速启动和运行Spring应用程序。

image

本次通过IDEA快速创建一个Spring Boot项目,在操作之前,确保你的开发环境中已经安装了以下软件:

  1. Java Development Kit (JDK)
  2. Maven 或 Gradle(用于构建项目)
  3. 一个集成开发环境(IDE),比如 IntelliJ IDEA

二、创建SpringBoot项目

2.1 创建新项目

idea选择“File”—“New”—“Project”

image​​

当然你可以在https://start.spring.io/中初始化你项目工程

image

2.2 项目类型为SpringBoot

image

  • Group: 是公司或者组织的名称,是一种命名空间的概念,比如网站,那么group可以是tech.pdai(公司名,一般用公司网站倒序)(项目的分组信息,例如 “com.example”)
  • Artifat: 项目的名称,例如 “my-spring-cloud-project”

2.3 选择Springboot版本及初始化模块

spring Boot版本尽量选低

image

image

2.4 初始化

image

image

2.5 配置maven

在Spring Boot项目中,选择不使用默认的Maven配置而改为其他配置(例如使用阿里云仓库作为依赖源)通常是基于以下几个原因:

  1. 依赖速度

    • 默认的Maven中央仓库可能由于网络距离、带宽限制或高并发请求导致下载依赖包的速度较慢。
    • 使用国内的镜像源,如阿里云仓库,可以提供更快的下载速度和更稳定的连接,从而加快构建和部署过程。
  2. 网络稳定性

    • 在某些地区或网络环境下,默认的Maven中央仓库可能不够稳定,可能会出现连接超时或无法访问的情况。
    • 使用国内的镜像源可以提高网络连接的稳定性,减少构建过程中的不确定性。
  3. 依赖管理和版本控制

    • 某些组织可能需要对依赖进行更严格的管理,包括对版本的控制、依赖的审批和私有库的管理。
    • 使用国内的仓库或私有仓库可以让组织更好地控制依赖的来源和版本,确保项目的安全性和合规性。
  4. 安全性

    • 使用官方的Maven中央仓库可能存在一定的安全风险,如依赖包被篡改或者包含恶意代码。
    • 通过使用可信的镜像源或私有仓库,可以降低这种风险,确保依赖的安全性。
  5. 成本和维护

    • 对于大型项目或企业级应用,使用本地的仓库或镜像源可以减少对外部资源的依赖,降低成本,并简化维护工作。
  6. 插件和工具的支持

    • 某些特定的插件或工具可能不在Maven中央仓库中,或者需要通过特定的仓库来获取。
    • 配置自定义的Maven仓库可以确保这些插件和工具的可用性和一致性。

为了使用阿里云或其他镜像源,需要在项目的pom.xml​文件中进行配置,如下所示:

<project><!-- ... 其他配置 ... --><repositories><repository><id>alimaven</id><name>aliyun maven</name><url>https://maven.aliyun.com/nexus/content/groups/public/</url></repository></repositories><!-- ... 其他配置 ... -->
</project>

通过上述配置,Maven会优先从阿里云仓库下载依赖,从而提高构建速度和稳定性。同时,这也有助于提升开发和部署的效率。

image

修改配置后,重新reload项目

image

image

2.6 项目结构介绍

image

  • src/main/java 为项目的开发目录,业务代码在这里写。

  • src/main/resources 为配置文件目录,静态文件、模板文件和配置文件都放在这里。

    • 子目录 static 用于存放静态资源文件,比如说 JS、CSS 图片等。
    • 子目录 templates 用于存放模板文件,比如说 thymeleaf 和 freemarker 文件。
  • src/test/java 为测试类文件目录。

  • pom.xml 用来管理项目的依赖和构建。

1、.mvn 文件夹:这是 Maven Wrapper 的存放位置,用于在没有全局安装 Maven 的情况下运行 Maven 项目。

2、.gitignore 文件:用于指定应该被 Git 版本控制系统忽略的文件和目录。

3、HELP.md 文件:一个 Markdown 格式的文件,通常包含项目的帮助信息、说明和指南。

4、mvnw 文件:Maven Wrapper 的可执行脚本(Unix/Linux 系统),用于在项目中运行 Maven 命令。

5、mvnw.cmd 文件:Maven Wrapper 的可执行脚本(Windows 系统),用于在项目中运行 Maven 命令。

yygh_parent.iml 有的文件每个导入IDEA的项目都会生成一个项目同名的 .iml文件 用于保存你对这个项目的配置 (删了程序重新导入后还会生成 但由于配置丢失可能会造成程序异常)

2.7 删除多余文件及目录

image

删除后变成普通文件,需要配置为moudle

image

image

image

image-20240418230159762

image

image

2.8 启动项目

image

三、拓展-配置文件

3.1 application.properties的常用配置

application.properties​ 是 Spring Boot 中用于配置应用程序属性的文件,它位于 src/main/resources​ 目录下。在这个文件中,你可以设置各种应用程序的属性,包括数据库连接、端口号、日志级别、国际化配置等等。

以下是一些常见的 application.properties​ 配置示例:​​

设置端口号:

#多环境配置,测试,生产用不同的配置文件
spring.profiles.active=test#应用名称
spring.application.name=apply
#端口号
server.port=8888

应用程序上下文初始化器

应用指标。
spring.application.index= 
# 应用程序名称。
spring.application.name= 

多种开发环境配置

#开发/测试/生产环境分别对应dev/test/prod,可以自由定义,当前配置为开发环境
spring.profiles.active=dev不同环境中的配置信息可以写在其他文件中
application-test.properties 或者 application-prod.properties# 

配置端口和项目名访问

#指定springboot内嵌容器启动的端口,默认使用tomcat容器时在8080端口  
#server.port=8081
#配置项目访问路径
#server.servlet.context-path=/boot

http

#设定是否对object mapper也支持HATEOAS,默认为: true
spring.hateoas.apply-to-primary-object-mapper
#是否优先使用JSON mapper来转换.
spring.http.converters.preferred-json-mapper
#指定http请求和相应的Charset,默认: UTF-8
spring.http.encoding.charset
#是否开启http的编码支持,默认为true
spring.http.encoding.enabled
#是否强制对http请求和响应进行编码,默认为true
spring.http.encoding.force

tomcat的几个配置

server.tomcat.accept-count = 0 #当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。
server.tomcat.accesslog.buffered = true #是否缓冲输出以使其仅定期刷新。
server.tomcat.accesslog.directory = logs #创建日志文件的目录。可以是绝对的或相对于Tomcat基础目录。
server.tomcat.accesslog.enabled = false #启用访问日志。
server.tomcat.accesslog.file最新格式= .yyyy-MM-dd #要放在日志文件名中的日期格式。
server.tomcat.accesslog.pattern = common #访问日志的格式模式。
server.tomcat.accesslog.prefix = access_log #日志文件名前缀。
server.tomcat.accesslog.rename-on-rotate = false #是否延迟在文件名中包含日期戳,直到旋转时间。
server.tomcat.accesslog.request-attributes-enabled = false #设置用于请求的IP地址,主机名,协议和端口的请求属性。
server.tomcat.accesslog.rotate = true #是否启用访问日志轮换。
server.tomcat.accesslog.suffix = .log#日志文件名后缀。
server.tomcat.additional-tld-skip-patterns = #逗号分隔的其他模式列表,这些模式匹配要忽略的TLD扫描的jar。
server.tomcat.background-processor-delay = 30s #调用backgroundProcess方法之间的延迟。如果未指定持续时间后缀,则将使用秒。
server.tomcat.basedir = #Tomcat 基目录。如果未指定,则使用临时目录。
server.tomcat.internal-proxies = 10 \\。\\ d {1,3} \\。\\ d {1,3} \\。\\ d {1,3} | \\
。192 \\ 168 \\ d {1,3} \\ d {1,3} | \\
。169 \\ 254 \\ d {1,3} \\ d {1,3} | \\
。127 \\ d {1,3} \\ d {1,3} \\ d {1,3} | \\
172 \\ 1 [6-9] {1} \\ d {1,3} \\ d {1,3} |。。\\
172 \\ 2 [0-9] {1} \\ d {1,3} \\ d {1,3} |。。\\
172 \\。3 [0-1] {1} \\。\\ d {1,3} \\。\\ d {1,3} #正则表达式匹配可信IP地址。
server.tomcat.max-connections = 0 #服务器在任何给定时间接受和处理的最大连接数。
server.tomcat.max-http-header-size = 0HTTP消息头的最大大小(以字节为单位)。
server.tomcat.max-http-post-size = 0 #HTTP 帖子内容的最大大小(以字节为单位)。
server.tomcat.max-threads = 0 #最大工作线程数。
server.tomcat.min-spare-threads = 0 #最小工作线程数。
server.tomcat.port-header = X-Forwarded-Port#用于覆盖原始端口值的HTTP头的名称。
server.tomcat.protocol-header = #包含传入协议的标头,通常命名为“X-Forwarded-Proto”。
server.tomcat.protocol-header-https-value = https #协议标头的值,指示传入请求是否使用SSL。
server.tomcat.redirect-context-root = #是否应通过在路径中附加/来重定向对上下文根的请求。
server.tomcat.remote-ip-header = #从中提取远程IPHTTP头的名称。例如,`X-FORWARDED-FOR`。
server.tomcat.resource.cache-ttl = #静态资源缓存的生存时间。
server.tomcat.uri-encoding = UTF-8 #用于解码URI的字符编码。
server.tomcat.use-relative-redirects = #通过调用sendRedirect生成的HTTP 1.1和更高版本的位置标头是使用相对还是绝对重定向。

数据库连接配置

#描述数据源
spring.datasource.url=jdbc:mysql://localhost:3306/tanglong?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=0000
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource

Mybatis

#指定mybatis配置文件路径
mybatis.mapper-locations=classpath:mapping/*.xml
#别名实体包,多个逗号隔开,typeAliasesPackage 属性的作用:https://www.cnblogs.com/appium/p/11633971.html
mybatis.type-aliases-package=com.how2java.springboot.pojo
#打印myBatis的sql语句 com.demo.mapper 为包名
logging.level.com.demo.mapper=debug
#是否打印sql语句
#spring.jpa.show-sql= true
#开启驼峰映射
mybatis.configuration.map-underscore-to-camel-case: true
#sql输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#如何将sql输出都日志中???

redis配置

#Redis数据库索引(默认为0)
spring.redis.database=0
#Redis服务器地址
spring.redis.host=127.0.0.1
#Redis服务器连接端口
spring.redis.port=6379
#Redis服务器连接密码(默认为空)
spring.redis.password=
#连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=10
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.pool.max-idle=8
#连接池中的最小空闲连接
spring.redis.pool.min-idle=0
#连接超时时间(毫秒)
spring.redis.timeout=0

文件上传multipart

#是否开启文件上传支持,默认为true
multipart.enabled=true
#设定文件写入磁盘的阈值,单位为MBKB,默认为0
multipart.file-size-threshold=0
#指定文件上传路径.
multipart.location
#指定文件大小最大值,默认1MB
multipart.max-file-size
#指定每次请求的最大值,默认为10MB
multipart.max-request-size

3.2 application.yml的常用配置

application.yml​ 是 Spring Boot 中另一种常用的配置文件格式,它使用 YAML(YAML Ain’t Markup Language)语法,相比于 .properties​ 格式更加清晰和易读。

src/main/resources​ 目录下创建 application.yml​ 文件,并在其中定义应用程序的配置信息。与 application.properties​ 相同,application.yml​ 也用于配置各种应用程序属性,包括数据库连接、端口号、日志级别、国际化配置等等。

以下是一些常见的 application.yml​ 配置示例:

  1. 设置端口号:
server:port: 8080
  1. 设置数据库连接:
spring:datasource:url: jdbc:mysql://localhost:3306/mydatabaseusername: usernamepassword: passworddriver-class-name: com.mysql.jdbc.Driver
  1. 设置日志级别:
logging:level:root: INFOorg.springframework: DEBUGcom.example: TRACE
  1. 设置国际化:
spring:messages:basename: messagesmvc:locale: zh_CN

.properties​ 格式相比,.yml​ 格式更加简洁清晰,层级结构更加明显,对于复杂的配置,使用 .yml​ 格式可能更加方便。但是请注意,YAML 对缩进和空格的要求比较严格,需要保持一致性,否则会导致解析错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8s 部署 elasticsearch-7.14.0 集群 及 kibana 客户端

一、K8s 部署 elasticsearch-7.14.0 集群 安装规划 组件replicas类型es3StatefulSetkibana1Deployment 使用 k8s 版本为&#xff1a;v1.18.0 。 本次使用 OpenEBS 来作为存储引擎&#xff0c;OpenEBS 是一个开源的、可扩展的存储平台&#xff0c;它提供了一种简单的方式来创…

国内首款千亿参数MoE模型APUS-xDAN-4.0:性能逼近GPT-4,可在4090显卡上运行

前言 随着人工智能技术的快速发展&#xff0c;模型参数的数量已成为衡量其复杂性和处理能力的重要指标。近日&#xff0c;国内科技企业APUS与AI创企新旦智能联合宣布&#xff0c;成功开源了国内首个千亿参数的混合专家模型&#xff08;MoE&#xff09;&#xff0c;APUS-xDAN-4…

锁策略和死锁问题

锁策略 乐观锁 vs 悲观锁重量级锁 vs 轻量级锁自旋锁 vs 挂起等待锁读写锁 vs 互斥锁公平锁 vs 非公平锁可重入锁 vs 不可重入锁死锁死锁产生的必要条件如何简单的解决死锁问题 小结 这里不是描述的某个特定锁,而是描述的锁的特性,描述的是"一类锁". 乐观锁 vs 悲观…

Java配置环境变量的过程

第一步&#xff1a;先找到你下载java的文件夹。 第二步&#xff1a;点击它进入看到新的文件夹继续点击。 第三步&#xff1a;点击bin文件。 第四步&#xff1a;点进去bin文件之后复制上述文件的地址。 第五步&#xff1a;回到你的电脑位置右键鼠标点击空白位置出现属性点进去 第…

设计模式胡咧咧之策略工厂实现导入导出

策略模式&#xff08;Strategy Pattern&#xff09; 定义&#xff1a; 定义了一组算法&#xff0c;将每个算法都封装起来&#xff0c;并且使它们之间可以互换。 本质: 分离算法&#xff0c;选择实现 应用场景 何时使用 一个系统有许多类&#xff0c;而区分他们的只是他们直接…

复合机器人在磁钢上下料中的应用及其优势分析

复合机器人是一种集成了移动机器人和工业机器人功能的设备&#xff0c;其独特之处在于拥有“手、脚、眼、脑”的综合能力&#xff0c;从而实现了更高的灵活性和操作效率。在磁钢上下料的应用场景中&#xff0c;复合机器人能够发挥显著的优势。 首先&#xff0c;复合机器人可以根…

Photomator 3.3.5 (macOS Universal) - 照片编辑软件

Photomator 3.3.5 (macOS Universal) - 照片编辑软件 适用于 Mac、iPhone 和 iPad 的终极照片编辑器 请访问原文链接&#xff1a;https://sysin.org/blog/photomator/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Photomat…

计算机网络 -- 网络编程基础

一 学习准备 1.1 IP地址 在 前文中我们提到过: IP 是全球网络的基础&#xff0c;使用 IP 地址来标识公网环境下主机的唯一性&#xff0c;我们可以根据 目的IP地址 进行跨路由器的远端通信。 但是我们也提到了&#xff0c;通过 IP 地址&#xff0c;只能寻找到目标主机&#xff…

视频质量度量VQM算法详细介绍

视频质量评价 视频质量评价(Video Quality Assessment,VQA)是指通过主观、客观的方式对视频图像的内容、画质等,进行感知、衡量与评价。 ITU definations subjective assessment: the determination of the quality or impairment of programme-like pictures presented…

【代码随想录】【动态规划】day48:打家劫舍

打家劫舍1 def rob(self, nums):""":type nums: List[int]:rtype: int"""# 分为两个情况&#xff0c;偷还是不偷&#xff0c;# dp[i]为考虑到第i个房间时的最大值if len(nums) 0: # 如果没有房屋&#xff0c;返回0return 0if len(nums) 1: #…

【 书生·浦语大模型实战营】作业(五):LMDeploy 量化部署

【 书生浦语大模型实战营】作业&#xff08;五&#xff09;&#xff1a;LMDeploy 量化部署 &#x1f389;AI学习星球推荐&#xff1a; GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系…

Linux debian gdb dump

1.开发背景 记录 debian 下应用程序崩溃调试方法 2.开发需求 程序越界可以定位到越界的位置附近 3.开发环境 debian 操作系统&#xff0c;如果不支持需要查看是否存在对应的可执行文件 4.实现步骤 4.1 设置 dump 输出大小 ulimit -c unlimited # 设置输出大小 生成core 文…

【QT+OpenCV】车牌号检测 学习记录 遇到的问题

【QTOpenCV】车牌号检测 学习记录 首先在QT里面配置好OpenCV .pro文件中加入&#xff1a; INCLUDEPATH G:/opencv/build/include LIBS -L"G:/opencv/build/x64/vc14/lib"\-lopencv_core \-lopencv_imgproc \-lopencv_highgui \-lopencv_ml \-lopencv_video \-lo.c…

Linux下SPI设备驱动实验:使用内核提供的读写SPI设备中的数据的函数

一. 简介 前面文章的学习&#xff0c;已经实现了 读写SPI设备中数据的功能。文章如下&#xff1a; Linux下SPI设备驱动实验&#xff1a;验证读写SPI设备中数据的函数功能-CSDN博客 本文来使用内核提供的读写SPI设备中的数据的API函数&#xff0c;来实现读写SPI设备中数据。 …

HTML5+JavaScript实现本地视频/音频播放器

HTML5JavaScript实现本地视频/音频播放器 HTML5 提供了本地视频和音频播放器的支持&#xff0c;通过 <video> 和 <audio> 标签&#xff0c;这些标签支持多种媒体格式&#xff0c;并且可以通过 JavaScript 进行控制&#xff0c;实现功能比较完整的本地视频音频播放器…

MySQL 8.0 新特性之 Clone Plugin

个人感觉&#xff0c;主要还是为 Group Replication 服务。在 Group Replication 中&#xff0c;如果要添加一个新的节点&#xff0c;这个节点差异数据的补齐是通过分布式恢复&#xff08; Distributed Recovery &#xff09;来实现的。 在 MySQL 8.0.17 之前&#xff0c;只支…

【数据结构】队列(链表模拟队列)

学习本章节必须具备 单链表的前置知识&#xff0c; 建议提前学习&#xff1a;点击链接学习&#xff1a;单链表各种功能函数 细节 详解 本章节是学习用 单链表模拟队列 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff…

javase基础汇总学习

目录 背景步骤宏观微观理论基础用法面向对象数据类型基础语法&#xff08;关于方法&#xff09;try&#xff08;正常的逻辑代码&#xff09;catch&#xff08;这个和异常有关系&#xff09;finally&#xff08;经典面试题&#xff09; 高阶使用序列化泛型注解反射 总结 背景 后…

大型网站系统架构演化实例_3.使用服务集群改善网站并发处理能力

1.使用服务集群改善网站并发处理能力 使用集群是网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时&#xff0c;不要企图去更换更强大的服务器&#xff0c;对大型网站而言&#xff0c;不管多么强大的服务器&#xff0c;对大型网站而言&…

Jenkins 的构建时执行时间问题

我们希望我的项目能够在特定的时间自动执行&#xff0c;我们需要设定一个定时任务。 Jenkins 的定时任务是通过 Cron 任务来实现的&#xff0c;但是由有点不一样。 H/2 * * * * 比如说上面的设置就是每 2 分钟执行一次。 希望每分钟执行一次 Jenkins 的每分钟执行一次的设置…