【Spring】配置文件的使用

本篇文章主要介绍 Spring 配置文件的使用,主要讲解 properties 和 yml 两种配置文件。写入配置文件的配置信息可在Spring 官方配置查到。烦请路过的大佬给小的留一个赞🤩


1. 什么是配置文件

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

2. 为什么需要配置文件

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

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

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

请添加图片描述

3.1 特殊说明

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

请添加图片描述

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);
    }
}

请添加图片描述

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());
    }
}

请添加图片描述

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"));
               }
            }
         }
      }
   }
}

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

请添加图片描述

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hssq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值