单例模式和JNDI连接数据库

单例模式:一个类里只有一个实例,其他对象想要调用此方法需要全局提供一个访问点

properties配置文件配置信息

mysql.driver=com.mysql.jdbc.Driver

mysql.url=jdbc:mysql://127.0.0.1:3306/数据库名

mysql.user=root

mysql.pwd=root

数据源的配置与使用数据源的方法:

单例模式

饿汉模式

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"));

    }

}

配置数据源

Tomcat 

context.xml

根节点添加Resource节点

              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由容器创建和管理,Application由Web应用创建和管理)

  type=指定Resource的java类

  maxActive=指定连接池中处于活动状态的数据库连接的最大数量

  maxIdle=指定连接池中处于空闲状态的数据库的最大数量

  maxWait=指定连接池中连接处于空闲的最长时间,超过这个时间会提示异常,取值为-1,表示可以无限期等待,单位为毫秒(ms)

这里不要忘记:还需要将数据库的驱动jar包添加到,Tomcat安装目录下的lib文件夹中。

// 获取数据库连接

  public Connection getConnection2() {

   try {

    //初始化上下文

    Context cxt=new InitialContext();

    //获取与逻辑名相关联的数据源对象

    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;

  }

还有一点要注意:测试连接是否成功,需要在jsp页面输出connection,而不是在java类中Run As,应为数据源配置在Tomcat中需要把Web项目放入Tomcat容器中运行。jsp页面代码如下:

示例:

<%

BaseDao baseDao=new BaseDao();

Connection connection=baseDao.getConnection2();

 %>

<%=connection %>

你可能感兴趣的:(单例模式和JNDI连接数据库)