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

XML

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

java 复制代码
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

java 复制代码
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 复制代码
<?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读取

方式很多,获取文件流

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数据处理。
相关推荐
许彰午7 小时前
14_Java泛型完全指南
java·windows·python
智慧物业老杨7 小时前
司法绿色通道下的物业纠纷数智化解决方案——基于“三优先“机制的全流程技术落地实践
java·django
2601_961194027 小时前
2026初级会计实务公式总结大全|计算题公式手册PDF
java·spring·eclipse·pdf·tomcat·hibernate
做个文艺程序员7 小时前
第1篇:K8s 核心概念精讲:Pod、Deployment、Service 与 Namespace——Java 开发者快速上手指南
java·云原生·容器·kubernetes·容器编排
小欣加油10 小时前
leetcode3751 范围内总波动值I
java·数据结构·c++·算法·leetcode
代码中介商10 小时前
C++左值与右值:核心判断法则详解
开发语言·c++
闪电悠米10 小时前
黑马点评-Redisson-01_why_redisson
java·服务器·网络·数据库·缓存·wpf
星轨zb10 小时前
LangChain4j 集成 Spring Boot:会话记忆 NPE 的根源与 ChatMemoryProvider 正确配置
java·spring boot·后端·langchain4j
JAVA96510 小时前
JAVA面试-并发篇 05-并发包AQS队列实现原理是什么
java·开发语言·面试
JAVA面经实录91710 小时前
RocketMQ全套学习知识手册
java·kafka·rabbitmq·rocketmq