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数据处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker|漏洞】Docker api未授权导致rce

一、漏洞描述 扫描出http://ip地址:4243漏洞&#xff0c;该漏洞可通过Docker pai未授权访问可以直接执行命令&#xff0c;获取服务器权限。 二、解决方案 禁用Docker api远程访问功能&#xff0c;或者通过安全授权等方式限制其使用权限。升级duoker至最新版本。 三、漏洞排查…

一款220V降12V恒压芯片电路原理图WT5114

一款220V降12V恒压芯片电路原理图WT5114&#xff0c;电路图简示如下&#xff1a; 一款220V降12V恒压芯片线路图WT5114 WT5114是一款高性能、高精度、低成本的PWM电源开关&#xff0c;适用于非隔离降压和反激式应用。它集成了专用电流模式PWM控制器&#xff08;采用SOP8封装的高…

2.8万字总结:金融核心系统数据库升级路径与场景实践

OceanBase CEO 杨冰 谈及数字化转型&#xff0c;如果说过去还只是头部金融机构带动效应下的“选择题”。那么现在&#xff0c;我相信数字化转型已经成为不论大、中、小型金融机构的“必答题”。 本文为OceanBase最新发布的《万字总结&#xff1a;金融核心系统数据库升级路径…

ubuntu安全加固

知识背景&#xff1a; 项目背景&#xff1a; 常用命令&#xff1a; useradd: adduser: getent passwd: getent group: id username: adduser newname sudo: 修改shell为/bin/bash 新用户默认为/bin/sh&#xff0c;可以通过echo $SHELL查询&#xff0c;默认不能使用TAB…

QT加载CAD文件(二)LibreCAD源码编译

一、LibreCAD LibreCAD是一个开源软件&#xff0c;不用破解激活&#xff0c;可以打开编辑DXF格式的文档&#xff0c;软件大小只有二十多M&#xff0c;对于一些比较简单的图纸还是可以胜任的。本文主要讲该软件源码编译。如果了解软件的基本使用可以参考https://blog.csdn.net/…

Vulnhub靶机 whowantsobeking :1 打靶 渗透详细过程(萌新)

Vulnhub靶机搭建配置 先搭建vulnhub靶机&#xff1a;https://www.vulnhub.com/entry/who-wants-to-be-king-1,610/ 下载镜像之后whowantsobeking.ova后&#xff0c;用VMware Workstation Pro打开依次点击文件-打开&#xff0c;选择我们刚才下载的ova文件打开&#xff0c;修改…

【小米手环7】表盘制作指南

2024年了还有人用小米手环7么&#xff1f; 目录 表盘.bin文件情况介绍表盘文件修改/制作教程1、表盘.bin文件组成介绍2、表盘.bin文件获取3、制作表盘的必备工具4、表盘.bin文件修改step 1 模拟器设置step 2 修改app.jsonstep 3 修改index.jsstep 4 更新.bin文件 参考文献 表盘…

全网首发!精选32个最新计算机毕设实战项目(附源码),拿走就用!

Hi 大家好&#xff0c;马上毕业季又要开始了&#xff0c;陆陆续续又要准备毕业设计了&#xff0c;有些学生轻而易举就搞定了&#xff0c;有些学生压根没有思路怎么做&#xff0c;可能是因为技术问题&#xff0c;也可能是因为经验问题。 计算机毕业相关的设计最近几年类型比较多…

为什么Facebook Marketplace无法使用?如何解决?

Facebook Marketplace是一个允许用户买卖商品的平台&#xff0c;由于其在Facebook内的便捷性&#xff0c;它逐渐成为了一个受欢迎的在线交易市场。然而&#xff0c;做Facebook跨境电商&#xff0c;很多人会面临的情况就是无法使用Facebook Marketplace。这到底是什么原因&#…

WordPress建网站公司 建易WordPress建站

建易WordPress建网站公司是一家专业从事WordPress网站建设、网站维护、网站托管、运营推广和搜索引擎优化(SEO)等服务的公司。建易WordPress建网站公司提供多种服务&#xff0c;包括模板建站和定制网站&#xff0c;并且明码标价&#xff0c;价格透明&#xff0c;竭诚为全国各地…

广告案例全解码:让你的品牌广告效果翻倍的分析技巧

进行广告案例分析是一个系统化的过程&#xff0c;它可以帮助你深入理解广告活动的各个方面&#xff0c;包括目标、策略、执行和效果。 以下是进行广告案例分析的十大步骤&#xff1a; 1. 确定广告案例的关键问题&#xff1a; 识别案例中的主要问题和挑战&#xff0c;这将是你…

民国漫画杂志《时代漫画》第28期.PDF

时代漫画28.PDF: https://url03.ctfile.com/f/1779803-1248635321-5c67ad?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

防火墙技术基础篇:NAT转发之——Smart NAT(No-PAT和NAPT结合)

防火墙技术基础篇&#xff1a;NAT转发之——Smart NAT&#xff08;No-PAT和NAPT结合&#xff09; 传统的NAT技术在处理大规模网络和复杂应用场景时存在一定的局限性。为了解决这些问题&#xff0c;一种名为Smart NAT的新型网络技术应运而生。本文将详细介绍Smart NAT的概念、原…

【链表】Leetcode 82. 删除排序链表中的重复元素 II【中等】

删除排序链表中的重复元素 II 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5] 解题思路 由于链表…

openssh升级

原因&#xff1a;因为低版本出现了漏洞 过程&#xff1a; 此时&#xff0c;root不能登录。 修改/etc/pam.d/login 第2行前面加上#&#xff0c;保存退出 /etc/pam.d/remote 第2行前面加上#&#xff0c;保存退出 此时root可以通过telnet登录了 二、升级openssl和openssh 【L…

C++容器之栈(std::stack)

目录 1 概述2 使用实例3 接口使用3.1 construct3.2 empty3.3 size3.4 top3.5 push3.6 emplace3.7 pop3.8 swap1 概述 堆栈是一种容器适配器,专门设计用于在后进先出(后进先出)环境中操作,其中元素仅从容器的一端插入和提取。   堆栈被实现为容器适配器,容器适配器是使用…

下半年开考,仅考1次,系统集成项目管理工程师考试安排!

《系统集成项目管理工程师教程》第3版官方教材将在下半年开始使用&#xff0c;相对于之前的版本&#xff0c;变化很大。新老考生都需要重新学习。历年真题显示&#xff0c;官方教材非常重要&#xff0c;考试题目大部分都可以在教材中找到原文。因此&#xff0c;对于下半年的考试…

Go 实现 WebSocket 的双向通信

在Go语言中实现WebSocket的双向通信通常需要使用第三方库&#xff0c;其中 gorilla/websocket 是一个非常流行和广泛使用的库。 1、安装 go get github.com/gorilla/websocket 2、编写WebSocket服务器代码 package mainimport ("fmt""github.com/gorilla/we…

【C++】构造函数、析构函数、拷贝构造与运算符重载

文章目录 1.类的六个默认构造函数2.构造函数2.1特性2.1.1 函数名与类名相同2.1.2. 无返回值&#xff08;不能写void&#xff09;2.1.3. 对象实例化时编译器自动调用对应的构造函数2.1.4 构造函数可以重载2.1.5编译器生成默认的构造函数2.1.6编译器生成的默认构造有何用&#xf…

linux开发之设备树写法

设备树的根节点 设备树子节点和子子节点,子节点在根节点范围内 包含子节点以及子子节点 节点名称 比如这里led就是这个gpio的小名,可以直接用 gpio22020101是这里的名字,也就是要用这个gpio,符号后面的一串数字使用了这个gpio的寄存器地址,因为可能会用很多gpio,所以加入寄存…