
database.properties :--->
jdbc.driver_class=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springmvc。gora.sqlstore.jdbc.url=jdbc:mysql://host2:3306/nutch。sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar。
jdbc.connection.username=root
jdbc.connection.password=1234
========单例模式=========:运行期间有且仅有一个实例
关键点:

一个类只有一个实例---最基本的--(只提供私有的构造器)
它必须自行创建这个实例--(定义了静态的该类的私有对象)
它必须自行向整个系统提供这个实例--(提供一个静态的公有的方法,返回创建或者获取本身的静态私有对象)
-----------------------------------------------------------
懒汉模式:(线程不安全,在并发环境下,很有可能会出现多个configManager实列------
-----------需要考虑同步1、方法体加同步synchronized2、双重校验锁)
在类加载的时候,不创建实例,运行调用的时候创建。
优点:类加载快

缺点:效率低,在运行时获取对象速度慢
-----------------------------------------------------------
饿汉模式:(线程安全)
在类加载的时候fly类型文件怎么打开,就完成初始化。
所以类加载慢fly类型文件怎么打开,但是在运行时获取对象快
1.如这种写法
private static ConfigManager configManager2 = new ConfigManager();
2. 或者这样写

private static ConfigManager configManager;
static(){
configManager = new ConfigManager();
}
3.如果有要求需要实现延迟加载,通过静态内部类;
保证类加载的速度
--(外部调用 test()方法时,静态内部类实现了延时加载)
public class Singleton {
//静态内部类 lazy loading
private static Singleton singleton;
private Singleton(){}
private static class SingletonHelper{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
return SingletonHelper.INSTANCE;
}
public static void test(){
System.out.println("test===" + singleton.toString());
}
}
----------------------------------------------------------------------
-----------------------------------------------------------------------
package cn.news.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
//读取配置文件的工具类--单例模式
public class ConfigManager {
//读取配置文件properties.load(inputstream);
private static ConfigManager configManager;
private static Properties properties;
private ConfigManager(){
String configFile="database.properties";
properties = new Properties();
InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
try {
properties.load(is);
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static ConfigManager getInstance(){
if(configManager==null){
configManager = new ConfigManager();
}
return configManager ;
}
//取得key对应的value;
public String getString(String key){
return properties.getProperty(key);
}
}

================================================================================
=================================================================================
package com.news.util;
import java.io.InputStream;
import java.util.Properties;
/**
*
* *读取配置文件的工具类---单列模式---懒汉模式--延迟加载
*
* 步骤:
*
* 1.创建私有的构造器,进行配置文件的读取
* 2.创建全局访问点,通过单列模式设置实列化的个数,返回configManager实列
* 3.通过key获得对应的value
*/
public class ConfigManager {
private static ConfigManager configManager;
private static Properties properties;//Properties用来操作properties文件
//私有的构造器,进行配置文件的读取
private ConfigManager(){
String configFile="jdbc.properties";
properties=new Properties();
try {
//通过classpath找资源
//在当前类所在包的根目录下找到相应的configFile文件
//getClassLoader()返回类加载器
//getResourceAsStream(configFile)返回InputStream对象
InputStream is=ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
properties.load(is);//读取配置文件
is.close();
} catch (Exception e) {
// TODO: handle exception
}
}
/*
*线程不安全,在并发环境下,很有可能会出现多个configManager实列
*需要考虑同步 , 可以加同步锁 synchronized
* 懒汉模式 (线程不安全--解决办法1.方法体加同步锁synchronized 2.双重校验锁)
* 在类加载的时候不创建实列,运行的时候创建。
* 优点:类加载快
* 缺点:效率低,在运行时获取对象速度慢
*
*
*/
//全局访问点
//通过单列模式设置实列化的个数
public static synchronized ConfigManager getInstance(){
if (configManager==null) {
configManager=new ConfigManager();
}
return configManager;
}
//通过key获得对应的value
public String getValue(String key){
return properties.getProperty(key);
}
/*//双重校验锁
public static ConfigManager getInstance(){
if (cManager==null) {
synchronized(ConfigManager.class){
if (cManager==null) {
cManager=new ConfigManager();
}
}
}
return cManager;
}*/
}
===================================================================================================
===================================================================================================
package com.news.util;
import java.io.InputStream;
import java.util.Properties;
/**
* 单列模式---饿汉模式:(线程安全)
在类加载的时候,就完成初始化。所以类加载慢,但在运行时获取对象快
*/
public class ConfigManager2 {
//类加载的时候,自动进行初始化
private static ConfigManager2 configManager2=new ConfigManager2();
private static Properties properties;
//私有的构造器
private ConfigManager2(){
String configFile="database.properties";
properties=new Properties();
try {
//通过classpath找资源
//在当前类所在包的根目录下找到相应的configFile文件
InputStream is=ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
properties.load(is);
is.close();
} catch (Exception e) {
}
}
//全局访问点
public static ConfigManager2 getInstance(){
return configManager2;
}
public String getValue(String key){
return properties.getProperty(key);
}
}
--------------------------------------------------------------------------------------------------------------------------------------
上面的工具类用在JDBC连接时,工具类创建configManager实列,通过configManager实列获取连接。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-111262-1.html
受伤的还是百姓
难拢人心