全网首例全栈实践(四)Spring Boot创建项目与配置详解

一、项目创建

我们使用IDEA工具开发后台项目,具体的安装过程自行搜索,比较简单。安装完成后打开IDEA,菜单栏选择File->New-Project,选择Spring Initializr,默认选择Default,然后Next。



填写好项目基本信息,选择Java Version为8以上,然后Next。



选择Web,右边勾选Web依赖。

选择SQL,右边勾选MySQL、JDBC、MyBatis依赖,然后Next。



填写项目名称和路径,点击完成即可创建项目。

二、项目目录

项目目录结构如下:



DemoApplication为工程启动的入口类,application.properties为配置文件,pom.xml为maven项目依赖。

我们看一下pom.xml依赖,里面包含我们创建项目过程中选择的依赖。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

mysql的依赖我们看到有这么一段<scope>runtime</scope>。

关于scope的分类,参照网上的讲解:
1、complie
编译域,这个是Maven中scope的默认值,默认就是使用这个值。compile表示被依赖项目需要同当前项目编译时一起进行编译,项目测试期以及本项目运行时期同样生效,打包的时候需要包含进去。
2、test
测试域,指的是被依赖的项目仅在项目进行测试的时候生效,一般将日志等依赖包(如:logback、Junit、Slf4j等)配置为test,项目运行时不生效。
3、runtime
运行域,指的是被依赖项目不会参与项目的编译,但项目的测试期和运行时期会参与。
4、provide
provided指的是打包的时候可以不必打包进去,别的容器会提供。配置provide的被依赖项目会参与编译,测试,运行等周期,但是在打包阶段未参与。
5、system
系统域,效果等同于provided相同,差别是依赖项不会从maven远程中央仓库下载,而是从本地Maven仓库中获取。

三、配置文件概述

Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件。

1.properties

Properties属于传统配置文件,语法结构以key=value的形式存在,缺点是中文会乱码,需要将其转换为注ASCII。

2.yml

yml是YAML(YAML Ain't Markup Language)语言的文件,以空格的缩进程度来控制层级关系,大小写敏感。空格的个数无关紧要,只要左边空格对齐即可视为同一个层级,但是需要注意的是不能用tab代替空格。

鉴于yml这种方式看起来比较一目了然,且yml文件中文不会乱码,我们的项目主要使用yml文件进行配置,特殊情况使用properties文件配置。

四、yml配置文件详解

在商业项目开发过程中,对代码质量的把控都比较严格,所以通常会有三种配置环境,即开发环境、测试环境、生产环境,根据不同的环境类型配置相应的属性。

首先,删除工程创建后默认的application.properties文件,创建application.yml文件。我们以开发环境配置为例,在resources目录下创建application-dev.yml文件。具体如下:



application.yml配置如下:

默认使用开发配置spring:  profiles:    active: dev  main:    allow-bean-definition-overriding: true

其中active为dev默认就是加在开发环境的配置文件,也就是springboot启动会加载application-dev.yml内的配置项。allow-bean-definition-overriding: true
表示有相同bean的直接覆盖。

再来看下application-dev.yml文件:

#开发配置spring:  profiles: dev

profiles为dev就是为了标识当前配置文件是开发环境,和application.yml文件中的active相对应。

五、配置文件取值

当我们需要给配置文件自定义内容,在其他类中获取相应值的时候,我们通常有两种方式取值,即ConfigurationPropertiesValue

Spring Boot通过ConfigurationProperties注解从配置文件中获取属性,Spring的Value注解也可以获取属性。区别在于:

ConfigurationProperties

1.ConfigurationProperties可以从配置文件中批量注入属性。
2.支持获取复杂的数据类型。
3. 对属性名匹配的要求较低。
4. 支持JAVA的JSR303数据校验。
5.不支持强大的SpEL表达式。

Value

1.只能一个个配置注入值。
2.不支持数组、集合等复杂的数据类型。
3. 不支持数据校验。
4. 对属性名匹配有严格的要求。
5.支持SpEL表达式。

由于使用的是Spring Boot,我们还是重点讲解ConfigurationProperties
注解取值。

  1. 首先导入依赖
<dependency>    <groupId>org.springframework.boot </groupId>    <artifactId>spring-boot-configuration-processor </artifactId>    <optional>true </optional></dependency>
  1. 在application-dev.yml配置文件中增加测试数据
#测试数据配置home:  province: 辽宁  city: 大连  desc: 我居住在${home.province} ${home.city}
  1. 新增匹配类
    新建包名为property,新建类文件HomeProperties,如图:



    HomeProperties类如下:

@Component@ConfigurationProperties(prefix = "home")public class HomeProperties {    /**     * 省份     */    private String province;    /**     * 城市     */    private String city;    /**     * 描述     */    private String desc;    public String getProvince() {        return province;    }    public void setProvince(String province) {        this.province = province;    }    public String getCity() {        return city;    }    public void setCity(String city) {        this.city = city;    }    public String getDesc() {        return desc;    }    public void setDesc(String desc) {        this.desc = desc;    }    @Override    public String toString() {        return "HomeProperties{" +                "province='" + province + '\'' +                ", city='" + city + '\'' +                ", desc='" + desc + '\'' +                '}';    }}

@Component注解表明是组件,@ConfigurationProperties注解表示从配置文件取值,prefix表示读取的配置信息的前缀,和自定义配置文件中的值相对应。
使用方法:
在需要使用HomeProperties的类中注入,然后直接get相应属性即可。

public class Test {
    @AutowiredHomeProperties homeProperties;
    ...
    ...
    homeProperties.getProvince();
}

6、问题记录

@ConfigurationProperties注解出现“Spring Boot configuration annotation processor not found in classpath”
解决方法:
在pom文件中增加

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

推荐阅读更多精彩内容