Eclipse中用于MS Sql Server的Tomcat连接池

时间:2016-12-22 21:51:42

标签: java eclipse tomcat apache-commons-dbcp mssql-jdbc

好的我正在尝试在Vaadin webapp中设置连接池,我听说最好让Tomcat进行连接池。所以我  我正在浏览一些Youtube视频和大量的教程,我对此非常不满意。我真的需要有人帮忙。

SQL服务器必须在我的计算机上吗?它可以在不同的服务器上吗?

假设我有一个db:

enter image description here

我想访问名为Table1的DB2中的表。所以根据this,我必须在ECLIPSE中进入 server.xml

enter image description here

并添加

 //
        self.setPhysics()
        let animation = SKAction.animate(with: textures, timePerFrame: 0.15, resize: true, restore: false)
        let interceptor = SKAction.animateWithDynamicPhysicsBody(animate: animation, key: "knight", textures: textures, duration: 60.0, launchMethod: self.setPhysics)
        knight.run(interceptor,withKey:"knight")
    }
    func setPhysics() {
        knight.physicsBody = SKPhysicsBody.init(rectangleOf: knight.size)
        knight.physicsBody?.isDynamic = false
    }

但根据 this guy, 它应该在 Context.xml 中(我只尝试过context.xml,我只尝试过服务器。 xml和我已经尝试过这两种资源代码。)我认为它要求 META-INF>我的Vaadin webapp中的Context.xml ,我找不到。这是我唯一的Meta-Inf文件夹,当我在这里创建一个context.xml文件时,当我尝试编译它时它就会消失。

enter image description here

无论如何,尝试继续学习本教程,我需要将驱动程序添加到我的Tomcat> Lib文件夹中,以便我下载所有these drivers并添加它们。

只是为了好好衡量,因为其他人正在使用JDBC driver我下载并将其添加到我的Tomcat>也是自由。

在一个让连接池在他的Vaadin程序中工作的人these notes之后,我在我的java代码中添加了这个:

    <Resource name="jdbc/ServerName"
        auth="Container"
        factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
        type="javax.sql.DataSource"
        maxActive="50"
        maxIdle="10"
        maxWait="15000"
        username="username"
        password="password"
        url="jdbc:sqlserver://ServerName;instance=SQLEXPRESS;databaseName=DB2;"
        removeAbandoned="true"
        removeAbandonedTimeout="30"
        logAbandoned="true" />     

当我运行时,我在finally块中的 con.close()处得到NullPointerException,因为它没有拉表。或者,我首先没有连接。

老实说,我不知道自己在做什么。如果它没有从我的计算机上运行,​​我不知道是否可以连接到sql server?我看到的每个例子都使用Localhost。

编辑:作为参考,以下代码可以正常运行100%ZERO PROBLEMS,但我无法让上面的连接池工作。

Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            Context ctx = (Context) new InitialContext().lookup("java:comp/env");
            BasicDataSource ds = (BasicDataSource)ctx.lookup("jdbc/ServerName");
            con = ds.getConnection();

            String sql = "select * from DB2.dbo.Table1 where [Field1] IS NULL";     
            stmt = con.createStatement();
            rs = stmt.executeQuery(sql);
            //Add in all info
            while (rs.next()){
                beanResultsList.addBean(new Bean(
                        rs.getInt(1),
                        rs.getString(2),
                        rs.getString(3),
                        rs.getDate(4),
                        rs.getDate(5),
                        rs.getInt(6),
                        rs.getInt(7),
                        rs.getInt(8),
                        rs.getInt(9),
                        rs.getString(10),
                        rs.getString(11),
                        rs.getString(12),
                        rs.getString(13)
                        )); 
            }
            } catch (SQLException | NamingException e) {
                e.printStackTrace();
            }finally{
                try { con.close();  } catch (SQLException e) {}
                try { rs.close();   } catch (SQLException | NullPointerException e) {}
                try { stmt.close(); } catch (SQLException e) {}
            } // End finally (try catch)

2 个答案:

答案 0 :(得分:1)

我建议你慢下来。这个问题是几个问题的组合。只关注一个问题,找到答案,并在看到它们如何适合时将各个部分放在一起。

首先,&#34; SQL服务器必须在我的计算机上吗?它可以在不同的服务器上吗?&#34;。它可以在不同的服务器上,只要您具有网络访问权限。

其次,&#34;无论如何,尝试继续学习本教程,我需要将驱动程序添加到我的Tomcat&gt; Lib文件夹中,以便下载所有这些驱动程序并添加它们。&#34; &#34;这些司机&#34;你指的是JDBC驱动程序。如果您要连接到Microsoft SQL Server,那么额外的JDBC&#39;你指的驱动程序对你没用,因为它们是MySQL JDBC驱动程序(与SQL Server完全不同的数据库)。

第三,你显然正在使用Maven,当你添加一个META-INF文件夹和一个context.xml时,它会被删除,因为&#39; target&#39;运行Maven构建时,将重建Maven项目中的文件夹。您需要将META-INF文件夹添加到/ src / main / webapp /文件夹。然后,context.xml文件将在构建时复制到您最初尝试放置它的位置并期望它保留。

答案 1 :(得分:1)

我认为定义JNDI数据源的正确位置在server.xml中,并在context.xml中有一个引用,请参阅此答案Tomcat JNDI resource name aliases