boot在计算机术语中是启动的意思,SpringBoot也就是Spring的启动器。

稍有经验的JavaWeb程序员对于传统SSM结构的MVC应用,大多数最不好的体验就是搭建一个项目需要进行大量的配置。稍有不慎就可能采坑。更关键的是有些配置基本就不会去进行定制化修改。为了解决这个问题,SpringBoot出世了。就如同我们所想的,SpringBoot给我们进行了大量的默认配置,从而达到了我们部署一个web项目,只需要下几个jar包然后直接运行即可。堪称JavaWeb程序员的新世纪福音。我尽可能的将文章分为实战篇和解析篇。实战文章里面只会涉及到整体的结构,不会过多的阐述细节。比如下面:

要搭建一个基本的后台应用,放在以前我们可能要考虑以下几个方面:

1、web应用的配置

2、maven的配置

3、Spring和SpringMVC的配置

4、日志配置

5、灵活构建

而实际上:

一、web应用的配置 (不用配置)

web应用的配置就是传统项目中web.xml文件的相关配置。我们可以在其中配置Servlet、Filter、Listener等等。在传统的SpringMVC应用中最常见的配置就是在ContextListenter中加载Spring、SpringMVC的配置文件。

不过在SpringBoot项目中,其为我们提供了默认的配置文件。所以我们不用再显示的编辑web.xml文件,省去了这一步骤。假如我们需要自定义Sevlet、Filter或者Listener等,只需要采用注解配置的方式进行配置即可,SpringBoot给我们提供了相关的RegisterBean。具体的配置细节我们目前可以不用了解,以后的实战中会用到。

二、maven的配置 (需要配置)

对于Java项目来说,最常见的包管理工具就是Maven了。Maven的基础配置主要有以下几点:

1、依赖包的坐标

2、编译或者打包的基本配置

3、编译或者打包时的资源过滤,这一步很重要,否则你在编译或者打包后启动项目时会提示你,xxxx配置文件not found等,很可能就是因为你没有配置好资源的过滤

具体配置后面会详细讲到

三、Spring和SpringMVC的配置(部分需要配置)

配置过传统SpringMVC的同学一定会记得spring-application.xml和spring-mvc.xml配置文件。spring-application.xml是spring相关的配置,如解析配置文件的PropertyConfigPlaceholder、开启包注解扫描的component-scan、数据库连接池、代理支持、bean的注册等。spring-mvc.xml则是spring-mvc项目的配置,基本配置项如支持注解的的驱动mvc:driver:annotation,以及如果不是前后端分离的项目还要配置视图解析器viewResolver。如果不是使用JavaConfig的形式启动项目,则需要在web.xml中显式的配置这两个文件的位置。

四、日志配置 (部分需要配置)

在传统的SpringMVC项目中如果想启用日志,我们需要在resources文件夹中创建一个log.properties文件进行相关的配置,然后在pom中添加我们想使用的日志类型的驱动的依赖。而在SpringBoot中,这一步也给我们省去了。默认给我们提供了Slf4j的日志驱动,甚至不用配置就可以启用日志。不过如果你有一些特殊的要求,还是要进行简单的配置。

五、灵活构建 (根据需要选择配置)

我们的环境一般分为分为开发环境、测试环境、线上环境。不同环境下的相关依赖是不同的,最典型的如数据库的配置。我们不可能所有环境都用同一个数据库。根据启动项或者是系统配置等等某个标志来决定系统运行时启用哪个环境的配置进行编译打包就叫做灵活构建。

传统项目中我们进行灵活构建通常直接采用Maven的profile或者是使用AntCall。不过在SpringBoot中我们获得了更好的体验。可以以配置文件名不同的方式直接应用不同的profiles,具体配置请看下面。

一、创建一个基本项目

上面介绍完了我们配置一个项目需要进行哪些配置下面我们来看一个实例。首先打开我们的编译器——IDEA,新建项目:

IDEA自带的SpringBoot项目创建选项

我们直接选用IDEA自带的SpringBoot项目创建选项然后一路Next就行。另外初始化的时候我们选择这几个导包选项,都是我们可能会用到的,最后完成创建,这样我们的一个SpringBoot项目就已经创建完成了,而且现在就可以直接运行了,相比较于传统的SpringMVC项目,是不是方便了100倍。

SpringBoot采用JavaConfig的形式来启动项目。让我们找到主包下的启动器类——Application,右键Run Application即可运行。

点开@SpringBootApplication我们可以看到这其实就是一些我们常见注解的几何体,只不过被继承成为了一个注解:

SpringBootApplication注解

除了上面自定义注解所必须的四个元注解以外。我们依次来看下面的这几个注解:

1、@SpringBootConfiguration只是简单的继承了@Configuration注解,所以这两个注解没有本质上的区别,他们功能相同。@Configuration标志着其注解的类是JavaConfig类,可以用来配置Spring,作用和xml配置文件相同,并且可以互相引用。

2、@ComponentScan:我们如果配置过传统的Spring项目,对这个一定不会陌生。因为我们在使用Spring的时候经常会用到其提供的注解来帮助我们简化代码,提升效率。比如 @Controller、@Service、@Component等等。但是这些配置是Spring提供的,而不是Java自带的,所以为了给其赋予意义,我们必须让Spring去发现我们使用这些注解的地方,从而产生实际价值。@ComponentScan的作用和我们在xml问价中配置的component-scan标签的作用的一样的,默认扫描的包是该注解同级和同级下所有子包中的所有类。因为这也是为什么Application类的位置在主包下了。

3、@EnableAutoConfiguration则是SpirngBoot最重要的注解。我们之前说道SpringBoot只是Spring的一个快速启动器,其给我们带来的最大好处就是提供了默认配置,而这个注解的意思就是开启默认配置。也是体现了SpringBoot作用的最根本配注解。

我们打开resources目录,可以看到一个空的application.properties文件,这个就是SpringBoot项目的配置文件。不过SpringBoot还提供了yml文件的配置方式,相比较于properties文件,我更喜欢yml的配置方式,虽然他们的本质是一样的。所以我们将这个properties文件换成同名的yml文件:

二、配置MySql数据源和启用Mybatis支持

作为一个web项目,数据库可以说是我们所必须的。而在RDS(关系型数据库)中我们最常用的就是MySql了。如下图所示,我们就配置好了我么你的数据源。

SpringBoot中数据源的配置

可以看到yml配置文件中,我们能够清楚的看到配置之间的层级关系。举个例子,将图中的url转换为properties配置则是:

spring.datasource.url =xxxxxx

只要是datasource相关的配置,我们都要写上spring.datasource的前缀,个人觉得看起来十分混乱。

配置完数据库之后,我们总不能直接用传统的JPA进行操作吧,过于繁琐。所以我们还要继续配置Mybatis相关的配置。好消息是SpringBoot默认集成了Mybaits,所以我们只需要配置其扫描Alias别名的主包就行,这样Mybatis就会检测到com.zzz.base包以及其子包下的所有@Alias注解,以便于我们在mapper.xml中用到。

配置完之后我们来看下如何使用Mybatis。

要想使用Mybatis操作数据库,按照惯例我们需要编写mapper接口、mapper.xml文件、service接口以及其实现类。我们来写一个简单的例子:

假设这是一个我们的User类,我们为其设置了别名Alias(value = "User")

User相关的Mapper

我们需要为其编写Mapper接口和xml文件,这里可能有个问题,SpringBoot项目中如何让Mybatis识别到Mapper接口呢?答案就是我们为其加上@Mapper注解就行了

下面来看一个基本的Mapper.xml的实现,还以User为例

UserMap中的返回值类型type="User" 这里的User就是我们在前面实体类上使用@Alias注解表明的别名。然后我们将Mapper接口注入到Service中就行了,并且为Service加上@Service注解将其注册成一个单例的Bean

至此,我们的Mybatis也配置完了。

三、maven相关配置

为了讲明为什么要配置maven,我还以上面的(二)为例子。

User相关类的目录结构

简单来看下User相关类的目录结构。能够发现Mapper接口和Mapper.xml文件是在同一目录下的。如果我们不显式的进行maven相关的配置,则一定会遇到的问题就是xml文件找不到。

编译后输出的target文件夹

即在编译后输出的target文件夹中找不到我们编写的xml文件,只能看到.java文件编译后的.class文件。

maven中给我们提供的<build></build>标签选项,可以让我们自己控制文件资源的过滤。

maven配置资源过滤

如上图所示,我们在build标签的字标签resources标签下,配置了两个resource标签。代表了两个应用于全局的资源过滤规则。<direction>指定为src/main/java标示该条规则作用于其本身和其所有的子包。<includes>标签标示哪些资源是我们需要的,如果使用maven提供的占位符机制,我们还可以同时配置<filter>,不过既然是Spring项目,我们最好还是使用Spring提供的PropertyPlaceholderConfig。<include>标签中使用了ant风格的路径,**/*.xml表示src/main/java包,以及其所有子包中的xml文件在编译打包时会原封不动的保留下来。同理可得下面的配置表示,resources文件夹下通常指默认保留.properties文件,通过显式指定,我们可以在resources文件夹下添加更多的配置供我们使用。

四、配置灵活构建

前面有说道,SpringBoot中的灵活构建十分好用。那他好用在什么地方呢?我们来一探究竟。

灵活构建的配置文件

我们在配置文件中的spring级别下配置当前配置文件对应的profiles级别:

在application.yml中指定默认启用的profiles为dev
application-dev.yml中指定分支的名字为dev
application-prd.yml中指定分支的名字为prd

上面是我配置好的灵活构建的配置,其中application.yml配置文件可以看成是共享配置,application-dev.yml是开发环境配置,application-prd.yml是生产环境配置。他们是工作模式类似于不同配置项去并集,相同配置项覆盖。当我们在本地运行项目时,SpringBoot默认加载的是不带后缀名的application.yml配置文件,但是解析到其中指定了启用dev分支,则会在resources文件夹下寻找名为applicayion-dev.xml的配置文件进行解析。一定要注意的是,不仅名字后缀名要为dev,而且里面的配置profiles名也要和后缀名保持一致,这样才能给SpringBoot寻找到,毕竟约定先行与配置,既然给我们制定了规则,我们照做就行了。

比如:我在application.yml中配置了log的日志级别为INFO,在application-dev.yml中配置了日志级别为DEBUG,在application-prd中没有配置日志级别。

则当我们启用dev分支时,日志级别为DEBUG(没有配置取并集),当我们启用prd分支时,则实际上日志级别为INFO(相同配置覆盖)。

那么我们如何取显式的选择启用某个分支呢?最常见的方式就是在启动命令中加上命令行参数如:

java -jar xxx.jar --spring.profiles.active=prd

这样我们就在启动xxx.jar时指定了分支为prd,从而application-prd.yml配置文件会生效。

比如

这样我们就以启动了loan-spring-boot.jar包,并且应用的是prd分支。

五、日志相关

要想做好一个项目,日志管理是必不可少的。因为我们在排查错误时一定要用到日志。

不过SpringBoot默认给我们提供了按天切割的日志机制。每天会产生一个新文件,十分的好用。我们只需要配置日志的级别和生成的日志文件的位置就可以啦。

指定某个包极其子包下的所有日志
指定所有日志都应用debug级别的日志

现在,一个SpringBoot的web项目就已经配置完成了。我们接下来只需要写Controller就行了。

下面是我自己做的一个不完全的后台模板。

https://github.com/GayITHub/back-template​github.com

springboot导包显示不存在_(一)SpringBoot搭建基本后端应用相关推荐

  1. springboot导包显示不存在_基础篇:Spring Boot入门体验(图文教程)

    优质文章,及时送达 什么是 Spring Boot? Spring Boot 是由 Pivotal 团队提供的全新框架.Spring Boot 是所有基于 Spring Framework 5.0 开 ...

  2. springboot导包显示不存在_BOOT项目依赖另外一个模块的包,开发的时候都正常,执行clean package打包成jar时却提示依赖的模块包不存在。...

    我在service1模块里依赖了common模块,开发的时候包都能正常引用到,启动也能正常测试访问,可是奇怪的是,当我要打包成jar包时,就提示service1里依赖common的包都不存在,之前从没 ...

  3. 填坑之路!SpringBoot导包坑之spring-boot-starter-parent

    填坑之路!SpringBoot导包坑之spring-boot-starter-parent 大誌 2018-11-14 21:03:25 104522 收藏 83 分类专栏: Bug 文章标签: Sp ...

  4. python no module name_python导包显示No module named XXX问题

    最近用sublime text写python脚本,在导包是一直显示No module named XXX. 问题描述: 首先文件夹的目录结构如下: count.py文件,代码如下: 1 #coding ...

  5. idea导包都报错_不仅仅要会导别人的包也要会导自定义的包——Python导包总结...

    1 前言 导包这个词我相信编程人员不会陌生.如何很好地在Python中导入别人的包以及自己写的工具函数?这时需要分清楚和用好的,特此总结以飨读者. 2 优雅地导入别人的包 当然这里主要指你使用pip( ...

  6. springboot的jsp应该放在哪_在springboot中集成jsp开发

    springboot就是一个升级版的spring.它可以极大的简化xml配置文件,可以采用全注解形式开发,一个字就是很牛. 在springboot想要使用jsp开发,需要集成jsp,在springbo ...

  7. springboot后台弹出前台对话框_基于springboot的精品小说网站

    项目简介 今天给大家推荐一款小说精品屋,该项目是一个多平台(web.安卓app.微信小程序).功能完善的小说弹幕网站,包含精品小说专区.轻小说专区和漫画专区.包括小说/漫画分类.小说/漫画搜索.小说/ ...

  8. springboot项目文档源码_基于SpringBoot和Vue的企业级中后台项目(附源码)

    简介 SpringBoot和Vue,前后端分离,我们开源一套漂亮的代码和一套整洁的代码规范,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少加班,快乐工作,热爱 ...

  9. springboot:spring-boot-starter-parent 导包失败 “not found【暂且弃坑】

    问题学习记录 问题 pow.xml中导入spring-boot-starter-parent失败,无法自动下载到本地目录问题 重点 pom.xml中dependency是对repository里的某个 ...

最新文章

  1. 语义分割:基于openCV和深度学习(二)
  2. 每日一篇——lodash—array——differenceBy
  3. RuntimeError: The current Numpy installation fails to pass a sanity check due to a bug in the window
  4. xshell复制粘贴
  5. ios::ate ios::app ios::out ios::in ios::trunc ios::binary(组合总结)
  6. vim学习手册-10后序
  7. VS2010中C#添加图片(资源)
  8. 你真的了解静态变量、常量的存储位置吗?
  9. OpenCV与图像处理学习十一——分水岭算法(含代码)
  10. 共享内存简介及docker容器的shm设置与修改
  11. Confluence 6 从外部目录中同步数据支持的目录类型
  12. Spring Boot 的starter pom
  13. 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据
  14. nodejs ffmpeg 超级工具 rtsp fmp4 rtmp
  15. 【C语言】递归详解汉诺塔问题
  16. 分节符的插入与删除word
  17. 今日头条测试开发实习生面试
  18. 2021年汽车激光雷达行业研究报告
  19. 数据表很多,sqlmap快速找出存放用户名和密码的表,一把梭
  20. 修改滚动条样式的方法

热门文章

  1. 信道和物理媒体的区别
  2. idea插件导出_Intellij IDEA 中我一直在用的几个插件
  3. 深度学习之卷积神经网络 LeNet
  4. JavaWeb笔记01-XML
  5. 【spider】selenium模拟点击斗鱼示例
  6. 嵌入式常见笔试题总结
  7. find_first_of()和 find_last_of() 【获取路径、文件名】
  8. this static 面向对象三大特点
  9. 在Linux中head命令,Linux 中 head 命令实例
  10. 小程序循环里做字符串拼接_昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了...