目录
附项目websocket-chart的Github地址
十六、打jar包
1、项目目录结构
2、多个class文件打jar包
(1)java文件中未使用其他jar包
(2)java文件中使用maven导入的jar包
I、初始配置
II、配置jar包
》Project Structure>Artifacts》右侧 选中websocket-chart:jar》
修改项目包名clientToServer 注意,此处必须一下一下使用键盘按键Backspace删除字符,不能直接选中删除。
包导出位置E:\tempJarFolder
》切换Output Layout标签》点击》
》切换Output Layout标签》点击》File》
找到并选中工作空间项目websocket-chart下的文件**.class》点击OK》
D:\developsoft\javaweb\IDEA\software\idea-win64\ideaWorkspace\zLearnProjects\websocket-chart\target\classes\com\zxw\websocket\UserWebSocketClient.class
D:\developsoft\javaweb\IDEA\software\idea-win64\ideaWorkspace\zLearnProjects\websocket-chart\target\classes\com\zxw\websocket\UserWebSocketClientToServer.class
(3)java文件中使用lib下第三方jar包
3、项目打jar包
4、执行导出jar包
IntelliJ IDEA 2019.3 x64(双击桌面软件)》Build》点击Artifacts...》
5、导出jar包成功
6、测试jar包是否正常
(1)先启动项目websocket-chart
(2.1)DOS命令运行jar包
方式1》快捷键win+R》输入cmd》
(2.2)Mysql数据库触发器运行jar包
数据库表userdo的设计
安装Mysql Udf sys_exec函数,用来调用外部程序、系统命令、shell脚本
##----查询MySQL数据库的版本
SELECT VERSION();
##----使用MySQL数据库mysql
USE mysql;
##----mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效。
flush privileges;
##----查询MySQL数据库的安装路径
select @@basedir;
##----查询MySQL数据库的插件目录路径
SHOW VARIABLES LIKE 'plugin_dir';
#----查询MySQL数据库的插件》字段library值为null,就表示为内置的plugin;否则为外部的plugin。
show plugins;
##----解决MySQL UDF sys_exec()不起作用
DROP FUNCTION IF EXISTS lib_mysqludf_sys_info;
DROP FUNCTION IF EXISTS sys_get;
DROP FUNCTION IF EXISTS sys_set;
DROP FUNCTION IF EXISTS sys_exec;
DROP FUNCTION IF EXISTS sys_eval;
INSTALL PLUGIN lib_mysqludf_sys_info SONAME 'lib_mysqludf_sys_64.dll';
CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys_64.dll';
CREATE FUNCTION sys_get RETURNS string SONAME 'lib_mysqludf_sys_64.dll';
CREATE FUNCTION sys_set RETURNS int SONAME 'lib_mysqludf_sys_64.dll';
CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys_64.dll';
CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys_64.dll';
##查看创建的自定义函数sys_eval()
select * from mysql.func where name = 'sys_eval';
#使用系统命令
select sys_eval();
#查看 secure_file_priv 的值
show global variables like 'secure%';
已建表userdo的前提下,执行以下脚本来创建触发器
sql代码有问题XXXX----修改中
##----使用MySQL数据库jpa_norm_db_test
use jpa_norm_db_test;
##----MySQL默认使用“;”作为分隔符,SQL语句遇到“;”就会提交。而我们的触发器中可能会有多个“;”符,为了防止触发器创建语句过早的提交,我们需要临时修改MySQL分隔符,创建完后,再将分隔符改回来。
DELIMITER $
##----删除前先判断触发器userdoTrigger是否存在
drop trigger if exists userdoTrigger$
##----创建表userdo 的 INSERT触发器;
#CREATE 触发器名字
CREATE TRIGGER userdoTrigger
#对表userdo,进行的操作
AFTER INSERT ON userdo
#加了for each row表示是行级触发器,每次插入记录都会触发;如果不加,则是语句级触发器,只在执行insert语句的时候触发。
FOR EACH ROW
#触发执行的SQL语句内容,一般以begin开头,end结尾;begin SQL代码段 end,相当于{SQL代码段}
BEGIN
#;标识单句sql的结束,跟批处理无关。对一些用处较多、易造成歧义的关键字,最好以;标志,比如with。
#go标识一段Transact-SQL语句的结束,批处理|批量提交sql,系统处理完上一段功能,再去处理下一批。
#declare ** 声明的是局部变量,局部变量的作用域是其被声明时所在批处理;set @** 声明的是全局变量。
#声明并初始化,多个局部变量str1、cmdStr3
declare str1,cmdStr3 varchar(255) DEFAULT null;
#将插入的表userdo|new(old,new都是代表当前操作的记录行,也可以理解成表名)的字段user_name的值,赋值给局部变量str1
set str1=(select new.user_name from new);
#声明全局变量@str2
#将插入的表userdo|new(old,new都是代表当前操作的记录行,也可以理解成表名)的字段user_name的值,赋值给全局变量@str2
set @str2=(select new.user_name from new);
#将命令行字符串+str1,赋值给cmdStr3(cmd窗口的命令行,作用是启动|调用外部jar包程序clientToServer.jar)
set cmdStr3='java -jar E:\tempJarFolder\clientToServer.jar '+str1;
#Mysql Udf sys_exec函数,调用外部程序、系统命令、shell脚本
-- exec sys_exec(cmdStr3);
END$
DELIMITER ;
(2.3)SqlServer数据库触发器运行jar包