关于java加载数据库配置文件db.properties中的一些问题
在日常项目开发中,为方便项目后期维护,在建立连接池,连接数据库时,一般都不会将数据库的基本配置driverClassName,url,username,password等信息直接写进DbUtils类中(建立数据库连接的一个工具类),而是通过xxx.properties配置文件的形式进行配置,然后由DbUtils类加载并读取该配置文件。该配置文件是以key-value的形式存放数据库配置信息,如下代码就是db.properties文件的基本形式;
#数据库基本信息配置 driverClassName=org.postgresql.Driver url=jdbc:postgresql://127.0.0.1:5432/testdb username=postgres password=123456
#连接池性能配置 filters=stat initialSize=2 maxActive=300 maxWait=60000 timeBetweenEvictionRunsMillis=60000 minEvictableIdleTimeMillis=300000 validationQuery=SELECT 1 testWhileIdle=true testOnBorrow=false testOnReturn=false poolPreparedStatements=false maxPoolPreparedStatementPerConnectionSize=200
|
加载db.properties文件的基本操作如下代码所示:
//创建配置文件 private static Properties p = new Properties(); //加载配置文件并建立连接池 static{ try{ //FileInputStream in = new FileInputStream("src/pdb.properties"); (方式1,路径为绝对路径) InputStream in = DbUtil.class.getResourceAsStream("/pdb.properties");(方式2,采用相对路径) p.load(in); ds = DruidDataSourceFactory.createDataSource(p);//创建连接池 }catch(Exception e){ e.printStackTrace(); } } |
方式1,路径为绝对路径:
FileInputStream in = new FileInputStream("src/pdb.properties");
方式2,采用相对路径;
InputStream in = DbUtil.class.getResourceAsStream("/pdb.properties");
如果在java项目中使用方式1加载配置文件到不会有什么问题,只要将配置文件放在src目录下,项目编译时,会将配置文件放到bin目录中,运行时能找到配置文件的路径,因为在java项目中,classpath的根目录就是bin目录。
如果在java web项目中,使用方式1进行加载,就会在运行时出现问题,因为在web项目中,classpath的根目录是WEB-INF/classes,通过方式1加载配置文件时,路径采用了绝对路径,所以导致web项目在运行时tomcat容器找不到配置文件的路径,所以会抛错。此时最好的解决办法就是使用方式2加载配置文件,通过反射找到配置文件的路径。采用相对路径不管在java项目还是java web项目,都是最佳的选择。