前言

SpringBoot核心配置在springboot中有非常重要的作用,我们可是使用核心配置文件进行一些基础功能的定义,属性值的注入等。springboot支持两种格式的核心配置文件,一种是properties和yaml,properties采用传统的键值对方式,但是相比于yaml优先级更高,yaml采用采用树状结构,使用缩进进行关系判断。

注解可以说是springboot的一大特点,采用注解极大的简化了spring的配置问题。

环境搭建

我们采用上篇博客简单spring initializr方式创建springboot项目,可参考 https://www.cnblogs.com/hjk-airl/p/16081134.html

application.properties和application.yaml

application.properties和application.yaml作用是一样的,对于不同的人群有不一样的偏好,可采用不同的方式,看个人喜好。

  • 我们在resources文件夹下创建一个application.yaml文件,方便同时对别两种方式的不同,因为我们在创建项目的时候application.properties已经创建,所以只需要创建yaml就行。
  • 步骤(右键resources->new->file->输入application.yaml)一定要是这个文件名,不然springboot不识别,创建完成后可以看到这个文件的图标和application.properties文件一样。

springBoot基本系统属性配置

我们先修改一下端口号看一下,我们知道默认的端口号是8080,我们修改为8081然后运行。

server.port=8081

在这值得注意的是当我们同时存在application.properties和application.yaml时,并且两者都有内容时,会优先使用properties文件,我们在application.properties文件内容删除或者注释掉在application.yaml里输入

server:
port: 8082

我们可以在配置文件里配置一些基本信息如jdbc的环境变量,和开启松散绑定,开启什么什么缓存的配置等。

spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
password: 123456
username: root

我们还可以配置一些自己类的属性。

我们创建一个Person类,我们在加@ConfigurationProperties时idea可能会爆红,但是对程序影响,我们可以先在pom.xml里加一个依赖,如果还爆红那就把idea关闭在重新打开。

	<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
package com.hjk.springboot01.pojo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; @Component //将Person类作为Bean注入Sprng容器
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private String address; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}

然后在编辑controller类

package com.hjk.springboot01.controller;

import com.hjk.springboot01.pojo.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class PersonController { @Autowired
public Person person; @GetMapping("/person")
public String getPerson(){
System.out.println(person.toString());
return person.toString();
} }

最后我们在核心配置文件application.properties或者application.yaml里编写想要配置的东西,我没配置Person的属性。

application.properties

person.name='hjk'
person.address='中国'

application.yaml

还是那个问题,如果你同时存在properties和yaml文件,并且两者都有同种属性,那么会优先使用properties里面的。

person:
name: hjk
address: hahaha

最后我们访问当本地url可以在控制台看到输出。

对比两种注入方式

对比点 @Configuration @Value
底层框架 springboot spring
功能 批量注入配置文件属性 单个注入
setter方法 需要 不需要
复制类型注入 支持 不支持
松散绑定 支持 不支持
JSR303数据校验 支持 不支持
SpEL表达式 不支持 支持

自定义配置

如果使用@PropertySource和@Configuration注解实现,@PropertySource注解可以指定自定义配置文件的名称,@Configuration注解可以将实现类指定为自定义配置类,如果需要将自定义配置文件中的属性值注入实体类属性,可以使@ConfigurationProperties或@Value注入属性值

  • 自定义配置文件,我们创建文件My.properties

    并且在里面输入
my.name=hjk
my.address=hehehe

修改Person类

package com.hjk.springboot01.pojo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource; @Configuration
@PropertySource("classpath:My.properties")
@EnableConfigurationProperties(Person.class)
@ConfigurationProperties(prefix = "my")
public class Person {
private String name;
private String address; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
@Configuration 表示自定义配置类,这个类会作为bean组件添加到spring容器种
@PropertySource 指定自定义配置文件的位置和名称
@ConfigurationProperties 将配置类中以指定开头的属性值注入配置类属性
@EnableConfigurationProperties 开启配置的属性注入功能,配合@ConfigurationProperties使用

使用Profile进行多环境配置

在实际开发中,应用程序通常需要部署到不同的环境中,比如开发环境、测试环境、生产环境。不同的环境可能需要不同的配置,针对这种情况,显然手动修改配置文件适应不同开发环境很不现实,这样我们就可以使用项目的多环境配置。

使用Profile进行多环境配置

使用Profile进行多环境配置命名必须是固定格式。

application-dev.properties
application-test.properties
application-prod.properties

如果想使用上述对应环境的配置文件,需要在全局配置文件里开启指定的配置文件即可。

有两种方式:

第一种:在控制台输入

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

第二种:在application.properties或者yaml中开启

spring.profiles.active=dev

  • 使用注解@Profile进行多环境配置,这里就不写了。

总结

主要记录了springboot的核心配置和相关注解,包括全局配置使用,配置文件属性值的注入、springboot自定义配置、多环境配置,这些都是需要我们掌握的基本技能。

【SpringBoot实战】核心配置和注解的更多相关文章

  1. Spring-Boot项目中配置redis注解缓存

    Spring-Boot项目中配置redis注解缓存 在pom中添加redis缓存支持依赖 <dependency> <groupId>org.springframework.b ...

  2. IntelliJ IDEA 2017版 SpringBoot的核心配置详解

    Spring Boot的核心   (1)Spring Boot的项目一般都会有*Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法.  (2)@Spri ...

  3. 千锋很火的SpringBoot实战开发教程视频

    springboot是什么? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...

  4. SpringBoot的核心注解和配置

    一.入口类和SpringBootApplication Spring Boot的项目一般都会有*Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法. @ ...

  5. SpringBoot 核心配置

    1. 入口类和 @SpringBootApplication Spring Boot的项目一般都会有*Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法 ...

  6. 小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战

    笔记 1.SpringBoot多环境配置介绍和项目实战(核心知识)     简介:SpringBoot介绍多环境配置和使用场景 1.不同环境使用不同配置         例如数据库配置,在开发的时候, ...

  7. Redis实战-详细配置-优雅的使用Redis注解/RedisTemplate

    1. 简介 当我们对redis的基本知识有一定的了解后,我们再通过实战的角度学习一下在SpringBoot环境下,如何优雅的使用redis. 我们通过使用SpringBoot内置的Redis注解(文章 ...

  8. SpringBoot实战之SpringBoot自动配置原理

    SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @Confi ...

  9. springboot用@Autowired和@PostConstruct注解把config配置读取到bean变成静态方法

    springboot用@Autowired和@PostConstruct注解把config配置读取到bean变成静态方法 @SpringBootApplication public class Sen ...

随机推荐

  1. 实用TCP协议(1):TCP 协议简介

    传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议.TCP 协议假设下层协议可以提供简单的不可靠数据报, 并在此基础 ...

  2. Qt:Qt资源系统

    学习自 Qt 资源系统(Qt Resource System) - 知乎 1.什么是Qt 资源系统 Qt资源系统是一种将图片.数据存储于二进制文件中的一套系统.这些图片.数据会被我们的程序使用,它们称 ...

  3. (转载)《Three easy pieces 》虚拟化部分整体介绍

    转载自知乎:https://zhuanlan.zhihu.com/p/37917910 一个程序在运行的时候发生了什么呢? 其实只是一些非常简单的事情:运行指令.处理器从内存中取出指令,译码然后执行. ...

  4. 在win10操作系统中pycharm启动时无法打开的解决方法

    ''' 当打开pycharm时报错 Error launching Pycharm Failed to load JVM DLL C:\Program Files\Jetbrains\Pycharm ...

  5. LeetCode-017-电话号码的字母组合

    电话号码的字母组合 题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.答案可以按 任意顺序 返回. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示 ...

  6. 前端工程化:使用 shelljs 生成 yapi 接口文件

    之前的文章介绍了使用 yapi-to-typescript (下文简称 ytt)生成接口类型定义文件,方便我们直接使用接口的请求和响应类型,能减少很多写接口类型的时间. 使用 yapi-to-type ...

  7. python之random.seed()函数

    Python--random.seed()用法 第一次接触random.seed(),可能理解的不是特别对,大家欢迎指错,整理自网络,侵权删除 概念 seed()是改变随机数生成器的种子,可以在调用其 ...

  8. 【笔记】封神榜游戏设计VR

    一.添加怪物(这个教程的鬼兵我可以用)1.设置怪物出生点.2.创建一个新脚本-CreateMonster,写好脚本之后放到3个传送门上.3.然后添加完成后,给三个添加Audio Source组件4.可 ...

  9. cmd 连接宝塔终端

  10. Laravel-手机短信验证码-阿里云

    1.composer require alibabacloud/client2.App\Service\AliyunSms.php <?php namespace App\Service; us ...