美文网首页简书面面观每天写500字每天写1000字
全网首例全栈实践(四)Spring Boot创建项目与配置详解

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

作者: 充电实践 | 来源:发表于2019-01-25 00:13 被阅读14次

一、项目创建

我们使用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>

相关文章

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/dofejqtx.html