【Spring】配置文件的使用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 1. 什么是配置文件2. 为什么需要配置文件3. Java 应用常见的配置文件格式3.1 特殊说明4. *.properties4.1 properties 配置文件说明4.2 properties 基本语法4.3 注意5. *.yml5.1 yml 配置文件说明5.2 yml 基本语法6. 修改 Spring 配置的一些配置信息7. 在配置文件中配置对象8. 在 Bean 读取配置信息的三种方法8.1 使用 Spring 提供的 Environment 对象8.2 使用 @Value 注解8.3 使用注解 @ConfigurationProperties 将配

1. 什么是配置文件

配置文件是一种计算机文件,可以为一些计算机程序配置参数和初始设置。


2. 为什么需要配置文件

在我们平时写程序的时候,有些参数是经常改变的,而这种改变不是我们预知的。比如说我们开发了一个操作数据库的模块,在开发的时候我们连接本地的数据库那么IP ,数据库名称,表名称,数据库主机等信息是我们本地的,要使得这个操作数据的模块具有通用性,那么以上信息就不能写死在程序里。通常我们的做法是用配置文件来解决


3. Java 应用常见的配置文件格式

Java 中常用的有 properties 配置文件和 yml 配置文件

0.png


3.1 特殊说明

理论上讲 properties 可以和 yml 一起存在于一个项目当中,当 properties 和 yml 一起存在一个项 目中时,如果配置文件中出现了同样的配置,比如 properties 和 yml 中都配置了“server.port”, 那么这个时候会以 properties 中的配置为主,也就是 .properties 配置文件的优先级最高,但加载完 .properties 文件之后,也会加载 .yml 文件的配置信息。

虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。这就好像连锁店的服饰一样,不管是老款的服装还是新款的服装,一定要统一了才好看。


4. *.properties

4.1 properties 配置文件说明

properties 配置文件是最早期的配置文件格式,也是创建 Spring Boot 项目默认的配置文件。


4.2 properties 基本语法

properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如:

# 配置数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8 
spring.datasource.username=root
spring.datasource.password=root

4.3 注意

一般properties 配置文件默认字符集为 GBK 格式,所以不能出现中文


5. *.yml

5.1 yml 配置文件说明

yml 是 YMAL 是缩写,它的全称 Yet Another Markup Language 翻译成中文就是“另一种标记语言”。 yml 是一个可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。


5.2 yml 基本语法

yml 是树形结构的配置文件,它的基础语法是“key: value”,注意 key 和 value 之间使用英文冒汗加空 格的方式组成的,其中的空格不可省略。格式如下:


# yml 配置数据库
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/shujvku?characterEncoding=utf8
    username: root
    password: 123456

6. 修改 Spring 配置的一些配置信息

# 修改 Spring 默认 banner 是否显示
spring.main.banner-mode=false
# 修改 Spring 开始日志是否打印
spring.main.log-startup-info=off
# 修改 banner 样式
spring.banner.image.location=classpath:1.png
# true 打印完全日志
debug=false
# 打印日志的路径
logging.file.name=D:\\JAVA\\myapp.log
# 设置日志输出级别
# logging.level  +   包名,会影响包下所有的输出级别,直接是类名,就仅仅此类
logging.level.com.hsq.demo=debug

7. 在配置文件中配置对象

具体怎么拿出对象的属性值,在第 8 点中一并说明

hsq.name=hsq
hsq.age=20

8. 在 Bean 读取配置信息的三种方法


# 配置文件中的信息
hsq.name=hsq
hsq.age=20

8.1 使用 Spring 提供的 Environment 对象

使用 @Autowired 注解注入 Environment 对象


@Slf4j
@Component
public class ReadFromConfig1 {
    @Autowired
    public ReadFromConfig1(Environment environment) {
        String name = environment.getProperty("hsq.name");
        log.info("读取到的 hsq.name = " + name);
        String age = environment.getProperty("hsq.age");
        log.info("读取到的 age = " + age);
    }
}

1.png


8.2 使用 @Value 注解

@Slf4j
@Component
public class ReadFromConfig2 {
    @Autowired
    public ReadFromConfig2(
            @Value("${hsq.name}") String name,
            @Value("${hsq.age}") String age
    ) {
        log.info("读取到的 hsq.name = " + name);
        log.info("读取到的 age = " + age);
    }
}

2.png

8.3 使用注解 @ConfigurationProperties 将配置信息包装成对象

@Component
@ConfigurationProperties(prefix = "hsq")
public class HsqConfig {
    String name;
    String age;
    // setter 方法必须有,否则不会生效
    public void setAge(String age) {
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public String getName() {
        return name;
    }
}
@Slf4j
@Component
public class ReadFromConfig3 {
    @Autowired
    public ReadFromConfig3(HsqConfig hsqConfig) {
        log.info("读取到的 hsq.name = " + hsqConfig.getName());
        log.info("读取到的 age = " + hsqConfig.getAge());
    }
}

2.png


9. 使用配置文件配置 MySQL 数据库

9.1 将配置信息写入配置文件

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/java22_diaocha?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: root

9.2 读取配置信息并包装成对象

这里的 setter 方法由 lombok 中的 @Data 自动生成

@Component
@ConfigurationProperties(prefix = "spring.datasource")
@Data
public class MySQLConfig {
    String url;
    String username;
    String password;
}

9.3 将配置信息对象注册进 Spring 库

以方法注册的方式注册

@Slf4j
@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource(@Autowired MySQLConfig config) {
        MysqlDataSource dataSource = new MysqlDataSource();
        log.info("MySQL 配置如下:" + dataSource);
        dataSource.setURL(config.url);
        dataSource.setUser(config.username);
        dataSource.setPassword(config.password);
        return dataSource;
    }
}

9.4 写 SQL 操作数据库

@Slf4j
@SpringBootApplication
public class DemoApplication {
   @SneakyThrows
   public static void main(String[] args)  {
      ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
       // 从库中得到 dataSource 对象
      DataSource dataSource = context.getBean(DataSource.class);
      try (Connection c = dataSource.getConnection()) {
         String sql = "select uid, username, password from users";
         try (PreparedStatement ps = c.prepareStatement(sql)) {
            log.info("执行的 SQL = " + ps);
            try (ResultSet rs = ps.executeQuery()) {
               while (rs.next()) {
                  log.info("uid = {}, username = {}, password = {}",
                        rs.getInt("uid"),
                        rs.getString("username"),
                        rs.getString("password"));
               }
            }
         }
      }
   }
}

打印得到从库中查到的数据,说明配置成功


3.png


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
XML Java 数据库
【Spring】SpringBoot 配置文件
【Spring】SpringBoot 配置文件
|
6天前
|
安全 Java 数据库连接
《Spring Boot配置文件大揭秘:看懂 application.yaml 与 bootstrap.yaml 的不同》
《Spring Boot配置文件大揭秘:看懂 application.yaml 与 bootstrap.yaml 的不同》
161 0
|
8月前
|
Java 应用服务中间件 Maven
解析Spring Boot中的Profile:配置文件与代码的双重掌控
解析Spring Boot中的Profile:配置文件与代码的双重掌控
|
7月前
|
Java Nacos Spring
Nacos spring-cloud 版本没找到共享配置文件的说明,Nacos服务中共享,并且可以被多个应用获取和使用。这个在官网哪里有说明啊
Nacos spring-cloud 版本没找到共享配置文件的说明,Nacos服务中共享,并且可以被多个应用获取和使用。这个在官网哪里有说明啊
39 1
|
7月前
|
Java 测试技术 Spring
Spring入门&控制反转(或依赖注入)&AOP的关键概念& 多配置文件&与web集成(二)
Spring入门&控制反转(或依赖注入)&AOP的关键概念& 多配置文件&与web集成
|
8月前
|
XML Java 数据库连接
(精)SSM框架整合的配置文件(spring+spring MVC+mybatis)
(精)SSM框架整合的配置文件(spring+spring MVC+mybatis)
59 0
|
6天前
|
Java 数据库连接 API
【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
59 0
|
6天前
|
XML JavaScript Java
【JavaEE】Spring Boot - 配置文件
【JavaEE】Spring Boot - 配置文件
7 0
|
6天前
|
Java Shell 测试技术
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
41 0
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
|
6天前
|
Java Maven 数据库
Spring系列文章4:读取配置文件
Spring系列文章4:读取配置文件