文档章节

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

donald121
 donald121
发布于 07/02 00:18
字数 1264
阅读 56
收藏 38

一. 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 :还有很大的优化空间,

1. 把所有的设置改成读取相对路径下的config 文件,那所有的设置可以通过更改config 文件更改;

2. kill session 的语句,不需要导出到文件,直接通过jdbc循环执行即可)

 

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

二. 整个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 也要是可以在这个版本运行的才可以用

2. 选择"JAR in EXE "mode

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

4.设置应用基本属性

(注:ico 文件一定要原生态ico 文件,不可以由其他文件更改后缀改变的,可以通过ps 做一个出来)

64位的执行环境;

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

© 著作权归作者所有

共有 人打赏支持
donald121
粉丝 2
博文 38
码字总数 15032
作品 0
广州
私信 提问
加载中

评论(1)

爱吃窝窝头
爱吃窝窝头
学习了,好东西,我一般都是bat脚本 javaw 调jar就可以了
Maven Eclipse使用

Maven是什么 Maven 主要用于Java平台的项目构建,依赖管理,项目信息管理。 Maven可以做什么 完成Java项目的编译,打包构建 jar包依赖管理 自动化单元测试,生成测试报告 Maven 安装 下载最新...

微流
2016/06/21
0
0
将Java程序作成exe文件的N种方法

使用制作可执行 JAR 文件包 下面就来看看什么是 JAR 文件包吧: a) JAR 文件包 JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。JAR 文件...

楓楪
2014/03/13
0
0
maven---使用maven创建项目

maven简介:maven是apache一个项目管理工具,最大的优点就是可以轻松管理项目依赖,只要手动配置就能添加删除依赖,在使用框架或者其他jar包的工程中非常有用 maven使用: maven使用纯JAVA开...

shadowalker1990
2014/02/25
0
0
压力测试 使用Jmeter进行RPC压力测试

版权声明:本文为博主原创文章,转载请注明来源。开发合作联系luanpenguestc@sina.com https://blog.csdn.net/luanpeng825485697/article/details/83787284 Jmeter 下载地址:http://jmeter....

数据架构师
11/07
0
0
将写好的Java程序生成在任何Windows机器上均可执行的.exe文件

准备工作: 一、将你的Java项目进行打包,有这种将项目生成Jar包的Eclipse的插件(Build Fat Jar); 二、准备好你的图标文件(.ico文件),如果没有可以去http://www.ico.la/用普通图片在线制作...

谭又中
2012/08/01
0
2

没有更多内容

加载失败,请刷新页面

加载更多

我的Linux系统九阴真经

我的Linux系统九阴真经 在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行...

linuxCool
26分钟前
2
0
Python程序员需要知道的30个技巧

1 直接交换两个数字位置 1x, y = 10, 202print(x, y)3x, y = y, x4print(x, y)5#1 (10, 20)6#2 (20, 10) 2 比较运算符的链接 1n = 102result = 1 < n < 203print(result)4# True5result = 1 ......

糖宝lsh
26分钟前
2
0
[LintCode] Linked List Cycle(带环链表)

描述 给定一个链表,判断它是否有环。 样例 给出 -21->10->4->5, tail connects to node index 1,返回 true。 这里解释下,题目的意思,在英文原题中,tail connects to node index 1 表示的...

honeymose
37分钟前
5
0
Android :报错Your project path contains non-ASCII characters.

报错内容如下 Your project path contains non-ASCII characters. This will most likely cause the build to fail on Windows. Please move your project to a different directory. See ht......

lanyu96
48分钟前
5
0
Nginx平滑添加模块

Nginx已经编译安装并运行了一段时间, 然后某一天, 发现需要用到某个模块但当初没有编译, 这个时候怎么办呢? 卸载重新安装肯定可以的, 如果Nginx版本没有变更的话, 则有一个相对平滑的方法来添...

老菜鸟0217
53分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部