2019-06-20 单例模式和JNDI连接数据库

一、单例模式

    一个类里只有一个实例,只有它本身可以调用

    其它类想要调用,需要它提供一个全局访问点

二、Properties文件(连接)

      文件包含:驱动、数据库地址、用户名、密码


三、懒汉模式读取properties文件

    1、创建一个对象,私有且静态,private static ConfigManager cm;

    2、构造函数中读取配置文件(ConfigManager.class.getClassLoader().getResourceAsStream(配置文件文件路径))

2019-06-20 单例模式和JNDI连接数据库_第1张图片

四、JNDI连接

    连接池、数据源、JNDI三者间的关系及用法

数据源:

数据源(DataSource)用来连接数据库,创建连接(Connection)对象。

java.sql.DataSource接口负责建立与数据库的连接

由Tomcat提供,将连接保存在连接池中。

连接池:

连接池是由容器(比如Tomcat)提供的,用来管理池中的连接对象。

连接池自动分配连接对象并对闲置的连接进行回收。

连接池中的连接对象是由数据源(DataSource)创建的。

连接池(Connection Pool)用来管理连接(Connection)对象。

JNDI(Java Naming and Directory Interface,Java命名和目录接口):

在程序中使用JNDI获取数据源。

通过数据源创建的连接对象被统一的放入到连接池中进行管理。

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

1、配置Tomcat的conf/context.xml

              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文件夹中。

2、使用JNDI获取连接对象

lookup(java:comp/env/数据源名称");

//java:comp/env/这是Java的语法要求,必须写上。

//这里的数据源名称就是上面的jdbc/news,这个news是项目名。

3.编写代码获取数据源

  // 获取数据库连接

  public Connection getConnection2() {

  try {

    //初始化上下文

    Context cxt=new InitialContext();

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

    DataSource ds=(DataSource)cxt.lookup("java:comp/env/jdbc/news");

    conn=ds.getConnection();

  } catch (NamingException e) {

    // TODO Auto-generated catch block

    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 %>


在Tomcat中的配置

配置在:context.xml文件内

F:\apache-tomcat-7.0.68-windows-x64\apache-tomcat-7.0.68\conf\context.xml

---------mySQL

auth="Container" type="javax.sql.DataSource"

maxActive="100"

maxIdle="30" maxWait="10000" username="root"

password="Admin001"

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://127.0.0.1:3306/news"/>

----------Oracle

auth="Container" type="javax.sql.DataSource"

maxActive="100"

maxIdle="30" maxWait="10000" username="wuyong"

password="Admin001"

driverClassName="oracle.jdbc.OracleDriver"

url="jdbc:oracle:thin:@localhost:1521:orcl"/>

使用JNDI获取连接对象

java:comp/env/jdbc/news

这段为固定写法

java:comp/env/

数据源(DataSource)用来连接数据库,创建连接(Connection)对象。

java.sql.DataSource接口负责建立与数据库的连接

由Tomcat提供,将连接保存在连接池中。

连接池:

连接池是由容器(比如Tomcat)提供的,用来管理池中的连接对象。

连接池自动分配连接对象并对闲置的连接进行回收。

连接池中的连接对象是由数据源(DataSource)创建的。

连接池(Connection Pool)用来管理连接(Connection)对象。

JNDI(Java Naming and Directory Interface,Java命名和目录接口):

在程序中使用JNDI获取数据源。

通过数据源创建的连接对象被统一的放入到连接池中进行管理。

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