spring全家桶系列之spring boot 2.2-基础配置(一)

简介


基于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容器


spring boot 2.2亮点


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 项目

spring全家桶系列之spring boot 2.2-基础配置(一)_第1张图片

下一步创建一个名叫test的项目

spring全家桶系列之spring boot 2.2-基础配置(一)_第2张图片

下一步选择jar包

 spring全家桶系列之spring boot 2.2-基础配置(一)_第3张图片

 

developer tools 全选没有用过lombok就不要选了

spring devtools 有时启动会打印INFO关于glassfish包依赖不存在,是因为开发工具未能正确查找依赖造成,不影响使用

 参考: https://github.com/spring-projects/spring-boot/issues/9802

spring全家桶系列之spring boot 2.2-基础配置(一)_第4张图片

web选择

spring全家桶系列之spring boot 2.2-基础配置(一)_第5张图片

SQL选择

  • 数据库选择先为MySQL Driver (oracle 是没有的需要自己导入)
  • hibernate为:spring data JPA 
  • mybatis为: mybatis FrameWork

spring全家桶系列之spring boot 2.2-基础配置(一)_第6张图片

最基本的一个spring boot 创建完成


spring boot maven


 官方:https://docs.spring.io/spring-boot/docs/current/maven-plugin/

Spring Boot Maven插件在Maven中提供Spring Boot支持,允许您打包可执行jar或war档案并“就地”运行应用程序。

 概述

  • spring-boot:run运行Spring Boot应用程序(不需要配置和使用)。
  • spring-boot:repackage 打包你的jar / war是可执行的(编译可执行文件)。
  • spring-boot:start和spring-boot:stop管理Spring Boot应用程序的生命周期(即集成测试)。
  • spring-boot:build-info生成可由执行器使用的构建信息(例如编译时间,项目名)。

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配置文件


默认项目会创建一个appliaction.properties文件 ,使用yaml格式的更直观些。

spring全家桶系列之spring boot 2.2-基础配置(一)_第7张图片

 一般是这样采用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

Main主类 



@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") 

  •   如果使用了basePackages了例如:使用hibernate进行数据访问层的注入还需要配置basePackages
  •   例如@EnableJpaRepositories(basePackages ="xxx.xxx.xxx")不配置的话会注入失败。

建议移动WebApplication


配置完成可以启动


下一篇:spring boot基础功能

 

你可能感兴趣的:(spring-boot)