Spring Boot 系列(2) 配置文件的加载

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Spring Boot 系列(2) 配置文件的加载

在Spring Boot 里面含有两种常用的配置文件,一种是传统的.properties,另外一种就是.yml文件,这两种文件的配置常用于实际开发当中,但是本人更为推荐使用yml文件的配置,因为它的配置比较简便,可以省去很多不必要重复的代码。


接下来我们用几个实例来进行比较:(我用的IDE是idea2017)


实例一:使用.properties文件来给相应的配置类注入属性内容


首先我们需要在项目的资源区建立好相应的配置文件


网络异常,图片无法展示
|


然后往配置文件里面写下如下内容:


people.id=1005
people.name=idea
people.password=123456
复制代码


接着再建立model实例类:(在这里我用了一个叫做lombok的jar,省去了那些繁琐的gett和sett方法以及构造函数和tostring方法)


package com.example.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix = "people")
public class People {
    private int id;
    private String name;
    private String password;
}
复制代码


在这里解释一下,@Data,@Builder,@NoArgsConstructor,@AllArgsConstructor 四个注解都是来自于lombok这个jar里面的,它们可以用于省去一些不必要的方法,从而简化代码量。


主要还是@ConfigurationProperties(prefix = “people”)这一句,这一注解是指将People类看做了一个专门用于配置的类,当Spring Boot运行的这个类的时候,会去查找相应的people.id,people.name,people.password这些属性的内容,然后将它们赋值到这个people类里面去。假若注解里面的prefix和properties里面的前半段people不符合的话,就没法注入成功。


接下来便是验证:


控制器部分


package com.example.controller;
import com.example.model.People;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableConfigurationProperties(People.class)
@RequestMapping("/PeopleAction")
public class PeopleAction {
    @Autowired
    private People people;
    @RequestMapping("/peopleIndex")
    public People userIndex(){
        return  people;
    }
}
复制代码


控制器里面的@EnableConfigurationProperties(People.class)是指自动加载配置类People,然后通过 @Autowired申明,将相应的People通过SpringBoot这个容器来进行注入。


最后便是函数的入口:


package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * Created by Administrator on 17/08/23.
 */
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class,args);
    }
}
复制代码


输入浏览器url得出结果:


网络异常,图片无法展示
|


实例二:使用.yml文件来给相应的配置类注入属性内容


yml文件进行属性的配置比一般的properties的配置要好用许多,原因是它能够省去很多重复性的代码。


以下便是yml配置的案例:


mysql:
   drive: com.mysql.jdbc.Driver
   url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8
   user: root
   password: root
复制代码


yml文件里面编写的内容有个特点,它会根据用户所输入的缩进来确定父子级别。


然后便是一个mysql的jdbc访问类:(同样还是使用了lombok这个jar,省去了gett和sett)


package com.example.config;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix = "mysql")
public class MysqlConn {
    private String url;
    private String drive;
    private String user;
    private String password;
    private Connection conn;
    public Connection getConnection() throws SQLException, ClassNotFoundException {
        Class.forName(drive);
        conn=DriverManager.getConnection(url,user,password);
        return conn;
    }
}
复制代码


控制器类:(已经在数据库里面设置了一张user表,并且插入了相关数据进行模拟测试了)


package com.example.controller;
import com.example.config.MysqlConn;
import com.example.model.People;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
@RestController
@EnableConfigurationProperties(MysqlConn.class)
@RequestMapping("/MysqlAction")
public class MysqlAction {
    @Autowired
    private MysqlConn mysqlConn;
    private Connection connection;
    @RequestMapping(value = "/getConnection")
    public MysqlConn getConnection(){
        return mysqlConn;
    }
    @RequestMapping(value = "/getConnection02")
    public String showUserTables() throws SQLException, ClassNotFoundException {
        connection=mysqlConn.getConnection();
        Statement statement=connection.createStatement();
        ResultSet resultSet=statement.executeQuery("SELECT * FROM USER ");
        resultSet.last();
        int total=resultSet.getRow();
        resultSet.first();
        for(int i=0;i<total;i++)
        {
            System.out.println(resultSet.getString("id"));
            System.out.println(resultSet.getString("username"));
            System.out.println(resultSet.getString("password"));
            resultSet.next();
        }
        return "this is showUserTables";
    }
}
复制代码


访问成功!


网络异常,图片无法展示
|


控制台输出相应数据:


1
idea
123456
2
利纳斯
75624
复制代码


实例3 :灵活使用yml文件加载相应属性


上边的两种实例主要都是通过@EnableConfigurationProperties去自动将整个类看做一个配置类进行加载属性的,但是有的时候,我们没有必要将整个类进行属性的预加载。


例如说我们之前写的PeopleAction控制器里面,假若需要多添加一个字段,peopleMother


package com.example.controller;
import com.example.model.People;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableConfigurationProperties(People.class)
@RequestMapping("/PeopleAction")
public class PeopleAction {
    @Autowired
    private People people;
    @Value("${people.peopleMother}")
    private String peopleMother;
    @RequestMapping("/peopleIndex")
    public People userIndex(){
        return  people;
    }
    @RequestMapping("/peopleMother")
    public String peopleMother(){
        return peopleMother;
    }
}
复制代码


同样我们在.yml文件里面设置好相应属性:


people:
    peopleMother: Tim
复制代码


此时浏览器输入url即可看见:


网络异常,图片无法展示
|


实例四 从配置文件里读取map或者list属性以及校验


一般在配置文件里面只要准守相应的语法即可:


listParam:
    - aaa
    - bbb
    - ccc
  mapParam:
    key1: vlaue1
    key2: vlaue2
    key3: vlaue3
复制代码


然后在bean里面可以自动赋值给相应类型和名称对应的属性。


private List<String> listParam;
  private Map<String ,String> mapParam;
复制代码


当然有些朋友可能会这么来写list集合在yml文件里面:


listvalue: aa,bb,cc,dd
复制代码


这个时候想要在后台获取到相应的内容就要这么来写:


@Value("#{'${listvalue}'.split(',')}")
复制代码


当在开启服务的时候需要进行校验,只需要在相应属性的上边添加以下注解即可:


@NotNull


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
84 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
22天前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
5天前
|
Java 数据库连接 数据库
springboot启动配置文件-bootstrap.yml常用基本配置
以上是一些常用的基本配置项,在实际应用中可能会根据需求有所变化。通过合理配置 `bootstrap.yml`文件,可以确保应用程序在启动阶段加载正确的配置,并顺利启动运行。
12 2
|
5天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
17 2
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
53 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
16天前
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
43 3
|
1月前
|
架构师 Java 开发者
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
在40岁老架构师尼恩的读者交流群中,近期多位读者成功获得了知名互联网企业的面试机会,如得物、阿里、滴滴等。然而,面对“Spring Boot自动装配机制”等核心面试题,部分读者因准备不足而未能顺利通过。为此,尼恩团队将系统化梳理和总结这一主题,帮助大家全面提升技术水平,让面试官“爱到不能自已”。
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
|
1月前
|
Java 测试技术 Spring
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
这篇文章介绍了Spring Boot中配置文件的语法、如何读取配置文件以及如何通过静态工具类读取配置文件。
46 0
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
|
1月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
58 2
|
2月前
|
XML 存储 Java
spring源码刨析-spring-beans(内部核心组件,beanDefinition加载过程)
spring源码刨析-spring-beans(内部核心组件,beanDefinition加载过程)