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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
1月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
271 3
|
8月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2121 1
|
10月前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
2558 17
Spring Boot 两种部署到服务器的方式
|
8月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
351 0
|
10月前
|
Java 测试技术 应用服务中间件
Spring Boot 配置文件总结
Spring Boot 提供全局配置文件 `application.properties` 和 `application.yml`,用于修改自动配置的默认值。前者使用键值对配置,后者使用缩进和冒号。不同环境(开发、测试、生产)可切换配置文件,通过 `spring.profiles.active` 指定。例如,开发环境端口为4790,测试环境为4791,生产环境为4792。配置示例展示了属性、List、Map定义及引用方法。
344 14
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
11月前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
监控 IDE Java
如何在无需重新启动服务器的情况下在 Spring Boot 上重新加载我的更改?
如何在无需重新启动服务器的情况下在 Spring Boot 上重新加载我的更改?
1143 8
|
Java 数据库连接 数据库
springboot启动配置文件-bootstrap.yml常用基本配置
以上是一些常用的基本配置项,在实际应用中可能会根据需求有所变化。通过合理配置 `bootstrap.yml`文件,可以确保应用程序在启动阶段加载正确的配置,并顺利启动运行。
1579 2
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
714 2
下一篇
oss云网关配置