SpringBoot那些事

来源:互联网 发布:熊猫看书软件下载 编辑:程序博客网 时间:2024/06/05 22:57

前言

之前研究了一段时间springboot框架以及一些使用,中间解决了不少坑。为了方便之后同为第一次使用springboot框架的小白能更加快速的了解springboot并掌握其基本用法,我写下了这篇博客。因为是相对基础的讲解,所以无法将springboot的全部功能写全。如果有大神发现可以补充的或者找出错的,还请不吝赐教。

什么是SpringBoot

springboot,说白了就是一个集合了spring家族许多功能的大类库,包括springMVC,spring,spring data,spring security等等,并且提供了很多和可以和其他框架,插件完美整合的接口。要是以前用过ssm框架的同学就可以简单的把springboot理解为不用xml配置文件的ss整合。
在搭建完springboot框架之后,我们该用springMVC的注解还是用springMVC的注解,该用spring的IOC还是用spring的IOC,用法和之前几乎是完全相同,所以完全不用担心不习惯什么的。

如何用intellij IDEA新建一个springboot框架的项目

springboot框架建议使用intellij IDEA来创建,因为这个编译器对springboot框架有非常完美的整合,可以在一分钟之内就快速搭好一个springboot框架的web工程。使用其他编译器的程序员们若想手动创建springboot框架工程,可以参考我在下面写的springboot的项目结构,按照结构搭好也可以运行。下面就开始用intellij IDEA创建工程吧。


选择 new project,然后进入页面

第一步创建


添加默认配置,默认是maven工程,并会在pom.xml中初始化一些标签

添加配置


之后是选择创建的项目结构,我们普通的web项目只需要在web里面把web打上勾即可,其他的东西(比如mysql,redis等等)根据不同的业务复杂以及功能复杂而定,普通web项目可以不管(如果后来需要添加其他插件,可以再手动添加),然后点击next。

选择核心

之后就是标准的项目位置,名称和module名称和位置了,之后点击finsh就行了。


创建好的工程如下图

工程初始页

注:新建完之后的工程可以将圈中的三个文件删掉

springboot的项目结构

每一个框架都有自己的特殊的项目结构,springboot也不例外。虽然idea提供了模板,在按照上述步骤走完之后就会形成springboot的基础项目结构,但如果在其他工具上没有这个功能,需要我们手动创建的时候,了解springboot框架的作用就显得尤为重要。新建完工程之后,默认的项目结构如下

项目结构总览

  1. java这个包下面新建一个工程名之后,在工程包下面写所有后台的代码,包括controller,vo,service,dao之类的所有的后台代码。
  2. 这个是springboot的一个特殊的地方,详细情况在下面的springboot的特点处讲。这里先讲它的结构特点。简单来说这就是一个启动类,或者说是main方法。这个类必须直接放在工程名下,也可以说是和controller之类的包放在同一目录下,不然给controller等配置注解的时候springboot会扫描不到这些类从而导致无法启动项目。另外需要注意的是必须要有工程名这个包,因为启动类不能直接在java包的路径下
    特殊方法
  3. resource这个包下面是放所有除了代码以外的资源。包括静态资源和配置文件
  4. static这个包里面放所有的静态资源,包括css,js,images,以及一些不需要拦截器拦截的页面比如登录和注册页面。springboot自己的静态资源扫描器的默认路径就是在这个static下面。如果出现无法访问静态资源的问题,可以参考这个链接 Spring Boot无法访问css,js等静态资源的问题
  5. templates这个包里面放的是需要进行过滤器拦截的页面,里面的页面无法直接从地址栏获得或者是a标签直接地址跳转,有点像eclipse中的web-inf的作用。并且这个文件里的页面想要访问需要在maven中配置一个thymeleaf的依赖,也就是说springboot官方推荐这个包里的页面全部使用thymeleaf模板。至于什么是thymeleaf模板我在这个博客里会有介绍,地址是:(还没写这个博客,不过有准备)
  6. springboot的配置文件,springboot的推荐配置文件的格式是.properties和.yml,这个文件也是需要直接放在是resource目录下的。
    springboot的配置文件
  7. 这个时候可以看一下maven中的依赖,以后在手动配置的时候记得要添加这些依赖
    这里写图片描述
    这里写图片描述
    这里附上代码
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.example</groupId>    <artifactId>relaxedlife</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>jar</packaging>    <name>relaxedlife</name>    <description>Demo project for Spring Boot</description>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.7.RELEASE</version>    </parent>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>        <java.version>1.8</java.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-thymeleaf</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

springboot的特点

boot,有帮助和益处的意思,那么见名思意,就是能帮助你快速搭建出一个基于springboot框架的项目
其特点有如下

极少的配置文件

springboot项目提供了很多自动配置,这些配置大部分还是很符合我们程序员的习惯的,所以基本可以不用修改。而且这些自动配置是以Java代码进行配置存放在jar包里的,所以整个基础工程没有xml文件。
其中一个自动配置

语义化的配置修改方式

尽管springboot本身提供了各种很强大的配置方案,但难免会有程序员想要一些自定义的配置,因此springboot也提供了三种修改配置的方法。(由于第三种和第二种的差别不大,因此我在这里只介绍两种。第三种是通过修改配置文件application.yml)

通过Java代码进行修改

新建一个自己的类,给这个类加上@configuration的注解,表明这个类属于配置类,在项目启动时自动加载,继承相关的方法类,并对里面的方法进行添加或者重写,以此来达到修改默认配置的目的。
下面截图仅为修改配置之一的修改框架对静态资源访问路径修改方法。

Java代码添加配置

附上代码

import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configurationpublic class WebMvcConfig extends WebMvcConfigurerAdapter {    @Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");    }}

通过properties文件进行修改

springboot项目会自己生成一个叫做application.properties的文件(如果项目没有可以自己手动添加)

这里写图片描述

这个配置文件一开始是空的(对!是真的是什么都没有!)这个配置文件的好处就是它的语法十分的亲民,不像xml文件那种有相当严格规范的标签语法,这个配置文件的语法更倾向于面向对象,即点出来,就像是给一个属性赋值一样。

语义举例

附上代码

#spring.mvc.static-path-pattern=/**server.port=8190

但是这里有一个问题,那就是一旦在这个配置文件里配置了某个属性之后,该属性的其他的默认值将被覆盖掉。因此,我们再通过这种方法修改有多个默认值的配置时,在添加新的属性之前先把原有的默认值再重新写一遍,再添加新属性,这样就可以不覆盖原来的默认值了。
举个例子,假设springboot的A配置的B属性有a,b,c三个默认值,现在我们需要自己配置一个d值,那么在配置文件中就可以写A.B=d;但如果这样写,a,b,c三个值就会被覆盖掉。为了不让这三个可能有用的值被覆盖,我们需要这么写A.B=a,b,c,d.
因此这也是为什么springboot推荐使用java代码进行添加配置的原因。

特殊的启动方法

不像传统的web工程,springboot项目打包后不是war包而是jar包,也就是说你完全可以用jar包生成一个可执行文件,然后通过这个可执行文件来启动这个web工程。
springboot项目的启动方法有两种,下面进行简单介绍

通过main方法启动

之前我在项目结构中曾经说过这么一个类,它比较格路

这里写图片描述

附上代码

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DemoApplication {    public static void main(String[] args) {        SpringApplication.run(DemoApplication.class, args);    }}

springboot自己有内置的servlet容器以及最新版本的tomcat,因此我们完全没必要使用web.xml以及部署tomcat,main方法启动后,程序会执行@SpringBootApplication注解中的自动配置以及自动扫描还有自启动的功能。

springboot的启动banner

当控制台出现这个springboot的banner后代表程序执行成功

通过控制台启动

控制台启动

在idea的下方找到terminal,然后进入pom.xml的根目录,执行 mvn spring-boot:run命令即可。
之后若出现了springboot的banner,则证明启动成功。

地址栏的标识

Springboot 在地址栏进行访问的时候直接端口号后面添加要访问的地址即可。若是访问静态页面,直接在端口号后面添加静态地址即可

这里写图片描述地址栏标识

关于springboot的热部署

咱们写程序的时候都遇到一个问题就是每改动一个东西就得重启一道服务器,哪怕编译器自己有一个热部署不过也仅仅是能热部署前台页面资料,改动后台代码后依旧是需要重启一道服务器,这里推荐一个十分好用方便的工具 devtools
首先添加依赖

这里写图片描述

附上代码

<dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-devtools</artifactId>     <optional>true</optional> <!-- 这个需要为 true 热部署才有效 --></dependency>

然后添加插件依赖

这里写图片描述

附上代码

<dependencies>   <dependency>        <groupId>org.springframework</groupId>        <artifactId>springloaded</artifactId>        <version>1.2.7.RELEASE</version>   </dependency></dependencies>

再确定这两处是否是打开

这里写图片描述

还有一点
快捷键alt+ctrl+shift+/打开一个菜单
这里写图片描述

选中第一项后,会弹出第二个菜单

这里写图片描述
将用红色框框起来的这一项打上勾(有时候默认这里是没有勾的)
之后再重启一次服务器,热部署就好使了

之后每改动一个代码,哪怕是添加一个空格,控制台都会自动刷新一次。只不过由这个工具所提供的刷新要比我们手动编辑器重启系统要快不少。(在缓存中刷新)

(未完待续)

参考资料

http://www.jb51.net/article/112473.htm
http://blog.csdn.net/pdw2009/article/details/44700897
http://blog.csdn.net/wangb_java/article/details/71775637
http://www.jianshu.com/p/3d788198efab
http://blog.csdn.net/zhang168/article/details/51423905
http://blog.csdn.net/u012706811/article/details/52185345
https://baike.baidu.com/item/Spring%20Boot/20249767?fr=aladdin

原创粉丝点击