一、前言
Spring Boot是一个开源的Java框架,由Pivotal团队(现为VMware旗下)开发,通过提供默认配置和一系列启动器(starters)来简化项目配置,使得开发者能够快速启动和运行Spring应用程序。
本次通过IDEA快速创建一个Spring Boot项目,在操作之前,确保你的开发环境中已经安装了以下软件:
- Java Development Kit (JDK)
- Maven 或 Gradle(用于构建项目)
- 一个集成开发环境(IDE),比如 IntelliJ IDEA
二、创建SpringBoot项目
2.1 创建新项目
idea选择"File"---"New"---"Project"
当然你可以在start.spring.io/中初始化你项目工程
2.2 项目类型为SpringBoot
- Group: 是公司或者组织的名称,是一种命名空间的概念,比如网站,那么group可以是tech.pdai(公司名,一般用公司网站倒序)(项目的分组信息,例如 "com.example")
- Artifat: 项目的名称,例如 "my-spring-cloud-project"
2.3 选择Springboot版本及初始化模块
spring Boot版本尽量选低
2.4 初始化
2.5 配置maven
在Spring Boot项目中,选择不使用默认的Maven配置而改为其他配置(例如使用阿里云仓库作为依赖源)通常是基于以下几个原因:
-
依赖速度:
- 默认的Maven中央仓库可能由于网络距离、带宽限制或高并发请求导致下载依赖包的速度较慢。
- 使用国内的镜像源,如阿里云仓库,可以提供更快的下载速度和更稳定的连接,从而加快构建和部署过程。
-
网络稳定性:
- 在某些地区或网络环境下,默认的Maven中央仓库可能不够稳定,可能会出现连接超时或无法访问的情况。
- 使用国内的镜像源可以提高网络连接的稳定性,减少构建过程中的不确定性。
-
依赖管理和版本控制:
- 某些组织可能需要对依赖进行更严格的管理,包括对版本的控制、依赖的审批和私有库的管理。
- 使用国内的仓库或私有仓库可以让组织更好地控制依赖的来源和版本,确保项目的安全性和合规性。
-
安全性:
- 使用官方的Maven中央仓库可能存在一定的安全风险,如依赖包被篡改或者包含恶意代码。
- 通过使用可信的镜像源或私有仓库,可以降低这种风险,确保依赖的安全性。
-
成本和维护:
- 对于大型项目或企业级应用,使用本地的仓库或镜像源可以减少对外部资源的依赖,降低成本,并简化维护工作。
-
插件和工具的支持:
- 某些特定的插件或工具可能不在Maven中央仓库中,或者需要通过特定的仓库来获取。
- 配置自定义的Maven仓库可以确保这些插件和工具的可用性和一致性。
为了使用阿里云或其他镜像源,需要在项目的pom.xml
文件中进行配置,如下所示:
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会优先从阿里云仓库下载依赖,从而提高构建速度和稳定性。同时,这也有助于提升开发和部署的效率。
修改配置后,重新reload项目
2.6 项目结构介绍
-
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 删除多余文件及目录
删除后变成普通文件,需要配置为moudle
2.8 启动项目
三、拓展-配置文件
3.1 application.properties的常用配置
application.properties
是 Spring Boot 中用于配置应用程序属性的文件,它位于 src/main/resources
目录下。在这个文件中,你可以设置各种应用程序的属性,包括数据库连接、端口号、日志级别、国际化配置等等。
以下是一些常见的 application.properties
配置示例:
设置端口号:
ini
#多环境配置,测试,生产用不同的配置文件
spring.profiles.active=test
#应用名称
spring.application.name=apply
#端口号
server.port=8888
应用程序上下文初始化器
bash
应用指标。
spring.application.index=
# 应用程序名称。
spring.application.name=
多种开发环境配置
ini
#开发/测试/生产环境分别对应dev/test/prod,可以自由定义,当前配置为开发环境
spring.profiles.active=dev
不同环境中的配置信息可以写在其他文件中
application-test.properties 或者 application-prod.properties#
配置端口和项目名访问
shell
#指定springboot内嵌容器启动的端口,默认使用tomcat容器时在8080端口
#server.port=8081
#配置项目访问路径
#server.servlet.context-path=/boot
http
shell
#设定是否对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的几个配置
ini
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 = 0 #HTTP消息头的最大大小(以字节为单位)。
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 = #从中提取远程IP的HTTP头的名称。例如,`X-FORWARDED-FOR`。
server.tomcat.resource.cache-ttl = #静态资源缓存的生存时间。
server.tomcat.uri-encoding = UTF-8 #用于解码URI的字符编码。
server.tomcat.use-relative-redirects = #通过调用sendRedirect生成的HTTP 1.1和更高版本的位置标头是使用相对还是绝对重定向。
数据库连接配置
ini
#描述数据源
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
ini
#指定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配置
ini
#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
ini
#是否开启文件上传支持,默认为true
multipart.enabled=true
#设定文件写入磁盘的阈值,单位为MB或KB,默认为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
配置示例:
- 设置端口号:
yaml
server:
port: 8080
- 设置数据库连接:
yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydatabase
username: username
password: password
driver-class-name: com.mysql.jdbc.Driver
- 设置日志级别:
yaml
logging:
level:
root: INFO
org.springframework: DEBUG
com.example: TRACE
- 设置国际化:
yaml
spring:
messages:
basename: messages
mvc:
locale: zh_CN
与 .properties
格式相比,.yml
格式更加简洁清晰,层级结构更加明显,对于复杂的配置,使用 .yml
格式可能更加方便。但是请注意,YAML 对缩进和空格的要求比较严格,需要保持一致性,否则会导致解析错误。