單例模式锦溪,內(nèi)存中只有一個(gè)類会通,一個(gè)類只能實(shí)例化一次
餓漢模式
public class Person{
prvaite static Person p=new Person();
private Person(){}
public void? static Person?getInstance(){
return p;
}
}
懶漢模式
public clas Person{
prvaite??static Person p=null;
private Person(){}
public void? static Person?getInstance(){
if(p==null){
synchronized(Person.class){
p=new Person();
}
}
return p;
}
}
配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/day17?characterEncoding=utf8
username=root
password=root
讀取配置文件
package com.bdqn.until;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigManager {
//
? ? private static ConfigManager cm ;
? ? Properties properties;
? ? private? ConfigManager(){
//? ? ? ? String file = "D:\\workspace\\login\\src\\properties\\database.properties";
//? ? ? ? inputStream = new FileInputStream(file);
? ? ? ? String file = "database.properties";
? ? ? ? InputStream inputStream = ConfigManager.class.getClassLoader().getResourceAsStream(file);
? ? ? ? properties = new Properties();
? ? ? ? try {
? ? ? ? ? ? properties.load(inputStream);
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
? ? public static? ConfigManager? getCm(){
? ? ? ? if(cm == null){
? ? ? ? ? ? synchronized(ConfigManager.class){
? ? ? ? ? ? ? ? cm = new ConfigManager();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return? cm;
? ? }
? ? public String getProRes(String para){
? ? ? ? return? properties.getProperty(para);
? ? }
? ? public static void main(String[] args) {
? ? ? ? System.out.println(ConfigManager.getCm().getProRes("driver"));
? ? }
}
配置數(shù)據(jù)源
Tomcat?
context.xml
根節(jié)點(diǎn)添加Resource節(jié)點(diǎn)
<Resource name="jdbc/news"
? ? ? ? ? ? ? auth="Container"? type="javax.sql.DataSource"? maxActive="100"
? ? ? ? ? ? ? maxIdle="30" maxWait="10000" username="root"? password="root"
? ? ? ? ? ? ? driverClassName="com.mysql.jdbc.Driver"
? ? ? ? ? ? ? url="jdbc:mysql://127.0.0.1:3306/news"/>
name=指定Resource的JNDI名稱
? auth=指定管理Resource的Manager(Container由容器創(chuàng)建和管理淮韭,Application由Web應(yīng)用創(chuàng)建和管理)
? type=指定Resource的java類
? maxActive=指定連接池中處于活動(dòng)狀態(tài)的數(shù)據(jù)庫連接的最大數(shù)量
? maxIdle=指定連接池中處于空閑狀態(tài)的數(shù)據(jù)庫的最大數(shù)量
? maxWait=指定連接池中連接處于空閑的最長時(shí)間涩咖,超過這個(gè)時(shí)間會提示異常项钮,取值為-1华望,表示可以無限期等待,單位為毫秒(ms)
這里不要忘記:還需要將數(shù)據(jù)庫的驅(qū)動(dòng)jar包添加到录择,Tomcat安裝目錄下的lib文件夾中拔莱。
// 獲取數(shù)據(jù)庫連接
??public Connection getConnection2() {
???try {
????//初始化上下文
????Context cxt=new InitialContext();
????//獲取與邏輯名相關(guān)聯(lián)的數(shù)據(jù)源對象
????DataSource ds=(DataSource)cxt.lookup("java:comp/env/jdbc/news");
????conn=ds.getConnection();
???} catch (NamingException e) {
????e.printStackTrace();
???} catch (SQLException e) {
????// TODO Auto-generated catch block
????e.printStackTrace();
???}
???return conn;
??}
還有一點(diǎn)要注意:測試連接是否成功,需要在jsp頁面輸出connection隘竭,而不是在java類中Run As,應(yīng)為數(shù)據(jù)源配置在Tomcat中需要把Web項(xiàng)目放入Tomcat容器中運(yùn)行讼渊。jsp頁面代碼如下:
示例:
<%
BaseDao baseDao=new BaseDao();
Connection connection=baseDao.getConnection2();
?%>
<%=connection %>