【Spring】配置文件的使用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
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


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
Java Spring
Spring boot 运行服务jar外配置配置文件方式总结
Spring boot 运行服务jar外配置配置文件方式总结
875 0
|
29天前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
73 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
13天前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
25天前
|
Java 测试技术 Spring
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
这篇文章介绍了Spring Boot中配置文件的语法、如何读取配置文件以及如何通过静态工具类读取配置文件。
34 0
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
|
2月前
|
消息中间件 NoSQL 安全
(转)Spring Boot加载 不同位置的 application.properties配置文件顺序规则
这篇文章介绍了Spring Boot加载配置文件的顺序规则,包括不同位置的application.properties文件的加载优先级,以及如何通过命令行参数或环境变量来指定配置文件的名称和位置。
|
3月前
|
Java Spring 传感器
AI 浪潮席卷,Spring 框架配置文件管理与环境感知,为软件稳定护航,你还在等什么?
【8月更文挑战第31天】在软件开发中,配置文件管理至关重要。Spring框架提供强大支持,便于应对不同环境需求,如电商项目的开发、测试与生产环境。它支持多种格式的配置文件(如properties和YAML),并能根据环境加载不同配置,如数据库连接信息。通过`@Profile`注解可指定特定环境下的配置生效,同时支持通过命令行参数或环境变量覆盖配置值,确保应用稳定性和可靠性。
59 0
|
3月前
|
XML Java 数据库连接
深入解析 Spring 配置文件:从基础到高级
【8月更文挑战第3天】Spring配置文件是构建与管理Spring应用的核心,它涵盖了从基础到高级的各种配置技巧。基础配置采用`.xml`格式定义Bean及其依赖;中级配置包括设置Bean作用域及引入属性文件;高级配置则涉及AOP、事务管理和与其他框架的整合。熟练掌握这些配置能帮助开发者构建出更为灵活且易维护的应用系统。
|
4月前
|
存储 安全 Java
Spring Boot中的配置文件加密
Spring Boot中的配置文件加密
|
5月前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
53 1
|
6月前
|
Java 容器 Spring
Spring的加载配置文件、容器和获取bean的方式
Spring的加载配置文件、容器和获取bean的方式
51 3
Spring的加载配置文件、容器和获取bean的方式