MyBatis+Tomcat配置JNDI数据源

MyBatis通过配置mybatis-config.xml文件的dataSource标签配置数据源类型以及属性。除UNPOOLED和POOLED外,mybatis支持JNDI方式从外部服务中获取数据源配置。

JNDI(Java命名与目录接口)是SUN公司提供的一种标准的Java命名系统接口,通过名称获取到服务对象。以Tomcat为例的服务器自带数据库连接池,默认采用DBCP连接池,jar包位于lib目录下。此时,Web应用使用Tomcat提供的数据库连接池服务,通过JNDI名称查找数据源。

mybatis-config.xml配置

mybatis主要配置dataSource的type属性为JNDI,并设置JNDI名称,用于系统查找数据源。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="JNDI">
                <property name="data_source" value="java:comp/env/jdbc/mybatis"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

配置数据源

数据源有多种配置方式,包括全局配置和局部配置。其中全局配置是对Tomcat /conf目录的context.xml文件进行配置,局部配置只在当前项目中生效,在项目目录webapp/META_INF目录创建context.xml文件,配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource 
name="jdbc/mybatis"	                        数据源的名称
type="javax.sql.DataSource"	                数据源类型--通过name获取到type类型的服务
auth="Container"				            数据源提供者 tomcat
maxActive="20"				                最大活动数
maxWait="10000"				                最大等待时间 s
maxIdle="5"				                   	最大空闲数
username="root"		      					用户名
password="123456"							密码
driverClassName="com.mysql.jdbc.Driver"		驱动类
url="jdbc:mysql://localhost:3306/mybatis"	连接url字符串
/>
</Context>

测试JNDI获取数据源

采用Servlet进行简单测试。自servlet3.0后可以不用再web.xml里面配置servlet,只需要加上@WebServlet注解就可以修改该servlet的属性。

@WebServlet("/jndi")
public class JNDIServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Connection conn = null;
        try {
            Context initContext = new InitialContext();
            Context envContext = (Context) initContext.lookup("java:/comp/env");
            DataSource ds = (DataSource) envContext.lookup("jdbc/mybatis");
            conn = ds.getConnection();
            System.out.println(conn);
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

浏览器访问http://localhost:8080/advanced_java_war_exploded/jndi,控制台会打印出数据源信息。

1520309599, URL=jdbc:mysql://localhost:3306/mybatis, UserName=root@localhost, MySQL Connector/J

当然也可以使用JSP测试,效果是一样的。

<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.sql.DataSource" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="javax.naming.NamingException" %>
<%@ page import="java.sql.SQLException" %>
<html>
<body>
<h2>Hello World!</h2>
<%
    Connection conn = null;
    try {
        Context initContext = new InitialContext();
        Context envContext  = (Context)initContext.lookup("java:/comp/env");
        DataSource ds = (DataSource)envContext.lookup("jdbc/mybatis");
        conn = ds.getConnection();
        System.out.println(conn);
    } catch (NamingException e) {
        System.out.println(e.getMessage());
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        conn.close();
    }
%>
</body>
</html>

参考文档

http://tomcat.apache.org/tomcat-8.0-doc/jndi-datasource-examples-howto.html

发布了17 篇原创文章 · 获赞 41 · 访问量 9983

猜你喜欢

转载自blog.csdn.net/awecoder/article/details/102878422
今日推荐