Springboot项目的创建和配置详细介绍

Spring Boot提供了一种新的编程范式,能在最小的阻力下开发Spring应用程序,可以更加敏捷地开发Spring应用程序,专注于应用程序的功能,不用在Spring的配置上多花功夫,甚至完全不用配置。

Springboot最重要的是以下四个核心:

  1. 自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置。

  2. 起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。起步依赖其实就是特殊的Maven依赖和Gradle依赖,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制的依赖。

  3. 命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。

  4. Actuator:让你能够深入运行中的Spring Boot应用程序。Actuator提供在运行时检视应用程序内部情况的能力。安装了Actuator就能窥探应用程序的内部情况,包括如下细节:

  • Spring应用程序上下文里配置的Bean

  • Spring Boot的自动配置做的决策

  • 应用程序取到的环境变量、系统属性、配置属性和命令行参数

  • 应用程序里线程的当前状态

  • 应用程序最近处理过的HTTP请求的追踪情况

  • 各种和内存用量、垃圾回收、Web请求以及数据源用量相关的指标


创建Spring Boot 项目


1、使用 Spring Initializr 创建 Springboot 项目。


Spring Initializr有几种用法:

  • 通过Web界面使用。

  • 通过Spring Tool Suite使用。

  • 通过IntelliJ IDEA使用。

  • 使用Spring Boot CLI使用


本人常用的通过官网web界面创建和IDEA创建,这里介绍这种方式。


(1)、通过官网web界面创建


(a)、浏览器打开start.spring.io,如下图:


左侧根据你需要选择项目类型、编程语言、Springboot版本、打包方式、Java版本,输入项目信息,右侧还可以选择需要的依赖,下面有三个按钮GENERATE、EXPLORE、SHARE。点击GENERAE直接下载,点击EXPLORE弹出一个页面可以展示生成的代码,再点击download进行下载。SHARE可以复制创建springboot的路径。


(b)、将下载的压缩包解压到计算机中,这就是Springboot最基本的项目架构了。


(2)、IDEA创建Springboot项目


(a)、打开IDEA,依次点击File-->New-->project,出现如下界面:


红色方框里的地址是不是和上一种方式的地址一样?其实IDEA创建本质上也和上一样的,都是从这个网址创建,不过IDEA自动帮我们做了。


(b)、点击Next出现如下界面,也和上一种方式类似,输入项目信息,选择项目类型,Java版本,打包方式等。


(c)、继续点击Next出现如下界面,是不是也很熟悉,这里选择依赖、springboot版本。


(d)、继续点击Next出现如界面,输入项目名称,选择项目路径,点击Finish完成创建。


这两种方式是使用Spring Initializr 创建Springboot项目,Springboot也是一种Maven项目,还有一种就是创建Maven项目的方式进行创建。


2、Maven创建Springboot项目


先创建Maven项目再将Springboot特有的依赖加入到pom中


在包根目录下创建一个带@SpringBootApplication注解的main方法类。


自动配置


@SpringBootApplication注解的类在Spring Boot应用程序里有两个作用:配置和启动引导。@SpringBootApplication 开启了Spring的组件扫描和Spring Boot的自动配置功能。实际上, @SpringBootApplication 将三个有用的注解组合在了一起:

  • Spring的 @Configuration :标明该类使用Spring基于Java的配置。

  • Spring的 @ComponentScan :启用组件扫描,这样你写的Web控制器类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。

  • Spring Boot 的 @EnableAutoConfiguration : 这 个 不 起 眼 的 小 注 解 也 可 以 称 为@Abracadabra,就是这一行配置开启了Spring Boot自动配置的魔力,让你不用再写成篇的配置了。


Spring 4.0引入条件化配置,条件化配置允许配置存在于应用程序中,但在满足某些特定条件之前都忽略这个配置。Spring Boot运用条件化配置的方法是,定义多个特殊的条件化注解,并将它们用到配置类上。这些条件化配置类构成了Springboot的自动配置。


自动配置中使用的条件化注解:

  • @ConditionalOnBean     配置了某个特定Bean

  • @ConditionalOnMissingBean     没有配置特定的Bean

  • @ConditionalOnClass        Classpath里有指定的类

  • @ConditionalOnMissingClass      Classpath里缺少指定的类

  • @ConditionalOnExpression      给定的Spring Expression Language(SpEL)表达式计算结果为 true

  • @ConditionalOnJava         Java的版本匹配特定值或者一个范围值

  • @ConditionalOnJndi        参数中给定的JNDI位置必须存在一个,如果没有给参数,则要有JNDI  InitialContext

  • @ConditionalOnProperty       指定的配置属性要有一个明确的值

  • @ConditionalOnResource      Classpath里有指定的资源

  • @ConditionalOnWebApplication       这是一个Web应用程序

  • @ConditionalOnNotWebApplication    这不是一个Web应用程序


自定义配置


springboot可以使用两种影响自动配置的方式,使用显式配置进行覆盖和使用属性进行精细化配置。


覆盖 Spring Boot 自动配置


大多数情况下,自动配置的Bean刚好能满足你的需要,不需要去覆盖它们。但某些情况下,Spring Boot在自动配置时还不能很好地进行推断。我们可以在了解自动配置提供了什么之后,我们再来覆盖基础的安全配置,以满足特定的场景需求。


1、创建自定义的配置


覆盖自动配置很简单,就当自动配置不存在,直接显式地写一段配置。这段显式配置的形式不限,Spring支持的XML和Groovy形式配置都可以。Spring Boot会发现你的配置,随后降低自动配置的优先级,以你的配置为准。


2、通过属性文件外置配置


Spring Boot应用程序有多种设置途径。Spring Boot能从多种属性源获得属性,包括


如下几处。


(1) 命令行参数


(2)  java:comp/env 里的JNDI属性


(3) JVM系统属性


(4) 操作系统环境变量


(5) 随机生成的带 random.* 前缀的属性(在设置其他属性时,可以引用它们,比如 ${random.long} )


(6) 应用程序以外的application.properties或者appliaction.yml文件


(7) 打包在应用程序内的application.properties或者appliaction.yml文件


(8) 通过 @PropertySource 标注的属性源


(9) 默认属性


这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性


application.properties和application.yml文件能放在以下四个位置。


(1) 外置,在相对于应用程序运行目录的/config子目录里。


(2) 外置,在应用程序运行的目录里。


(3) 内置,在config包内。


(4) 内置,在Classpath根目录。


这个列表按照优先级排序,高优先级位置的配置会覆盖低优先级位置的配置。


自动配置微调


springboot有300多个属性可以用来微调Spring Boot应用程序里的Bean。下面列举几个例子:


1、禁用模板缓存


spring.thymeleaf.cache(thymeleaf模板)


spring.freemarker.cache (Freemarker)


spring.groovy.template.cache (Groovy模板)


spring.velocity.cache (Velocity)


默认情况下,这些属性都为 true ,也就是开启缓存。将它们设置为 false 即可禁用缓存。


2、配置嵌入式服务器


springboot内置服务器(Tomcat),运行Spring Boot应用程序时,应用程序会启动一个嵌入式的服务器(默认是Tomcat),监听8080端口。


server.port(配置端口)


server.ssl.key-store(密钥存储文件的存放路径)


server.ssl.key-store-password和server.ssl.key-password(创建秘钥文件时给定的密码)


3、4配置日志


默认情况下,Spring Boot会用Logback来记录日志,并用 INFO 级别输出到控制台。如果决定使用Log4j或者Log4j2,那么你只需要修改依赖,引入对应该日志实现的起步依赖,同时排除掉Logback。在配置文件可以配置日志等级、路径等信息。


4、配置数据源


通过属性配置数据库的URL和身份信息就可以了。


5、使用 Profile 进行配置


当应用程序需要部署到不同的运行环境时,可以使用基于Profile的配置。Profile是一种条件化配置,基于运行时激活的Profile,会使用或者忽略不同的Bean或配置类。设置 spring.profiles.active 属性就能激活Profile,任意设置配置属性的方式都能用于设置这个值。


spring.profiles.active=production


为每个环境分别创建配置,使用特定于Profile的属性文件,如application-{profile}.properties,application-{profile}.yml。


6、定制应用程序错误页面


Spring Boot自动配置的默认错误处理器会查找名为error的视图,如果找不到就用默认的白标错误视图


最简单的方法就是创建一个自定义视图,让解析出的视图名为error。这一点归根到底取决于错误视图解析时的视图解析器。

  • 实现了Spring的View接口的Bean,其ID为error(由Spring的 BeanNameViewResolver所解析)。

  • 如果配置了Thymeleaf,则有名为error.html的Thymeleaf模板。

  • 如果配置了FreeMarker,则有名为error.ftl的FreeMarker模板。

  • 如果配置了Velocity,则有名为error.vm的Velocity模板。

  • 如果是用JSP视图,则有名为error.jsp的JSP模板。


错误页有两处特别的信息需要呈现:错误的请求路径和异常消息。默认情况下,Spring Boot会为错误视图提供如下错误属性。

  • timestamp :错误发生的时间。

  • status :HTTP状态码。

  • error :错误原因。

  • exception :异常的类名。

  • message :异常消息(如果这个错误是由异常引起的)。

  • errors : BindingResult 异常里的各种错误(如果这个错误是由异常引起的)。

  • trace :异常跟踪信息(如果这个错误是由异常引起的)。

  • path :错误发生时请求的URL路径。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容