当前位置: 首页 > news >正文

java配置文件解析yml/xml/properties文件

XML

以mybatis.xml:获取所有Environment中的数据库并连接session为例

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.*;public static Map<String, SqlSession> openSessionOther(String resource){Map<String, SqlSession> sessionMap = new HashMap<>();try {InputStream inputStream = Resources.getResourceAsStream(resource);File configFile = new File(resource);DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();Document doc = dBuilder.parse(inputStream);doc.getDocumentElement().normalize();NodeList nList = doc.getElementsByTagName("environment");for (int temp = 1; temp < nList.getLength(); temp++) {Node nNode = nList.item(temp);if (nNode.getNodeType() == Node.ELEMENT_NODE) {Element eElement = (Element) nNode;SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource), eElement.getAttribute("id"));sessionMap.put(eElement.getAttribute("id"), factory.openSession());log.debug("Environment id : " + eElement.getAttribute("id"));}}} catch (IOException| ParserConfigurationException | SAXException e) {e.printStackTrace();log.error("其他数据库连接异常!!!");throw new ExceptionInInitializerError(e);}return sessionMap;}

properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

1.properties文件mybatis数据库配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--配置--><properties resource="jdbc.properties"><!--properties属性--><property name="database.driver" value="com.mysql.jdbc.Driver"/> <property name="database.url" value="jdbc:mysql://localhost:3306/chapter4"/><property name="database.username" value="root"/> <property name="database.password" value="123456"/> </properties><typeAliases><!-- 别名 --><typeAlias alias="Student" type="domain.Student"/> </typeAliases><!-- 数据库环境 --><environments default="development"><!--配置环境--><environment id="development"><!--环境变量--><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments>
<!--映射文件--><mappers><package name="com.learn.ssm.chapter4.mapper" /></mappers>
</configuration>

2.java读取

方式很多,获取文件流

public void readProperties1() throws IOException {//不加/会从当前包进行寻找,加上/会从src开始找InputStream inputStream = this.getClass().getResourceAsStream("jdbc.properties");Properties properties=new Properties();properties.load(inputStream);System.out.println("jdbc.driver="+properties.getProperty("jdbc.driver"));System.out.println("jdbc.url="+properties.getProperty("jdbc.url"));System.out.println("jdbc.username="+properties.getProperty("jdbc.username"));System.out.println("jdbc.password="+properties.getProperty("jdbc.password"));
}// import org.apache.ibatis.io.Resources;
public static void main(String[] args) {try {Properties properties = new Properties(Resources.getResourceAsProperties(""));} catch (IOException e) {e.printStackTrace();}}

YML解析

SnakeYAML
  • 优点:功能强大、灵活的API、广泛使用。
  • 缺点:相对复杂,需要处理更多的细节。

Jackson Dataformat YAML
  • 优点:与JSON处理库相同的API、广泛使用、与Jackson生态系统集成。
  • 缺点:相对复杂,需要在Jackson库的基础上进行配置和使用。
YAMLBeans
  • 优点:轻量级、简单易用。
  • 缺点:相对功能较少,适用于简单的YAML数据处理。

相关文章:

  • 成绩发布小程序哪个好用?
  • 【Word】调整列表符号与后续文本的间距
  • 【Linux】常见命令:fping的介绍和用法举例
  • 线程思维导图
  • 【JS重点知识02】栈、堆与数据类型 关系
  • 【前端视野下的数据库概念探秘】——信息化人员必备知识面试宝典:解码“视图”与“游标”
  • Ollama+OpenWebUI+Phi3本地大模型入门
  • 安卓手机在开发者模式下 打开wifi调试功能的相关 adb 命令
  • vue canvas绘制信令图二、
  • Crosslink-NX器件应用连载(10): 图像输入并通过HDMI输出
  • 前端面试问题:子组件的某一个方法调用执行逻辑由父组件的属性状态变化来决定
  • .vimrc 配置项
  • Golang反射
  • Android Notes
  • ORA-08189: 因为未启用行移动功能, 不能闪回表问题
  • python3.6+scrapy+mysql 爬虫实战
  • 【EOS】Cleos基础
  • Apache Zeppelin在Apache Trafodion上的可视化
  • cookie和session
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • ES6之路之模块详解
  • IDEA 插件开发入门教程
  • JavaScript-Array类型
  • Java-详解HashMap
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Python进阶细节
  • 人脸识别最新开发经验demo
  • 如何用vue打造一个移动端音乐播放器
  • 问题之ssh中Host key verification failed的解决
  • 携程小程序初体验
  • 字符串匹配基础上
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​Python 3 新特性:类型注解
  • #QT(一种朴素的计算器实现方法)
  • #Ubuntu(修改root信息)
  • ( 10 )MySQL中的外键
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4.10~4.16)
  • (AngularJS)Angular 控制器之间通信初探
  • (LeetCode 49)Anagrams
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (PADS学习)第二章:原理图绘制 第一部分
  • (undone) MIT6.824 Lecture1 笔记
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)Linux+Windows下安装ffmpeg
  • (一)基于IDEA的JAVA基础10
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】