配置数据最小变动成本
配置数据是什么
当我们用JDBC访问数据库的时候加载驱动需要驱动参数
driverClass = 'com.mysql.cj.jdbc.Driver';
Class.forName(driverClass);
获取连接需要三个连接参数
url = "jdbc:mysql://localhost:3306/examonline?serverTimezone=UTC&useSSL=false"
user = "****"
pwd = "******"
Connection conn = DriverManager.getConnection(url, user, pwd);
这里的driverClass,url, user ,pwd 便是配置参数。
变动成本
在开发一个软件的时候,
成本1: 这四个参数若是直接写在源代码里
那么在软件发布后,若配置参数发生变化,我们需要修改源码,然后重新发布。用户需要重新下载整个软件。
成本2: 这四个参数写在一个配置文件里,软件发布后,当配置参数发生变化,此时只需要改变配置文件,不动源码,不需要重新下载整个软件。
配置文件
在java项目里新建一个 .properties 文件
书写方式以上面的参数为例
driverClass = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/examonline?serverTimezone=UTC&useSSL=false
user = *****
pwd = ******
访问配置文件(Properties类)
Java为访问 .properties 文件 专写了一个Properties类使用方式如下
Properties prop = new Properties();
File file = new File(pathname);//pathname 文件的(绝对、相对)路径
try{
prop.load(new FileInputStream(file));//加载配置文件以文件流形式
}catch (IOException)
{
e.printStackTrace()
}
//获得相应的值
driverClass = prop.getProperty("driverClass");
url = prop.getProperty("url");
pwd = prop.getProperty("pwd");
user = prop.getProperty("user");
这样四个参数就从properties文件中获得了配置参数
由获得的形式我们可以知道,每一对在properties文件中的数据是以键值对的形式被关联访问的的。
写到这,本文还没有到结尾!
从上面的代码来看,pathname是我们文件的路径,而路径一写在源码里,它也相当于配置参数,被固定在了源码中,所以我们遇到了同样的问题,配置参数被写死在源码中!
有办法解决吗?当然
Properties prop = new Properties();
String filename = "db.properties";//文件名 这是我的properties文件的名称
try{
prop.load(JdbcDemo.class.getClassLoader().getResourceAsStream(fileName));//类加载的形式获取文件流 JdbcDemo是我的一个类 是当前代码所在的类名
}catch (IOException)
{
e.printStackTrace()
}
//获得相应的值
driverClass = prop.getProperty("driverClass");
url = prop.getProperty("url");
pwd = prop.getProperty("pwd");
user = prop.getProperty("user");
通过这样的方式,我们只需要写入文件的名称,就可以从该文件中获取配置数据,而不需要固定文件的所在位置。
写到这,配置数据被写死的现象就没有了!