SpringBoot是如何检测到yml文件里面的数据库信息的?

ok,开始:

首先springboot项目的源头是 @SpringBootApplication
而这个注解 是在这里插入图片描述这个@EnableAutoConfiguration会干什么事情呢?
看名字就知道了 “启用自动配置”;有一本书上是这样写的:它会去classpath下寻找路径META-INF/spring.factories 找到org.springframework.boot.autoconfigure.EnableAutoConfiguration的值,并将其封装到一个List中返回 然后去反射 实例化为@Configuration 注入到我们spring项目中的 IOC容器中;

我们去打开@EnableAutoConfiguration 发现他属于这个包:
package org.springframework.boot.autoconfigure。
这个包下又有个包:jdbc
点进去里面有有一个DataSourceAutoConfiguration.class类
这个类上面有一个@EnableConfigurationProperties(DataSourceProperties.class)
也就是依赖DataSourceProperties.class;
点进去这个DataSourceProperties 就可以看到一些认识的东西了:
在这里插入图片描述看到这个 我们就看到了spring.datasource 为什么我们一般在配置yml文件或者properties文件的时候 前面是以这个开头了。。。默认配置就是这样的。如果不自觉手动配置 必须设置成这样 也就是springboot最重要的一条:“约定大约配置”
在这里插入图片描述然后DataSourceProperties里面定义了这些 驱动名称 url username password;
打个断点进去 在这里插入图片描述发现这里获取到的url 就是 application.yml 或者application.properties里面定义的url了。

对于不喜欢看源码的人来说,嘿嘿就比如我:会有这样一个疑问??
“那就是你他妈怎么知道@ConfigurationProperties(prefix = “spring.datasource”)这个玩意就能找到application.yml 或者application.properties的?”

容我再百度一会

在Spring Boot应用中,如果你想要打印出YAML文件数据库连接的信息,你需要访问那些配置属性并将其打印出来。这通常是通过Java的反射API或者是Spring的Environment接口来完成的。以下是一个简单的例子,展示如何在启动应用时获取并打印`application.yml`中的`spring.datasource`配置: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.env.EnvironmentPostProcessor; import org.springframework.core.env.ConfigurableEnvironment; public class DatabaseConfigPrinter implements EnvironmentPostProcessor { @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { String dataSourceUrl = environment.getProperty("spring.datasource.url"); String username = environment.getProperty("spring.datasource.username"); String password = environment.getProperty("spring.datasource.password"); if (dataSourceUrl != null && !dataSourceUrl.isEmpty()) { System.out.println("Database URL: " + dataSourceUrl); System.out.println("Username: " + username); System.out.println("Password (not shown): " + "(redacted)"); // 如果需要,可以在这里处理密码或者其他敏感信息 } } @Override public Priority getPriority() { return Priority.HIGH; } } ``` 在这个例子中,`DatabaseConfigPrinter`实现了`EnvironmentPostProcessor`接口,这意味着它会在Spring Boot应用程序初始化环境变量之后被调用。然后我们直接从`environment`对象中获取数据库连接信息
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值