2021-05-12

实现JNDI数据源

JNDI数据源

使用了池化的技术:提高程序执行效率和降低系统资源开销。

 

使用容器管理的数据源,如EJB或应用服务器,它只有俩个属性配置:

initial_context:  从InitialContext中查找Context

data_source:数据源实例的context路径

String jndiName = ….;

Context context = new InitialContext();

DataSource ds = (DataSource)context.lookup(jndiName);

 

示例:

新建web项目,部署在Tomcat8.0上

Tomcat8.0内置了dbcp数据库连接池

在web项目的META-INF下,新建context.xml:

 

  • 步骤一:web环境,添加框架的支持
  • 步骤二:在MATE-INF中编写context.xml

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
    <Resource name="jdbc/StaffJndi"
              auth="Container"
              type="javax.sql.DataSource"
              username="root"
              password="ROOT"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/staff"
              maxActive="100"
              maxIdle="30"
              maxWait="10000"/>
</Context>

 

  • 步骤三:

Web.Xml中配置resource

<!--  配置jndiresource的信息  -->
<resource-ref>
    <description>new DataSource</description>
    <res-ref-name>jdbc/StaffJndi</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

 

  • 步骤四:在mybaits.xml中配置jndi

<environment id="development3">
    <transactionManager type="JDBC"/>
    <dataSource type="JNDI">
        <property name="data_source" value="java:comp/env/jdbc/StaffJndi"/>
    </dataSource>
</environment>

创建一个servlet,运行在web环境下。

在servlet中测试数据源:

@WebServlet(name = "TestServlet",urlPatterns = {"/test"})
public class TestServlet extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        try {
            //创建上下文
            InitialContext initialContext = new InitialContext();
            //在上下文中引用数据源
            DataSource dataSource = (DataSource) initialContext.lookup("java:comp/env/jdbc/StaffJndi");
            System.out.println(dataSource);
            //获取连接
            Connection connection = dataSource.getConnection();
            System.out.println(connection);
        } catch (NamingException | SQLException e) {
            e.printStackTrace();
        }
    }

 

执行结果:

org.apache.tomcat.dbcp.dbcp2.BasicDataSource@5f50f29e

135115990, URL=jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC, UserName=root@localhost, MySQL Connector/J

默认使用JndiDataSourceFactory创建DataSource

 

JDBC和JNDI的区别?

JNDI不单单是用来连接数据库的,它是通过命名服务来找到数据库并返回数据库连接,当然JNDI还可以管理当前应用服务器上的其他资源,如网页,文件等,它用来连接数据库时和JDBC最大的区别就是它是通过应用服务器配置(如Tomcat)的配置文件context.xml来找数据库驱动的,其次就是JDBC连接能承受的同时请求数太低了,JNDI连接池连接与之相比会好很多。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值