• Springboot的开始


    Springboot

    如何区分轻量级和重量级?

      在项目中,轻量级的框架会对自己项目中的代码有很少的侵入,重量级则会与代码有很深入的交叉关联。

      例如hibernate(重量级)和mybatis(轻量级)

    1、什么是springboot?

      springboot是spring生态圈的一个轻量级框架,换句话说springboot就是spring,是spring的衍生版本,

    如果是spring框架,项目搭建完毕无法实现任何的代码,也就是说spring无法帮助开发人员连接数据,对数据库

    增删改查,也没有办法把框架集成进来,需要开发人员手动编写xml配置文件,自己进行整合。因此springboot就是

    要干掉xml文件,使用Java代码来编写配置(通过Java类来代替xml)。

    2、为什么要用springboot来代替spring?

      傻瓜式开发,减少了大量配置,降低了开发人员的标准,低层次开发人员也可以进行编写业务逻辑,不

    再需要了解内部运行原理以及框架的集成和整合。


    正式使用springboot:

    1、新建springboot项目:并在xml文件中引入:

     1 <parent>
     2         <groupId>org.springframework.boot</groupId>
     3         <artifactId>spring-boot-starter-parent</artifactId>
     4         <version>1.5.22.RELEASE</version>
     5     </parent>
     6 
     7     <dependencies>
     8     <!--
     9         在springboot中会定义很多个starter,每一个starter都有自己不同的作用
    10         web-start:引入项目所运行的基础环境,包含了Tomcat
    11             tomcat:最终springboot会自动把tomcat集成进项目中,不再需要使用外部tomcat进行启动
    12             各种注解
    13                 @Controller
    14                 @Service
    15                 @RequestMapping
    16                 @ResponseBody
    17     -->
    18     <dependency>
    19         <groupId>org.springframework.boot</groupId>
    20         <artifactId>spring-boot-starter-web</artifactId>
    21     </dependency>
    22     </dependencies>

    在这个配置文件中的parent标签和spring-boot-starter-web包是由官网提供的,前者是让此项目变成parent项目的子工程,

    后者是引入项目运行所需要的环境(Tomcat);在引入前者的时候,可能会报异常,如果出现异常,则是项目此时的

    maven路径为默认的路径,更改为自己的就行!

    引入parent标签可以形成父子关系,使用dependency也可以形成父子关系,

    他们的区别就是:通过<parent>引用的项目A,可以使用A项目中<dependency>中依赖的StringUtils的方法,

    但是不能调用A项目中自己定义的类和方法,C项目中通过<dependency>依赖的A,两者却都可以调用。

    于是我们经常在使用父子工程的时候:先建一个大项目,引入springbootjar包,

      新建N个小项目,利用parent标签让它们都作为大项目的子工程;

      小项目之间如果存在依赖关系,则使用dependency将项目打成jar包放入另一个项目。

    从spring-boot-starter-web追溯下去:

    springboot的运行原理:
                作用是实现了自动的配置
                @SpringbootApplication是一个组合注解
                    @SpringBootConfiguration:springboot所必须要的基础配置(application.xml)
                    @EnableAutoConfiguration:自动加载配置
                @EnableAutoConfiguration任然是一个组合注解
                    @AutoConfigurationPackage:通过扫描包的形式自动加载(eg:mybatis的mapper扫描器)
                    @Import:导入(在application.xml配置文件中<import />)
                        EnableAutoConfigurationImportSelector:自动加载配置的选择器(根据条件进行自动加载配置)
                        继承了AutoConfigurationImportSelector
                        AutoConfigurationImportSelector类中有一个方法
                            getCandidateConfigurations():根据某个特定的条件获取配置信息
                            loadFactoryNames():根据name的属性值来获取加载器信息
                            是根据了META-INF/spring.factories文件进行加载配置
                            根据factories文件映射到了配置类中
                                MybatisAutoConfiguration.java是经过xml配置文件转换来的,和xml配置文件一样的作用,包含有:
                                DataSource
                                SqlSessionFactory
                                sqlSessionTemplate

    在Java下新建一个包,在包下新建一个类:ApplicationRun,这个类是整个项目的入口类:

     1 package com.aaa.liu.springboot;
     2 
     3 import org.springframework.boot.SpringApplication;
     4 import org.springframework.boot.autoconfigure.SpringBootApplication;
     5 
     6 /**
     7  * @Author 刘其佳
     8  * 2019/8/16 -- 8:24
     9  * @Version 1.0
    10  *
    11  * 1、注意:ApplicationRun类必须放在所有业务的上一层
    12  * 2、这是springboot的入口类
    13  * 也就是通过这个类启动整个项目
    14  * @SpringbootApplication
    15  * 自动记载springboot所需要的配置,并且把ApplicationRun类表示为整个项目的入口类
    16  * 3、最终Spring博偶有是根据SpringApplication.run()来进行运行的
    17  *  需要两个参数:Application.class:
    18  *                  让springboot整个框架知道ApplicationRun类就是整个项目入口类
    19  *              args:
    20  *                  main中的形参
    21  */
    22 
    23 @SpringBootApplication
    24 public class ApplicationRun {
    25 
    26     public static void main(String[] args) {
    27         SpringApplication.run(ApplicationRun.class,args);
    28     }
    29 }

    建一个controller包,并新建controller类

    在其中写上一个方法:

     1 package com.aaa.liu.springboot.controller;
     2 
     3 import org.springframework.web.bind.annotation.RequestMapping;
     4 import org.springframework.web.bind.annotation.RestController;
     5 
     6 /**
     7  * @Author 刘其佳
     8  * 2019/8/16 -- 8:57
     9  * @Version 1.0
    10  *
    11  * @Controller
    12  *      直接返回页面,不能处理Ajax请求,如果需要ajax请求需要添加@ResponseController注释
    13  * @RestController
    14  *      把整个controller相当于都添加了@ResponseController注释,不再需要在每一个方法上进行添加
    15  */
    16 @RestController
    17 public class Controller {
    18 
    19     @RequestMapping("/test")
    20         public String test(){
    21             return "测试springboot是否启动";
    22         }
    23 }

    这里要注意:使用的是RestController,而不是controller,具体看区别;

    整合mybatis:

    1 <!--mybatis-->
    2         <!--在springboot中没有整合mybatis,以下的jar包是mybatis公司自己为了整合
    3             springboot而提供的,我们在引入jar包时,需要加上版本号,即从maven中央仓库下载-->
    4         <dependency>
    5             <groupId>org.mybatis.spring.boot</groupId>
    6             <artifactId>mybatis-spring-boot-starter</artifactId>
    7             <version>1.3.0</version>
    8         </dependency>

     在添加mybatis依赖后,再次启动会抛异常,原因是mybatis框架被集成进项目中, 但是我们没有配置相关数据源信息。

     解决:配置数据库:

      按照springboot所规定的形式进行配置数据库,在官方文档中说明,可以使用文件进行配置数据源信息(springboot的主配置文件,也是以后操作最多的文件),

    有两种类型可以选择:properties类型文件和yml类型文件。

    注意:

      命名有规范:文件名必须要使用application,否则springboot无法识别;如application.properties     application.yml

      存放位置有规定:官方推荐把配置文件放在resources目录(classpath)下的config文件夹下,

              如果在config文件,springboot没有检测到会从resources目录下找;

              resources/config                resources

    eg:

     1 server:
     2   port: 8081 # 配置Tomcat,注意要在属性前加上一个空格
     3   context-path: /test #配置Tomcat的根路径(默认是/ 4 
     5   # 配置数据源
     6 spring:
     7   datasource:
     8     driver-class-name: com.mysql.jdbc.Driver
     9     url: jdbc:mysql://localhost:3306/mybatis
    10     data-username: root
    11     password: 123456

    banner

    spring项目启动的时候,会自动加载spring所提供的banner;

    替换banner:

      需要在resources目录中创建文件:banner.txt    

      在文件中:
    /**
    *_______________#########_______________________
    *______________############_____________________
    *______________#############____________________
    *_____________##__###########___________________
    *____________###__######_#####__________________
    *____________###_#######___####_________________
    *___________###__##########_####________________
    *__________####__###########_####_______________
    *________#####___###########__#####_____________
    *_______######___###_########___#####___________
    *_______#####___###___########___######_________
    *______######___###__###########___######_______
    *_____######___####_##############__######______
    *____#######__#####################_#######_____
    *____#######__##############################____
    *___#######__######_#################_#######___
    *___#######__######_######_#########___######___
    *___#######____##__######___######_____######___
    *___#######________######____#####_____#####____
    *____######________#####_____#####_____####_____
    *_____#####________####______#####_____###______
    *______#####______;###________###______#________
    *________##_______####________####______________
    */

     运行处的结果就可以将spring的banner改成自己的这个人物;

    如果想要关闭banner的显示:

     1 package com.aaa.liu.springboot;
     2 
     3 import org.springframework.boot.Banner;
     4 import org.springframework.boot.SpringApplication;
     5 import org.springframework.boot.autoconfigure.SpringBootApplication;
     6 
     7 /**
     8  * @Author 刘其佳
     9  * 2019/8/16 -- 8:24
    10  * @Version 1.0
    11  *
    12  * 1、注意:ApplicationRun类必须放在所有业务的上一层
    13  * 2、这是springboot的入口类
    14  * 也就是通过这个类启动整个项目
    15  * @SpringbootApplication
    16  * 自动记载springboot所需要的配置,并且把ApplicationRun类表示为整个项目的入口类
    17  * 3、最终Spring博偶有是根据SpringApplication.run()来进行运行的
    18  *  需要两个参数:Application.class:
    19  *                  让springboot整个框架知道ApplicationRun类就是整个项目入口类
    20  *              args:
    21  *                  main中的形参
    22  */
    23 
    24 @SpringBootApplication
    25 public class ApplicationRun {
    26 
    27     public static void main(String[] args) {
    28 //        SpringApplication.run(ApplicationRun.class,args);
    29 
    30         //关闭banner的话:
    31        SpringApplication springApplication=new SpringApplication(ApplicationRun.class);
    32        springApplication.setBannerMode(Banner.Mode.OFF);
    33        springApplication.run(args);
    34     }
    35 }
    乾坤未定,你我皆是黑马
  • 相关阅读:
    OSG-提示“error reading file e:1.jpg file not handled”
    OSG-加载地球文件报0x00000005错误,提示error reading file simple.earth file not handled
    QT-找开工程后,最上方提示the code model could not parse an included file, which might lead to incorrect code completion and highlighting, for example.
    我的书《Unity3D动作游戏开发实战》出版了
    java中无符号类型的第三方库jOOU
    Windows批处理备份mysql数据
    使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A
    Java版本,Java版本MongoDB驱动,驱动与MongoDB数据库,Spring之间的兼容性
    Jrebel本地激活方法
    wget下载指定网站目录下的所有内容
  • 原文地址:https://www.cnblogs.com/liuqijia/p/11361050.html
Copyright © 2020-2023  润新知