全网首例全栈实践(四)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相对应。

五、配置文件取值

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

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>

2.在application-dev.yml配置文件中增加测试数据

#测试数据配置
home:
  province: 辽宁
  city: 大连
  desc: 我居住在${home.province} ${home.city}

3.新增匹配类

新建包名为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 {
    @Autowired
HomeProperties 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>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

充电实践

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值