spring自定义yml文件解析器

article/2025/8/30 20:18:54

spring自定义yml文件解析器

      • pom 引入依赖
      • yml 文件
      • 自定义yml文件解析的工厂 YmlPropertySourceFactory
      • JdbcConfig 配置类
      • spring 启动类
      • 测试
      • 结果

srping 配置自定yml解析器

以最简单的获取数据源的代码示例

整体文件结构如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cIz63hIh-1639215209850)(images/image-20211211172349838.png)]

pom 引入依赖

 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.6.RELEASE</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.22</version></dependency><!--导入yaml文件解析器坐标--><dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.23</version></dependency></dependencies>

yml 文件

jdbc:driver: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.33.128:33307/mysqlusername: rootpassword: 123456

自定义yml文件解析的工厂 YmlPropertySourceFactory

package base.support;import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;import java.io.IOException;
import java.util.Properties;
/*** 自定义yml文件解析的工厂*/
public class YmlPropertySourceFactory implements PropertySourceFactory {@Overridepublic PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {//1.创建yaml文件解析工厂YamlPropertiesFactoryBean factoryBean = new YamlPropertiesFactoryBean();//2.设置要解析的内容factoryBean.setResources(resource.getResource());//3.把资源解析成properties文件Properties properties = factoryBean.getObject();//4.返回spring提供的PropertySource对象return  (name != null ? new PropertiesPropertySource(name,properties): new PropertiesPropertySource(resource.getResource().getFilename(),properties));}
}

JdbcConfig 配置类

package config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;/*** JDBC的配置类*/
public class JdbcConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;@Bean(name="dataSource")public DataSource createDataSource(){System.out.println("获取配置信息: driver : "+ driver +  ",url :"+ url + ",username : "+ username + " ,password:"+password  );//1.创建Spring内置数据源DriverManagerDataSource dataSource = new DriverManagerDataSource();//2.给数据源填充属性dataSource.setDriverClassName(driver);dataSource.setUrl(url);dataSource.setUsername(username);dataSource.setPassword(password);//3.返回return dataSource;}
}

spring 启动类

package config;import base.support.YmlPropertySourceFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;/*** spring的配置类*/
@Configuration
@Import(JdbcConfig.class)
//@PropertySource("classpath:jdbc.xml")
//@PropertySource("classpath:jdbc.properties")
// factory 指定yml文件解析工厂
@PropertySource(value = "classpath:jdbc.yml",factory = YmlPropertySourceFactory.class)
public class SpringConfiguration {
}

测试

package com.itheima.test;import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import javax.sql.DataSource;
import java.sql.Connection;public class SpringPropertySourceTest{public static void main(String[] args) throws Exception{//1.创建容器AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext("config");//2.获取对象DataSource dataSource = ac.getBean("dataSource",DataSource.class);//3.获取连接Connection connection = dataSource.getConnection();System.out.println(connection.getMetaData());connection.close();}
}

结果

获取配置信息: driver : com.mysql.cj.jdbc.Driver,url :jdbc:mysql://192.168.33.128:33307/mysql,username : root ,password:123456
com.mysql.cj.jdbc.DatabaseMetaDataUsingInfoSchema@17d919b6Process finished with exit code 0

可以看到已经正确拿到yml配置文件的值,也获取到了数据连接


http://chatgpt.dhexx.cn/article/y0byHW1p.shtml

相关文章

yml文件变红

yml文件变红 目录 yml文件变红原因文件夹标记 原因 打开项目配置文件这样子&#xff0c;先是查看idea的modules&#xff0c;配置没问题。后刷新maven也没问题。 文件夹标记 原因是resources不是 Resources Root 文件夹&#xff0c;需要标记

yml文件报错

yml文件报错 1、YML文件测试是否由于格式tab键的原因启动失败的问题&#xff1a;yml测试网站 2、很多依赖在修改后需要重新加载maven依赖&#xff0c;如下图所示&#xff1a;3、重启项目发现问题解决&#xff01;

java springboot yml文件配置 多环境yml

如果是properties改用yml&#xff0c;直接新增一个 .yml &#xff0c;删除原 .properties &#xff0c;系统会自动扫描 application.properties 和 application.yml文件&#xff08;如果同时存在两个文件&#xff0c;则会优先使用.properties文件&#xff1f;&#xff09;。 注…

yml文件的使用

1.定义各种数据 #字符串 country: beijing #数值 port: 8080 #bolean party: true birthday: 1949-10-01 #对象 user:name: itcastage: 16 #集合 likes:- game- music likes2: [game,music] #对象集合 users:- name: zhangsanage: 18- name: lisiage: 18 users2: [{name:zhang…

yml文件使用

yml文件使用 yml文件使用yml文件格式使用使用方式一&#xff08;ConfigurationProperties&#xff09;使用方式二&#xff08;Value&#xff09; JSR303数据校验总结 yml文件使用 yml文件是springboot推荐使用的配置文件格式&#xff0c;它相较于propertites格式文件更强大&am…

SpringBoot:yml文件详解

目录 获取数据第三种方式 多环境配置 日志打印 过滤器与拦截器的配置 过滤器配置: 拦截器的配置 全局异常处理器 获取数据第三种方式 数据可能是一个对象形式, 不需要一个一个获取, 定义一个对应的类, 要求属性与yml的数据的二级属性名一样, 使用springboot提供的注解Co…

qq图

最近在做关联分析的时候&#xff0c;研究了一下QQ图的绘制方法 QQ图的全称是Quantile-Quantile plot图&#xff0c;主要用于去判断某一系列的值是否符合正态分布&#xff0c;横坐标是理论值&#xff0c;纵坐标是实际值&#xff0c;当纵坐标和横坐标的坐标值相同的时候&#xf…

如何关掉 PC QQ 烦人的 QQ 频道

QQ 频道被 QQ 强制捆绑, 很多人用不到, 而且还不能完全免打扰, 点击消息的时候, QQ 频道就会跳出来, 非常的烦人. 步骤 关闭掉 QQ. 然后找到 QQ 频道的本体目录: 使用 %LOCALAPPDATA%\Tencent 可以快速跳转到这里 打开文件夹属性, 转到 “安全” 选项卡, 然后点击 “高级” …

python 给QQ好友定时发送消息

python 给QQ好友定时发送消息 前言初衷代码效果后记 前言 在小编的上一篇python文章中提到了关于微信或者QQ的消息“轰炸”&#xff08;其实我是想你也去看看&#xff0c;23333 [狗头保命]&#xff09;&#xff0c;那是简单版本&#xff0c;今天我要讲的是&#xff0c;发送消息…

QQ再次被大规模盗号

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; QQ被大规模盗号已经不是一次两次了&#xff0c;感觉腾讯好像没有太好的解决办法。 昨天(周日)QQ又出下了大规模盗号情况&#xff1a;大量用户反馈称遇到了自己或是身边的朋友、家人、同事等被盗号…

SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊)

SpringBoot整合定时任务和邮件发送&#xff08;邮箱 信息轰炸 整蛊&#xff09; 目录 SpringBoot整合定时任务和邮件发送&#xff08;邮箱 信息轰炸 整蛊&#xff09;1.概述2.最佳实践2.1创建项目引入依赖(mail)2.2 修改yml配置文件2.3 启动类添加EnableScheduling注解2.4 执行…

让对方qq崩溃的代码2020_为什么都瞧不起QQ邮箱?

“我真他妈受够公路商店了&#xff01;” 某部门的某大哥抱怨自己一天到晚被办公室的烟熏的眼睛都睁不开&#xff0c;无论如何都要跳槽到一个起码能供应自然氧气的公司。 但当我从背后偷偷瞄了一眼他的电脑&#xff0c;发现他认认真真的用QQ邮箱起草了一份简历&#xff0c;我就…

QQ防撤回

QQ防撤回 版本截图 收集信息 这一步非常关键,因为在分析时,思路如果不对,基本上是分析不出来的,这里我们从敏感字符串开始。先搜一搜撤销的英文单词 如图知道了好几个单词,锁定关键字一个一个使用Notepad++的搜索功能,再文件中搜索。 查看搜索结果,发现又两个和消…

揭秘:QQ盗号背后的产业链,惊人的暴利!

最好的欺骗手段&#xff0c;莫过于让其信任的人、事、物蒙蔽判断&#xff0c;待到入圈之时&#xff0c;便是案板上的肉。 你所看到的、想到的、听到的、闻到的、摸到的&#xff0c;是否是别人有意让你看到、听到、闻到、摸到、想到&#xff1f; 人最大的错误就是看所看、想所…

QQ群怎么快速封群,如何举报骗子QQ群可以使之封群?

QQ群是个开放式的交流平台&#xff0c;充斥着各色各样的人和行业&#xff0c;不少人都被一些表面光鲜亮丽&#xff0c;背地乌烟瘴气的QQ群吸引过&#xff0c;直到出问题的时候才知道为时已晚。 以目前腾讯的审核力度来看&#xff0c;正常举报&#xff0c;封群是极其困难的&…

不再害怕打字慢(python信息轰炸)

不知道各位小伙伴有没有这样的烦恼&#xff1a;在和自己的朋友聊天的时候&#xff0c;自己无论是使用九键还是26键&#xff0c;都没有他们打字快&#xff1b;双方进行信息轰炸的时候&#xff0c;更没有他们快了。下面这篇文章将会解决这个烦恼。话不多说&#xff0c;直接上才艺…

【用python写一个简易的消息轰炸代码】

用python写一个简易的消息轰炸代码 前言一、思路讲解二、使用步骤1.引入库2.完整代码 总结 前言 有没有在qq&#xff0c;微信想用一句话不停怼一个人&#xff0c;这篇文章教你在回车能发送消息的一系列软件中&#xff0c;快速多次发送你想发的话。 一、思路讲解 1.定位输入框…

qq消息连发脚本

这是我闲的没事&#xff0c;在网上学的&#xff0c;虽然功能比较单一&#xff0c;只能重复发一个信息&#xff0c;但闲得无聊可以抖一抖好你的基友【doge】 代码如下&#xff1a; #include<iostream> #include<windows.h> using namespace std;int main() {int t…

基于python的消息轰炸

首先我们需要安装pyautogui调用库 在命令提示符中输入pip install pyautogui 然后我们需要得到需要轰炸的对话框的坐标 在pycharm中输入以下代码 import pyautogui# 导入库 print(pyautogui.position()) # 显示鼠标的x,y位置 打开对话框 运行 鼠标放在要轰炸的对话框上 记…

屏幕控制实现消息发送以及轰炸

最近突然想做一个QQ消息发送实现&#xff0c;查找了很多资料找不到相应的库&#xff0c;最后在一个博客中看到屏幕控制。 下面就是通过屏幕控制实现的消息发送即轰炸 import pyautogui # 鼠标 import pyperclip # 粘贴板 import time # 延时# words input(请输入轰炸的内容…