基于H2数据库使用的CounterWebAppV6
前言
你好! 这是一次云应用系统开发技术,之前我们有写一个CounterWebApp的java程序,那是一个基于内存存储,在web应用重启后将重置(从零开始)。本次新版任务将选用H2文件型数据库作为计数器的存储,从而让此Web应用重启后,计数器还能继续计数。Web应用开发的技术栈限定选用Spring Boot + MyBatis + Thymeleaf实现。
所用软件及技术
软件:Eclipse、Xshell、Filezilla
其他:tomcat、jdk、H2数据库
平台:阿里云
实现
环境配置
tomcat
Eclipse:导入项目之后,点击window->preference->server->Runtime Environments->add 加入自己本地配置的tomcat(这里默认tomcat已经配好的),点击OK。
将tomcat8添加到server并尝试启动
启动成功tomcat8后面会出现下面这样的started字样即为成功。
H2数据库
网站下载H2数据库
网站:link:http://www.h2database.com/html/main.html
下载完成后打开你的文档,点击h2.bat
它会自己打开浏览器并打开H2数据库操作后台
注:后台连接到h2数据库的时候,网页程序不可以同时连接到h2数据库。如果你需要运行程序,那么请退出后台链接。
配置H2DRIVERS变量。
代码实现
java端我们使用eclipse。
项目结构如下:
主要文档有三个:counter.jps、User.java、JDBCUtils.java
下面分别来叙述:counter.jps
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="JDBC.copy.JDBCUtils,com.cqust.User"%>
<html><body>
<%@ page language="java" %>
<!-- 每次加载这个页面就调用一次updata方法 -->
<% JDBCUtils.updata(Integer.parseInt(JDBCUtils.selet().getCOUNTER_VALUE()));
System.out.println("++"+JDBCUtils.selet());
%>
<h1>Maven + Spring MVC Web Project Example</h1>
<h2>Message : <%=JDBCUtils.selet().getCOUNTER_NAME()%></h2>
<h2>COUNTER : <%= JDBCUtils.selet().getCOUNTER_VALUE()%></h2>
</body></html>
User.java
package com.cqust;
public class User { //存放数据
private String COUNTER_ID;
private String COUNTER_NAME;
private String COUNTER_VALUE;
@Override
public String toString() {
return "User [COUNTER_ID=" + COUNTER_ID + ", COUNTER_NAME=" + COUNTER_NAME + ", COUNTER_VALUE=" + COUNTER_VALUE
+ "]";
}
public String getCOUNTER_ID() {
return COUNTER_ID;
}
public void setCOUNTER_ID(String cOUNTER_ID) {
COUNTER_ID = cOUNTER_ID;
}
public String getCOUNTER_NAME() {
return COUNTER_NAME;
}
public void setCOUNTER_NAME(String cOUNTER_NAME) {
COUNTER_NAME = cOUNTER_NAME;
}
public String getCOUNTER_VALUE() {
return COUNTER_VALUE;
}
public void setCOUNTER_VALUE(String cOUNTER_VALUE) {
COUNTER_VALUE = cOUNTER_VALUE;
}
}
JDBCUtils.java
package JDBC.copy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import com.cqust.User;
public class JDBCUtils {
//建立程序与h2数据库的连接
public static Connection getconnection() throws SQLException, ClassNotFoundException {
// String url="jdbc:mysql://localhost:3306/test?characterEncoding=utf8";
// String username="root";
// String password="";
// Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:h2:~/H2/test";
String username = "sa";
String password = "";
Class.forName("org.h2.Driver");
//连接H2数据库
Connection con = DriverManager.getConnection(url, username, password); //获取了连接
System.out.println("hear+++++");
return con;
}
//updata是更新数据库数据方法,
public static void updata(int s) {
Statement stmt = null; //
Connection conn = null;
try {
conn = getconnection();
System.out.println("hello");
int p = s + 1; //value数据加一
String UpdateSql = "UPDATE COUNTERS SET COUNTER_VALUE=" + p + " WHERE COUNTER_ID=2"; //数据库语句
int l = conn.createStatement().executeUpdate(UpdateSql); //执行语句
} catch (Exception e) {
// TODO: handle exception
} finally {
try {
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//查找数据
public static User selet() {
Statement stmt = null;
Connection conn = null;
try {
// System.out.println("selet?");
conn = getconnection();
System.out.println(conn.toString());
ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM COUNTERS where COUNTER_ID=2;");//执行的结果给rs
ArrayList<User> us = new ArrayList<>();
while (rs.next()) { //
User user = new User();
user.setCOUNTER_ID(rs.getString("COUNTER_ID"));
user.setCOUNTER_NAME(rs.getString("COUNTER_NAME"));
user.setCOUNTER_VALUE(rs.getString("COUNTER_VALUE"));
us.add(user);
System.out.println(us.toString());
}
return us.get(0);
} catch (Exception e) {
return null;
// TODO: handle exception
} finally {
try {
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//释放连接
public static void release(ResultSet re, Statement sta, Connection con) {
try {
if (re != null) {
re.close();
}
if (sta != null) {
sta.close();
}
if (con != null) {
con.close();
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
windows端测试
浏览器后台端退出H2数据库的连接
然后run as a server得到结果。
我们现在再在后台连接到H2查看数据,可以看到数据一致。
二、 Web应用云部署
2.1 服务器环境配置
2.1.1 Java环境配置
使用X shell远程连接阿里云服务器,命令如下:
[C:\~]$ ssh Paige@47.106.80.46
第一步,使用FileZilla将JDK1.8上传到虚拟机,解压到 /usr/lib/jvm/ 目录下,然后在全局环境变量下添加 Java PATH路径,如下:
export export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64export
export JRE_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
export PATH=$JAVA HOME/bin :$PATH
第二步,验证Java是否配置成功,如图
自此虚拟机Java环境配置成功。
2.1.2 Tomcat服务器配置
第一步,使用FileZilla将Tomcat安装包上传到虚拟机中,然后解压到用户目录下。
第二步,配置Tomcat的Java环境,转到如下目录
Paige@Norton:~$ cd apache-tomcat-9.0.44/bin
然后编辑startup.sh 文件,添加如下行:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:%{JAVA_HOME}/lib:%{JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export TOMCAT_HOME=/home/Paige/apache-tomcat-9.0.44
打开浏览器输入:47.106.80.46:8080 如下图:
自此Tomcat服务器部署成功。
2.2 部署应用
第一步将项目文件打包成 .War包,然后上传到阿里云服务器以下目录中:
/opt/tomcat/apache-tomcat-8.5.68/webapps
然后开启Tomcat服务器:
打开浏览器输入47.106.80.46:8080