• 【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
    
    • 1
    • 2
    • 3
    • 4

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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

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

    hsq.name=hsq
    hsq.age=20
    
    • 1
    • 2

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

    # 配置文件中的信息
    hsq.name=hsq
    hsq.age=20
    
    • 1
    • 2
    • 3

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    请添加图片描述

    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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    请添加图片描述

    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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    @Slf4j
    @Component
    public class ReadFromConfig3 {
        @Autowired
    
        public ReadFromConfig3(HsqConfig hsqConfig) {
            log.info("读取到的 hsq.name = " + hsqConfig.getName());
            log.info("读取到的 age = " + hsqConfig.getAge());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    请添加图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

    @Component
    @ConfigurationProperties(prefix = "spring.datasource")
    @Data
    public class MySQLConfig {
        String url;
        String username;
        String password;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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"));
                   }
                }
             }
          }
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

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

    请添加图片描述

  • 相关阅读:
    svga动画安装和使用
    01 自然语言处理NLP介绍
    Hadoop——Hadoop优势、组成、大数据技术生态体系、系统框架图
    【LeetCode-困难题】239. 滑动窗口最大值
    天书夜读笔记——深入虚函数virtual
    ubuntu突然进不了图形界面解决方案
    Autowired注解与Resource注解的区别
    Tailwindcss Layout布局相关样式及实战案例,5万字长文,附完整源码和效果截图
    Kubernetes kafka系列 | k8s部署kafka+zookeepe集群(可外部通信)
    python print输出指定小数位数
  • 原文地址:https://blog.csdn.net/m0_56975154/article/details/127542985