springboot用来简化spring的初始搭建以及开发过程。
比方说,创建一个springmvc程序。先导入很多很多坐标,然后写很多的配置类。很麻烦。
而如果使用springboot,spring和springmvc的大量依赖和它们的两个配置类可以得到简化。并且springboot还内置了一个tomcat服务器。
从spring的官网上就可以下载到一个springboot工程的模板。用这个模板开始开发。
最简单的springboot程序包含两个文件:Application类和pom文件。
只要运行Application类,就可以启动springboot,tomcat也会跟着启动。
pom文件之中有最基础的两个依赖。一个是继承的依赖starter-parent,springboot最基础的依赖,springboot所有的东西都建立在其之上。另一个是starter-web依赖,springboot程序能够完成web开发就以这个依赖作为基础。
starter-parent这个依赖,里边实际上配置了200多个依赖(mysql、servlet、springweb等等),并且这些依赖的版本都是没有冲突的。这些依赖都用dependencyManagement
进行管理,要用到的时候直接引入即可。
starter-web这个依赖存在于starter-parent这个依赖中。它是做web需要用到的依赖,所以将其从starter-parent这个依赖引下来。
另外,starter-parent中还有starter-test依赖,可以用来做测试,也可以引下来。
另外,starter-web这个依赖中存在starter这个依赖,如果不添加start-web依赖,也必须要添加start依赖。
springboot默认使用tomcat作为服务器,但是其实可以更改为jetty服务器。starter-parent之中具有jetty的服务器。只要把tomcat服务器的依赖排除掉,然后使用jetty服务器即可。
要构建springboot工程的jar包,需要同时包含springboot依赖的所有jar包,并且要指定一个入口类才能使用java -jar启动jar包。
maven使用默认的指令package是没法包含springboot依赖的jar包并指定入口类的。需要在pom文件中专门导入一个maven打包的插件用于打包springboot工程。
基础springboot工程只有启动类和pom文件,但是如果想要更改springboot的设置,或者想要配置一些设置项(比如mysql的数据源),就需要引入配置文件了。
三种配置文件(properties,yml,yaml),可以在这三种中写springboot的配置信息。当三种同时存在时,properties的优先级最高,yaml的优先级最低。
有些配置项配置了,会被springboot自动读取。如果开发者想要获取到配置项的内容,应该如何做呢?
第一种方式:使用自动装配基本类型@value
即可。
第二种方式:使用springboot提供的类Enviroment
,使用@Autowired自动装配,所有设置项都会被封装到这个对象中。
第三种方式,引入依赖然后自定义一个封装类即可。
在配置文件中配置即可。
将springboot打包,可以在启动jar包的时候指定特定的环境。
java -jar springboot.jar --spring.profiles.active=test
其实启动jar包的时候可以修改配置文件中的信息。
java -jar spirngboot.jar --server.port=10001 --spring.profiles.active=pro
之前maven高级应用的时候也有一个多环境开发,boot和maven之间可以实现同步。要想要springboot能够和maven的多环节依赖产生联系,只需要让springboot读取pom文件激活的环境配置即可。
要实现boot读取pom文件中的属性,要在pom中加个插件:
然后在springboot的配置中激活maven的指定环境。使用${}
占位符来获取pom文件中的<properties>
标签中的内容。
配置文件在不同的位置,有不同的加载优先级。具体来说,将一个springboot项目打包,它会按照如下顺序加载配置文件:
这样可以更加方便对配置文件做管理。并且如果打包的时候jar包中的配置文件写错了,可以在jar包同级目录下添加修改后的配置文件来完成修改。不用重新部署jar包。
config目录主要是为了处理这样的场景:别人给了一个项目并且已经写好了配置文件,如果想要修改配置文件,最好不要直接在他的配置文件中修改,这时候就可以新建config目录,在这个目录下添加配置文件。springboot会优先加载这个目录下的配置文件。
springboot整合mybatis非常非常简单。只需要导入mybatis和mysql的依赖,然后在springboot的配置文件中编写数据源,然后为数据层接口添加注解@Mapper,接下来为接口中方法添加各种mybatis注解/编写sql映射文件,就可以调用接口中各种方法执行数据库查询操作了。
spring整合mybatis的时候,还需要将mybatis的配置文件中数据库连接和包扫描的部分做成bean,springboot将这两部分隐藏起来了。
由于springboot的配置文件中有数据源的信息,所以mybatis会自动读取配置文件创建SqlSessionFactoryBean。
由于springboot的数据层接口会加上@Mapper
注解,这个注解可以代替包扫描的作用。
当接口自动装配,发现这个接口上存在Mapper注解,springboot会去寻找IoC容器中的SqlSessionFactoryBean以及sql映射文件帮助该接口创建代理对象。然后这个接口就可以执行各种查询了。