全局数据源

编程技术  /  houtizong 发布于 3年前   154

实验目的:为了研究两个项目同时访问一个全局数据源的时候是创建了一个数据源对象,还是创建了两个数据源对象。

1:将diuid和mysql驱动包(druid-1.0.2.jar和mysql-connector-java-5.1.15.jar)copy至%TOMCAT_HOME%/lib下;
2:配置数据源,将JNDI在%TOMCAT_HOME%/conf/context.xml中配置好,格式如下:
<Resource
        auth="Container"
        driverClassName="com.mysql.jdbc.Driver"
        factory="com.alibaba.druid.pool.DruidDataSourceFactory"
        maxActive="20"
        maxIdel="10"
        maxWait="1000"
        name="jdbc/snf-paiDS"
        password="adminone"
        type="javax.sql.DataSource"
        url="jdbc:mysql://10.27.82.169/pai?zeroDateTimeBehavior=convertToNull" />
<ResourceLink global="jdbc/snf-paiDS " name="jdbc/snf-paiDS" type="javax.sql.DataSource" />
3:在web.xml中配置druid的监控servletMapping:
    <servlet>
        <servlet-name>DruidStatView</servlet-name>
        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DruidStatView</servlet-name>
        <url-pattern>/druid/console/*</url-pattern>
    </servlet-mapping>
4:启动启动空的tomcat,如果启动成功,说明配置正确;
5:在eclipse中关联tomcat,(注意关联后的配置,应为已按上面步骤配置好的)。
6:创建一个空的项目,用来访问数据源。
7:新建一个servlet,并在web.xml中配好servletMapping,例如:
【JAVA代码:】
public class HoldConnection extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private DataSource        ds; //声明数据源
    private List<Connection>  c                = new ArrayList<Connection>(); //存放连接,防止被垃圾回收器回收
    public HoldConnection() {
        super();
        try {
            Context ic = new InitialContext();
            ds = (DataSource) ic.lookup("java:comp/env/jdbc/snf-paiDS");//访问JNDI
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException {
        try {
            DruidPooledConnection conn = (DruidPooledConnection) ds.getConnection();//创建druid链接
            DruidDataSource dds = (DruidDataSource) ds; //创建druid的数据源
            c.add(conn);//放入list中,防止被回收
            System.out.println(ds);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {
            doGet( request, response);
    }
}
【web.xml配置:】
    <servlet>
        <servlet-name>ds</servlet-name>
        <servlet-class>com.suning.phl.dbcp.HoldConnection</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>ds</servlet-name>
        <url-pattern>/ds/*</url-pattern>
    </servlet-mapping>
8:将项目发布到tomcat中启动;
9:访问HoldConnection;
10:访问druid控制台,查看数据源对象。
11:再新建一个项目,重复上面第6-8步;
12:重新访问两个项目中的HoldConnection(注意路径不要一样),然后再访问druid控制台,查看数据源对象,此时发现:创建了两个数据源对象,
由此可以得出结论,在容器中配置的数据源,通过不同的项目实例访问会创建不同的数据源对象。
假设:数据库的连接数最大值设置为1000,容器中的连接数配置为1000.如果只有一个实例访问数据源,那么是没有问题的。
假设有两个实例访问数据源,如果两个实例的总连接数之和大于1000,那么超出的部分是没办法进行数据库访问的。

案例如下:

数据源对象研究案例

 

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客