通过读取配置文件数据获取数据库连接(如何获取资源文件输入流)

简介: 一、好处实现了数据和代码的分离,解耦编写的java程序部署到服务器上时,需要打包,如果java代码修改过,就需要重新打包;而使用配置文件则不需要修改代码,所以不用重新打包。二、实现方式

一、好处

  1. 实现了数据和代码的分离,解耦
  2. 编写的java程序部署到服务器上时,需要打包,如果java代码修改过,就需要重新打包;而使用配置文件则不需要修改代码,所以不用重新打包。

二、实现方式

  1. 在src目录下新建一个.properties文件
  2. 获取资源文件的输入流。
  3. 获取配置文件中的信息
  4. 连接数据库
  static {
        Properties pros = new Properties();
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
//        JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
        try {
            pros.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        classname = pros.getProperty("classname");
        url = pros.getProperty("url");
        user = pros.getProperty("user");
        password = pros.getProperty("password");
        try {
            Class.forName(classname);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
classname=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/shop
user=root
password=123456

三、获取资源文件输入流的方法

以下部分为自己当前的理解,未必正确

我们在scr目录下配置文件,因为当web项目进行部署时,编译器会把src下资源文件(配置文件和java文件编译成的字节码文件)移至WEB-INF/classes目录下,而类加载器默认是从classpath下获取资源的(这里的classpath就是classes目录,因为class文件一般存放于此),故通过ClassLoader.getSystemClassLoader()返回ApplicationClassLoader对象(应用类加载器/系统类加载器,负责在JVM启动时,加载来自在命令java中的classpath或者java.class.path系统属性或者CLASSPATH操作系统属性所指定的JAR类包和类路径.),就可以加载classpath下的class文件,再通过getResourceAsStream()方法,直接将配置文件名传入参数即可以获得该目录下的配置文件的输入流


同样JdbcUtils(类名).class.getClassLoader().getResourceAsStream(“jdbc.properties”)也可以用于获取配置文件的输入流,.class用于获取类的class对象,getClassLoader()是获取当前的类加载器(用来加载java类的,负责把class文件加载进内存中,并创建一个java.lang.Class类的一个实例),通过该类加载器同样可以获取资源文件,因为一个类的加载器的classpath自然也指向这个类编译成的类文件的目录(这样才能加载到该类),而JdbcUtils类编译成的class文件也同样在classes目录下,那么就可以用它获取classes目录下的配置文件


而如果我们把配置文件放在于类同级的目录下(即包中),则填写路径时需要加上包名,例如getResourceAsStream(“utils/jdbc.properties”),因为classpath只到classes目录,需要自己补齐对应的相对路径

相关文章
|
1月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
1月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
108 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
1月前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
2月前
|
人工智能 Cloud Native 容灾
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
|
2月前
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
116 3
|
2月前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
2月前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
307 4
|
2月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云瑶池在2024云栖大会上重磅发布由Data+AI驱动的多模数据管理平台DMS:OneMeta+OneOps,通过统一、开放、多模的元数据服务实现跨环境、跨引擎、跨实例的统一治理,可支持高达40+种数据源,实现自建、他云数据源的无缝对接,助力业务决策效率提升10倍。
|
2月前
|
测试技术 API 数据库
云数据库之添加数据
云数据库之添加数据
33 1
|
2月前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。