- 新闻信息存储在mysql数据库中,但在开发和部署有可能使用不同的数据库,也有可能因为客户需求变更而变换数据库产品
- 在src目录下创建File文件命名为database.properties(后缀必须为properties)文件是以key-value形式存在
database.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.connection.url=jdbc:mysql://localhost:3306/kgcnews
jdbc.connection.username=root
jdbc.cnneection.password=5869413
ConfigManager.java
使用流的方式读取数据库数据文件(非单例模式实现,弊端,每次都要创建properties对象通过IO输入流的方式获取key值)
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* @author LLp
*读取数据库属性文件 获取数据库连接信息
*/
//如何让用户只能创建一个ConfigManager ? 单例模式
public class ConfigManager {
private Properties properties;
//使用流读取属性文件
//ConfigManager c=new ConfigManager();
//c.getString("jdbc.driver")
public ConfigManager(){
String configFile="database.properties";
InputStream in=ConfigManager.class.getClassLoader().getResourceAsStream(configFile);//类加载器
properties=new Properties();
try {
properties.load(in);
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//根据属性文件中的键获取对应的值
public String getString(String key){
return properties.getProperty(key);
}
}
- **
使用单列模式实现用户只能创建一个ConfigManager
- `private ConfigManager()`
- (2)将ConfigManage对象静态(静态不用new对象直接通过类名.)
private static ConfigManager configManager;
(3)创建静态的getInstance方法并使用线程同步每次进入都要把程序执行完
保证给别人唯一的ConfigManager对象
public static synchronized ConfigManager getInstance(){
if(configManager==null){
configManager=new ConfigManager();//如果对象为null就new出一个对象
}
return configManager;//如果有这个对象直接给ConfigManager方法
}
完整代码
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* @author LLp
*读取数据库属性文件 获取数据库连接信息
*/
//单例模式的二种实现方法:懒汉方式,饿汉方式。
//如何让用户只能创建一个ConfigManager ? 单例模式(1)将构造方法私有化(2)程序提供给别人唯一的对象
//ConfigManger.getInstance.getString("jdbc.driver");
public class ConfigManager {
private static ConfigManager configManager;
private Properties properties;
//使用流读取属性文件
//ConfigManager c=new ConfigManager();
//c.getString("jdbc.driver")
private ConfigManager(){
String configFile="database.properties";
InputStream in=ConfigManager.class.getClassLoader().getResourceAsStream(configFile);//类加载器
properties=new Properties();
try {
properties.load(in);
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//保证给别人唯一的ConfigManager对象(懒汉模式:线程不安全)
public static synchronized ConfigManager getInstance(){
if (configManager==null) {
configManager=new ConfigManager();
}
return configManager; //
}
//根据属性文件中的键获取对应的值
public String getString(String key){
return properties.getProperty(key);
}
}
- 修改基类BaseDao.java代码
Class.forName(ConfigManager.getInstance().getString("jdbc.driver"));
String url=ConfigManager.getInstance().getString("jdbc.connection.url");
String username=ConfigManager.getInstance().getString("jdbc.connection.username");
String password=ConfigManager.getInstance().getString("jdbc.connection.password");
cn=DriverManager.getConnection(url,username,password);