今天使用druid做项目的时候,配置文件一直加载不出来:
public class JDBCUtils {
private static DataSource ds;
//静态代码块加载好配置文件,并给ds赋值
static {
try {
Properties pro = new Properties();
InputStream res = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
// FileInputStream res = new FileInputStream("druid.properties");
pro.load(res);
//返回值赋值给ds
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接池连接
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
/**
* 获取DataSource接口
* @return
*/
public static DataSource getDataSource(){
return ds;
}
}
报错
inStream parameter is null at java.base/java.util.Objects.requireNonNull(Objects.java:246) at java.base/java.util.Properties.load(Properties.java:403)
也就是说输入流为空,加载配置文件失败了!
后来发现了原因:
关键语句:
InputStream res = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
出现了错误
一开始我以为druid.properties可以随便放的,因为需要我们手动加载。
结果可能就是因为我没放在src下,然后classload的范围有局限,导致一直加载不到
(第一次明白类加载器的范围是有局限性的)
所以:
这样就没有问题了
或者使用:
FileInputStream res = new FileInputStream("druid.properties");
范围要大于classload,可以不用把配置文件放在src下