打包Java项目(线程管理)生成可安装的exe运行文件()

一. java 代码:

package sessionMrg;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import org.apache.commons.logging.*;
import java.sql.SQLException;
import java.util.Properties;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;


public class SessionMrg {
	// JDBC 驱动名及数据库URL
	private static  String driver ;
	private static  String url ;

	// 数据库的用户名和密码
	private static  String username  ;
	private static   String password  ;
	// 定义数据库连接
	private static Connection conn = null;
	// 定义sql语句执行对象
	private PreparedStatement pstmt;
	// 定义查询返回的结果集合
	private ResultSet rs;
	//定义路径
	private static String filepath="D:/MySQL/a.sql";
	//定义睡眠时间
	private static int sleepTime = 600000;
	private static Log log = LogFactory.getLog(SessionMrg.class) ;

	/**
	 * 经过静态代码块加载DBHelper.properties
	 */
	static{
		loadConfig();
	}
	/**
	 * 加载数据库配置信息DBHepler.properties,并给相关的属性复制
	 */
	public static void loadConfig(){
		try {
			InputStream inStream =SessionMrg.class.getResourceAsStream("/config/DBHelper.properties");
			Properties prop=new Properties();
			prop.load(inStream);
			username=prop.getProperty("DBHelper.username");
			password=prop.getProperty("DBHelper.password");
			driver=prop.getProperty("DBHelper.driver");
			url=prop.getProperty("DBHelper.url");
			System.out.println(url);
			System.out.println(password);
		} catch (Exception e) {
			log.info(e.getMessage());
			//建议将异常信息经过throw的抛给调用者处理
			throw new RuntimeException("读取数据库配置文件异常!",e);
		}
	}

	/**
	 * 获取数据库连接
	 * 
	 * @return 数据库连接
	 */
	public Connection getConnection() {
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
		} catch (Exception e) {
			log.info(e.getMessage());
		}
		return conn;
	}



	/**
	 * 释放资源
	 * @param args
	 */
	public void releaseConn(){
		if(rs !=null){
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				log.info(e.getMessage());
			}
		}
		if(pstmt !=null){
			try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				log.info(e.getMessage());
			}
		}
		if(conn !=null){
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				log.info(e.getMessage());
			}
		}
	}
	/**
	 * 删除文件
	 * @param args
	 */
	public static void deleteFile(String sPath) {    
	    File file = new File(sPath);  
	    // 路径为文件且不为空则进行删除  
	    if (file.isFile() && file.exists()) {  
	        if(file.delete()){  
	        log.info("文件被删除,能够继续执行");
	        System.out.println("文件被删除,能够继续执行");
	        }
	        else{
	        	System.out.println("文件删除失败,程序必定报错");
	        	log.info("文件删除失败,程序必定报错");
	        }
	    }
	    else{
	    	System.out.println("文件不存在,继续执行");
	    	log.info("文件不存在,继续执行");
	    }
	    
	}  
	/**
	 * kill sessions
	 * @param args
	 */
	public static void KillSession(){
		try {
			Connection conn = new SessionMrg().getConnection();
			if (conn != null) {
				System.out.println("数据库连接正常!");
				log.info("数据库连接正常!");
			} else {
				System.out.println("数据库连接异常!");
				log.info("数据库连接异常!");
			}
			deleteFile(filepath);
			
			//打开链接
			Statement stmt =null;
			stmt =(Statement) conn.createStatement();
			String sql;
			sql = "select concat('KILL ',id,';') from information_schema.processlist where  command ='Sleep' and TIME > 1000 into outfile '"+filepath+"';";
			ResultSet rs = stmt.executeQuery(sql);
			System.out.println("生成a.sql");
			log.info("生成a.sql");
			rs.close();
			

			//按行读取文件
			//BufferedReader是能够按行读取文件  
	        FileInputStream inputStream = new FileInputStream(filepath);  
	        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
	        String sql2 = null;
	        ResultSet rs2 = null ;
	        while((sql2 = bufferedReader.readLine()) != null)  
	        {  
	        	rs2 = null;
	        	rs2 = stmt.executeQuery(sql2);
	        	System.out.println(sql2);
	        	log.info(sql2);
	        } 
	        if (rs2!=null){
	        	rs2.close();
	        }else{
	        	System.out.println("没有线程须要删除");
	        	log.info("没有线程须要删除");
	        }
	        bufferedReader.close();
            stmt.close();
            conn.close();
		} catch (Exception ex) {
			// TODO Auto-generated catch block
			log.info(ex.getMessage());
		}
	}
	/**
	 * 每10分钟kill 一次线程
	 * @param args
	 */
	public static void killSessionByTime(){
		while(true){
			try {
				KillSession();
				Thread.sleep(sleepTime);
				} 
			catch (InterruptedException e) {
				log.info(e.getMessage());
				}
		}
	}

	

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

	}
}

(ps :还有很大的优化空间,html

1. 把全部的设置改为读取相对路径下的config 文件,那全部的设置能够经过更改config 文件更改;java

2. kill session 的语句,不须要导出到文件,直接经过jdbc循环执行便可)mysql

 

这个config 文件只能放在src的目录下sql

二. 整个java项目导出成jar

1. 选择导出runable jar ,直接导出jar file 可能不包括jar import 的jar 包

2.导出选项

3.用cmd 尝试运行jar 包

cmd 到jar 包目录,而后 java -jar killsession.jar数据库

三. 生成可执行exe 文件

(注:只是exe ,要在java 对应版本的jdk环境下才能够执行)

1. 下载安装最新版本的exe4j 

目前java的环境是 jdk 1.8 因此下载的exe4j 也要是能够在这个版本运行的才能够用apache

2. 选择"JAR in EXE "mode

3. 设置输出路径和应用简称

4.设置应用基本属性

(注:ico 文件必定要原生态ico 文件,不能够由其余文件更改后缀改变的,能够经过ps 作一个出来)session

64位的执行环境;jvm

5. 设置编码方式,执行路径,执行main 方法的class

设置编码格式为UTF-8, 输入内容是:-Dfile.encoding=utf-8优化

6.设置程序运行时须要的jre 版本范围,设置jre 相对路径

因为建立的exe 须要在jvm 上运行, 用户只能安装jdk很是麻烦. 能够打包jre 文件成为可安装的exe 就比较方便网站

 

7.选择程序执行时,会显示在桌面的图标

8. 后面所有点next 便可

四. 生成可安装的exe,方便部署在没有安装jdk 的电脑

1.安装Inno setup 软件

2. 准备一下项目在一个文件夹里面

如这里的 SessionMrg, 等下要添加整个文件夹

3. 运行Inno setup 建立一个项目

4. 录入安装后自动建立的文件名, 版本 , 公司信息

5. 添加须要运行的exe ,以及jre 

6.安装时,会建立开始菜单和桌面的快捷方式

7.录入三个空的txt

(ps: 理论上会有用途)

8. 设置语言

9. 可安装exe 一些设置

10. 点yes

11. 点是

12. 点否

开始

 

参考网站:  https://www.cnblogs.com/lsy-blogs/p/7668425.html

相关文章
相关标签/搜索