基于spring boot的整体使用介绍,文档将持续和spring boot发布版本同步更新
spring framework 学习参考 https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/
Spring Boot 2.2.0RELEASE
Build Tool | Version |
---|---|
Maven |
3.3+ |
Gradle |
5.x (4.10 is also supported but in a deprecated form) |
Name | Servlet Version |
---|---|
Tomcat 9.0 |
4.0 |
Jetty 9.4 |
3.1 |
Undertow 2.0 |
4.0 |
Spring Boot支持以下嵌入式servlet容器
RSocket是一种用于反应式应用程序的新的网络协议。RSocket是在华盛顿特区举行的SpringOne平台会议上宣布的,是一种新的第7层语言无关的应用网络协议。它是一种基于Reactive Streams背压的双向,多路复用,基于消息的二进制协议。它由Facebook,Netifi和Pivotal等工程师开发,提供Java,JavaScript,C ++和Kotlin等实现。
该协议专门设计用于与Reactive风格应用配合使用,这些应用程序基本上是非阻塞的,并且通常(但不总是)与异步行为配对。使所谓Reactive背压: 即发布者无法向订户发送数据直到该订户已经准备就绪的想法,这是与“异步”的关键区别。
反应式编程(响应式reactive)是Java中高效应用的下一个前沿。但有两个主要障碍 - 数据访问和网络。RSocket旨在解决后一个问题,而R2DBC旨在解决前者问题。
在微服务式应用程序中,HTTP是被广泛用作通信协议。,但HTTP针对的是一个与移动世界截然不同的世界而设计的。
我们有iPhone和Android手机,我们收听通知,所以我们不一定要求一些请求立即得到回复,我们在运动时使用智能手表,它与后端服务器交互,为我们提供统计数据; 我们让Smart助手与后端服务器进行交互。所有这些互动模型都是我们称之为互联体验的一部分。HTTP并不是真的为此设计的。
HTTP的一个重要问题是,它强迫客户端负担起所有责任来处理不同类型的错误上,包括重试逻辑,超时,断路器等。使用Reactive架构构建的应用程序可以提高效率并扩展。
RSocket与HTTP的不同之处在于它定义了四种交互模型:
Fire-and-Forget:优化请求/响应,在不需要响应时非常有用,例如非关键事件日志记录。
请求/响应:当您发送一个请求并收到一个响应时,就像HTTP一样。即使在这里,该协议也具有优于HTTP的优点,因为它是异步和多路复用的。
请求/流:类似于返回集合的请求/响应,集合被回送而不是查询直到完成,因此例如发送银行帐号,用实时的帐户事务流进行响应。
如果要从早期版本的Spring Boot升级,请查看 项目Wiki上的“迁移指南”, 其中提供了详细的升级说明。另请查看 “发行说明”,了解每个版本的“新的和值得注意的”功能列表。
升级到新功能版本时,某些属性可能已重命名或删除。Spring Boot提供了一种在启动时分析应用程序环境和打印诊断的方法,还可以在运行时临时迁移属性。要启用该功能,请将以下依赖项添加到项目中:
org.springframework.boot
spring-boot-properties-migrator
runtime
添加到环境后期的属性(例如使用时 @PropertySource
)将不会被考虑在内。
完成迁移后,请确保从项目的依赖项中删除此模块。
这里使用idea,创建一个spring boot 项目
下一步创建一个名叫test的项目
下一步选择jar包
developer tools 全选没有用过lombok就不要选了
spring devtools 有时启动会打印INFO关于glassfish包依赖不存在,是因为开发工具未能正确查找依赖造成,不影响使用
参考: https://github.com/spring-projects/spring-boot/issues/9802
web选择
SQL选择
最基本的一个spring boot 创建完成
官方:https://docs.spring.io/spring-boot/docs/current/maven-plugin/
Spring Boot Maven插件在Maven中提供Spring Boot支持,允许您打包可执行jar或war档案并“就地”运行应用程序。
概述
repackage配置
1.spring boot配置
模块用作另一个模块的依赖项,则需要为重新打包的模块提供分类器,依赖模块同步打包,但会保留之前的编译的包
org.springframework.boot
spring-boot-maven-plugin
com.cn.spring.web.WebApplication
JAR
repackage
repackage
exec
2.spring cloud配置
主项目和辅助项目同步重新打包
org.apache.maven.plugins
maven-jar-plugin
${maven-jar-plugin.version}
jar
package
task
org.springframework.boot
spring-boot-maven-plugin
repackage
repackage
task
start和stop
1.配置测试随机端口
Spring Boot测试集成的一个很好的特性是它可以为Web应用程序分配一个空闲端口。当使用插件的起始目标时,Spring Boot应用程序将单独启动,因此很难将实际端口传递给集成测试本身。
下面的示例展示了如何使用build-helper-plugin实现相同的功能:
org.codehaus.mojo
build-helper-maven-plugin
reserve-tomcat-port
reserve-network-port
process-resources
tomcat.http.port
org.springframework.boot
spring-boot-maven-plugin
pre-integration-test
start
--server.port=${tomcat.http.port}
post-integration-test
stop
org.apache.maven.plugins
maven-failsafe-plugin
${tomcat.http.port}
2.跳过测试(打包不会添加测试类,但会编译)
true
com.xxx.xxx.Application
org.springframework.boot
spring-boot-maven-plugin
${start-class}
repackage
repackage
exec
pre-integration-test
start
${skip.it}
post-integration-test
stop
${skip.it}
skip和skipTests区别 (亲测效果一样不知道为什么,都是跳过运行测试,但仍然编译它们)官方使用skip
${skipTests.it}
${skip.it}
注意:测试类不可为空必须有内容
build-info
build-info
UTF-8
UTF-8
${maven.compiler.source}
${maven.compiler.target}
排除依赖
org.springframework.boot
spring-boot-maven-plugin
com.foo
bar
更多参数配置参考官方
默认项目会创建一个appliaction.properties文件 ,使用yaml格式的更直观些。
一般是这样采用dev开发环境和 prod上线环境 ,切换修改spring.profiles.active
banner.txt为控制台启动图标配置,如果想自己制作 链接
┬ ┬┌─┐┬ ┬ ┌─┐ ┬ ┬┌─┐┬─┐┬ ┌┬┐
├─┤├┤ │ │ │ │ ││││ │├┬┘│ ││
┴ ┴└─┘┴─┘┴─┘└─┘ └┴┘└─┘┴└─┴─┘─┴┘
spring-boot: ${spring-boot.version}
application.yml
注意:如果使用spring-data-starter-jdbc,spring-data-starter-redis 等,spring boot2.2jpa不配置将无法启动,
repositories参考Repository类,请勿使用spring.main.allow-bean-definition-overriding=true
#spring data
data:
jdbc:
repositories:
enabled: false
redis:
repositories:
enabled: false
或指定basePackages例如:
@EnableJpaRepositories(basePackages = "")
@EnableJdbcRepositories(basePackages = "") //如果无直接操作jdbc的话关闭
@EnableRedisRepositories(basePackages = "") //如果无直接操作redis的话关闭
大部分为默认配置好的不需要配置
spring:
profiles:
active: dev
#数据库连接池:使用hikari,spring boot 提供默认配置,其它连接池需配置
datasource:
type: com.zaxxer.hikari.HikariDataSource
#使用默认值参考: HikariConfig类或github上的HikariCP https://github.com/brettwooldridge/HikariCP
#maximum-pool-size参考: https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
transaction:
#事务等待2分钟超时
default-timeout: PT2M
#提交的事务失败回滚
rollback-on-commit-failure: true
#文件限制
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
#tocmat
server:
servlet:
context-path: /
session:
#1小时
timeout: PT1H
tomcat:
#主要是为了识别代理ip地址
#从中提取远程 ip 的 http 标头的名称
remote-ip-header: X-FORWARDED-FOR
#用于识别协议(HTTP 或 HTTPS)
protocol-header: X-Forwarded-Proto
application.yml添加hibernate配置
#hibernate JPA
jpa:
database: MYSQL
#在启动时初始化架构
generate-ddl: true
#注册OpenEntityManagerInViewInterceptor拦截器
open-in-view: true
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
current_session_context_class: org.springframework.orm.hibernate5.SpringSessionContext
enable_lazy_load_no_trans: true
#使用@Transient注解操作异常问题解决
event:
merge:
entity_copy_observer: allow
mybatis 参考:链接
application-dev.yml和application-prod.yml
差不多一样就是地址 用户名 密码会变动
#测试环境
spring:
config:
#名称可以在application.yml 切换
name: dev
datasource:
url: 地址
username: 用户名
password: 密码
driverClassName: com.mysql.cj.jdbc.Driver
sql-script-encoding: UTF-8
server:
port: 80
@SpringBootApplication
//开启事务
@EnableTransactionManagement
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
默认为 @ComponentScan(basePackageClasses = WebApplication.class) 无需配置
1. 默认组件的扫描
默认会使用basePackageClasses基于WebApplication类所在包进行组件扫描
@ComponentScan(basePackageClasses = WebApplication.class)
等同于WebApplication在com.cn.demo包下等于@ComponentScan(basePackages ="com.cn.demo")
2.需要重新定义扫描的组件
1.移动WebApplication到com.cn包下
2.使用@ComponentScan(basePackages ="xxx.xxx.xxx")
建议移动WebApplication
配置完成可以启动
下一篇:spring boot基础功能