发表于: 2018-09-09 23:28:15

1 411


今天完成的事情:

1.用Main方法在服务器上跑通流程

①源码

package com.maven;

import com.maven.HelloWorld;

public class Speak{
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
       System.out.println(helloWorld.sayHello());
   }
}

②打包

利用 maven clean mvn install命令打包在target文件里面

复制到本地硬盘

上传到服务器(点住拖进去)

③执行JAR包(https://blog.csdn.net/qq_41246635/article/details/80688593)

java -jar 包名


2.连接池

https://www.cnblogs.com/sunseine/p/5947448.html

DBCP(DataBase connection pool)数据库连接池是 apache 上的一个Java连接池项目。DBCP通过连接池预先同数据库建立一些连接放在内存中(即连接池中),应用程序需要建立数据库连接时直接到从接池中申请一个连接使用,用完后由连接池回收该连接,从而达到连接复用,减少资源消耗的目的。

①获取依赖

<dependencies>
   <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
   <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
       <version>2.4</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
   <dependency>
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
       <version>1.2</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
   <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-pool2</artifactId>
       <version>2.4.2</version>
   </dependency>
</dependencies>

DBCP配置文件dbcp.properties

########DBCP配置文件##########
#驱动名
driverClassName=com.mysql.jdbc.Driver
#url
url=jdbc:mysql://127.0.0.1:3306/mydb
#用户名
username=root
#密码
password=123456
#初试连接数
initialSize=30
#最大活跃数
maxTotal=30
#最大idle数
maxIdle=10
#最小idle数
minIdle=5
#最长等待时间(毫秒)
maxWaitMillis=1000
#程序中的连接不使用后是否被连接池回收(该版本要使用removeAbandonedOnMaintenance和removeAbandonedOnBorrow)
#removeAbandoned=true
removeAbandonedOnMaintenance=true
removeAbandonedOnBorrow=true
#连接在所指定的秒数内未使用才会被删除(秒)(为配合测试程序才配置为1秒)
removeAbandonedTimeout=1

 创建初始化DBCP的类KCYDBCPUtil.java

package dbcp;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSourceFactory;

/**
* DBCP配置类
* @author SUN
*/
public class KCYDBCPUtil {

private static Properties properties = new Properties();
   private static DataSource dataSource;
   //加载DBCP配置文件
   static{
try{
FileInputStream is = new FileInputStream("dbcp.properties");
           properties.load(is);
       }catch(IOException e){
e.printStackTrace();
       }

try{
dataSource = BasicDataSourceFactory.createDataSource(properties);
       }catch(Exception e){
e.printStackTrace();
       }
}

//从连接池中获取一个连接
   public static Connection getConnection(){
Connection connection = null;
       try{
connection = dataSource.getConnection();
       }catch(SQLException e){
e.printStackTrace();
       }
try {
connection.setAutoCommit(false);
       } catch (SQLException e) {
e.printStackTrace();
       }
return connection;
   }

public static void main(String[] args) {
getConnection();
   }
}

创建使用JDBC获取数据库连接的类DBConn.java(用于和DBCP连接池对比)

package dbcp;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBConn {
private static Connection conn = null;

   //获取一个数据库连接
   public static Connection getConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");
           DriverManager.registerDriver(new com.mysql.jdbc.Driver());
           String dbUrl = "jdbc:mysql://127.0.0.1:3306/mydb";
           conn = DriverManager.getConnection(dbUrl, "root", "123456");
//            System.out.println("========数据库连接成功========");
       } catch (Exception e) {
e.printStackTrace();
//            System.out.println("========数据库连接失败========");
           return null;
       }
return conn;
   }
}

创建测试类DBCPTest.java

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import dbcp.DBConn;
import dbcp.KCYDBCPUtil;
import org.junit.Test;

public class DBCPTest {

//测试,每写一条数据前,就新建一个连接
   @Test
   public void testWriteDBByEveryConn() throws Exception{
for(int i = 0; i < 2000; i++){
writeDBByEveryConn(i);
       }
System.out.println("DONE");

   }

//测试,使用连接池,每写一条数据前,从连接池中获取一个连接
   @Test
   public void testWriteDBByDBCP() throws Exception{
for(int i = 0; i <2000; i++){
writeDBByDBCP(i);
       }
System.out.println("DONE");
   }

//测试,只建一条连接,写入所有数据
   @Test
   public void testWriteDBByOneConn() throws Exception{
Connection conn = DBConn.getConnection();
       Statement stat = conn.createStatement();
       for(int i = 0; i <2000; i++){
writeDBByOneConn(i, stat);
       }
conn.close();
       System.out.println("DONE");
   }

//不使用连接池写数据库,每写一条数据创建一个连接
   public void writeDBByEveryConn(int data){
String sql = "insert into dbcp(name) values (" + data + ")";
       Connection conn = DBConn.getConnection();
       try{
Statement stat = conn.createStatement();
           stat.executeUpdate(sql);
       }catch(Exception e){
e.printStackTrace() ;
       }finally{
try {
conn.close();
           } catch (SQLException e) {
e.printStackTrace();
           }

}
}

//不使用连接池写数据库,只用一个连接,写所有数据
   public void writeDBByOneConn(int data, Statement stat){
String sql = "insert into dbcp (name) values (" + data + ")";
       //insert into dbcp values (data);
       try{
stat.executeUpdate(sql);
       }catch(Exception e){
e.printStackTrace() ;
       }
}

//通过DBCP连接池写数据库
   public void writeDBByDBCP(int data){
String sql = "insert into dbcp (name) values (" + data + ")";
       try {
Connection conn = KCYDBCPUtil.getConnection();
           Statement stat = conn.createStatement();
           stat.executeUpdate(sql);
           conn.commit();
           conn.close();
       } catch (SQLException e) {
e.printStackTrace();
       }
}

}

⑥执行,查看结果


明天计划的事情:

了解DB中断之后 报异常的情况

插入多条数据,感受数据库性能

具体了解索引的作用

 学习GIT的有关知识


遇到的问题:

1)遇到错误

解决办法:引入依赖

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-dbcp2</artifactId>
   <version>2.0</version>
</dependency>


收获:

用MAIN方法在服务器上跑通流程

初步学习了连接池相关知识 并且在DOME里添加了2000个循环感受了一下...快了1/4左右


返回列表 返回列表
评论

    分享到