SpringBoot配置文件

本文详细介绍了SpringBoot中的配置文件,包括properties和yml两种格式的特性与区别,如键值对形式、数据类型的配置以及如何读取配置文件。通过Environment、@Value和@ConfigurationProperties三种方式演示了配置文件的读取方法,并给出了JDBC配置的实例。此外,还展示了如何将配置文件内容映射到自定义对象并应用于实际应用中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


提示:以下是本篇文章正文内容,Java系列学习将会持续更新

1. 什么是配置文件?

整个项目中所有重要的数据都是在配置文件中配置的,比如:

  • 数据库的连接信息(包含用户名和密码的设置);
  • 项目的启动端口;
  • 第三方系统的调用秘钥等信息;
  • 用于发现和定位问题的普通日志和异常日志等。

Spring Boot 配置文件主要分为以下两种格式:一般在 resources 包下

  • application.properties
  • application.yml

说明

  • properties是以key=value的形式配置的键值对类型配置文件,而yml是以key: value的形式配置的键值对类型配置文件;

  • properties是早期且系统默认的配置文件格式,但配置存在一定的冗余数据,而yml可以更好的解决数据冗余问题;

  • yml通用性更好,支持多语言,支持更多的数据类型;

  • 两种格式的文件可以同时存在于一个项目中,两者可以同时加载。但是.properties文件优先级高,当对同一数据做出不同不同配置时,会覆盖.yml文件。而且也不建议同时写两个文件。

回到目录…

2. properties 配置文件说明

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

# 配置项目端口号
server.port=8080
# 配置数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456

回到目录…

3. yml 配置文件说明

3-1 yml基础语法

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

spring:
  main:
    # 关闭 Spring 默认的 banner 显示
    banner-mode: off
    # 关闭启动日志打印
    log-startup-info: false
    
  banner:
    image:
      # 让 banner 显示某张图的字符形式
      location: classpath:hill.png
      
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/java22_diaocha?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456

# 显示更详细的调试信息 默认是 false
debug: true

logging:
  file:
    # 使用 YAML 格式时,可以正常使用中文。YAML 下不用再做 \ 的转义了
    name: F:\IDEA Project volume\03_JavaEE\day4_配置文件
    
  # 设置日志输出级别
  level:
    # 如果是包名,则这个包下的所有类(孩子 + 子孙)都遵守这个输出级别
    com.spring.day4: info
    # 如果是类名,则只有这个类遵守这个输出级别
    com.spring.day4.Demo2: debug
    
  pattern:
    # 控制台的日志格式(只输出消息本身)
    # 中间有 YAML 的特殊字符,用单引号引起来
    console: '%clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n'

回到目录…

3-2 yml进阶: 配置数据类型

# 字符串
string.value: Hello

# 布尔值,true或false
boolean.value: true

# 整数
int.value: 10

# Null,~代表null
null.value: ~

3-3 yml进阶: 配置对象

student:
  id: 1
  name: Java
  age: 18

或者,行内写法:

student: {id: 1,name: Java,age: 18}

3-1 yml进阶: 配置集合

dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

或者,行内写法:

dbtypes: {name: [mysql,sqlserver,db2]}

回到目录…

4. 读取配置文件

application.yml 自定义配置项:

# 自定义对象:
wangshaoyu:
  name: 王少宇
  age: 20
  address: 中国

SpringBoot提供3种方式读取配置项:

  1. 使用 Spring 提供的 Environment 类
    String name = environment.getProperty("wangshaoyu.name");
  2. 使用 @Value 注解,直接让 Spring 注入
    @Value("${wangshaoyu.name}") String name;
  3. @ConfigurationProperties 注解把一组配置项,包装成一个对象
    @ConfigurationProperties(prefix = "wangshaoyu")
    setter()方法 + getter() 方法

4-1 Environment

Environment是用来读取应用程序运行时的环境变量的类,可以通过key-value的方式读取配置文件和系统环境变量,命令行输入参数,系统属性等,具体如下:

@Slf4j
@Component
public class ReadFromConfig1 {
	// 将 Spring 下的 Environment 对象注入
    @Autowired
    public ReadFromConfig1(Environment environment) {
    	// getProperty("") 指向需要的value对应的key值
        String name = environment.getProperty("wangshaoyu.name");
        log.info("读取到的 wangshaoyu.name = " + name);

        int age = environment.getProperty("wangshaoyu.age");
        log.info("读取到的 wangshaoyu.age = " + age);

        String address = environment.getProperty("wangshaoyu.address");
        log.info("读取到的 wangshaoyu.address = " + address);
    }
}

4-2 @Value

如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使用“${}”的格式读取,如下代码所示:

@Slf4j
@Component
public class ReadFromConfig2 {

    public ReadFromConfig2(
            // 一定要使用 Spring 下的那个 @Value 注解
            @Value("${wangshaoyu.name}") String name,
            @Value("${wangshaoyu.age}") int age,
            @Value("${wangshaoyu.address}") String address) {
        log.info("姓名: " + name);
        log.info("年龄: " + age);
        log.info("地址: " + address);
    }
}

4-3 @ConfigurationProperties

使用@ConfigurationProperties首先建立配置文件与对象的映射关系,然后在控制器方法中使用@Autowired注解将对象注入。具体如下:

1.定义配置类 :需要将该类注册到 Spring 中

// 使用 @Component 注册到 Spring 中
@Component
// prefix 指向配置属性的前置项
@ConfigurationProperties(prefix = "wangshaoyu")
public class WangshaoyuConfig {

    private String name;
    private String age;
    private String address;

    // setter 方法是必须的,否则不会生效,即使属性是用 public 修饰的
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setAddress(String address) {
        this.address = address;
    }

	// 为了能访问到私有属性,再写个 getter 方法
    public String getName() {
        return name;
    }
	public int getAge() {
        return age;
    }
    public String getAddress() {
        return address;
    }
}

2.使用配置类

@Slf4j
@Component
public class ReadFromConfig3 {
	// 将配置文件类注入
    @Autowired
    public ReadFromConfig3(WangshaoyuConfig config) {
        log.info("读取到的 wangshaoyu.name = " + config.getName());
        log.info("读取到的 wangshaoyu.age = " + config.getAge());
        log.info("读取到的 wangshaoyu.address = " + config.getAddress());
    }
}

回到目录…

5. 应用 - JDBC

5-1 application.yml

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

5-2 MySQLConfig.java

将一组 datasource 配置项,包装成一个对象

@Component
@ConfigurationProperties(prefix = "spring.datasource")
@Data // 自动构造 setter + getter
public class MySQLConfig {
    private String url;
    private String username;
    private String password;
}

5-3 AppConfig.java

利用配置对象生成 DataSource 对象

@Slf4j
@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource(@Autowired MySQLConfig config) {
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setUrl(config.getUrl());
        dataSource.setUser(config.getUsername());
        dataSource.setPassword(config.getPassword());

        return dataSource;
    }
}

5-4 DemoApplication.java

@Slf4j
@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) throws SQLException {
		ApplicationContext context = SpringApplication.run(DemoApplication.class, args);

		// 依赖注入,从Spring 中获取 DataSource 对象
		DataSource dataSource = context.getBean(DataSource.class);
		// 获取 Connection 对象
		try (Connection c = dataSource.getConnection()) {
			String sql = "select uid, username, password from users order by uid limit 5";
			try (PreparedStatement ps = c.prepareStatement(sql)) {
				try (ResultSet rs = ps.executeQuery()) {
					while (rs.next()) {
						log.info("uid = {}, username = {}, password = {}",
								rs.getInt("uid"),
								rs.getString("username"),
								rs.getString("password"));
					}
				}
			}
		}
	}

}

回到目录…
在这里插入图片描述


总结:
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是SpringBoot配置文件的学习,认识了两种格式的配置文件的写法,以及读取配置文件的三种方法。之后的学习内容将持续更新!!!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只咸鱼。。

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

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

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

打赏作者

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

抵扣说明:

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

余额充值