百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

tomat+jdk+mysql在windows下的一键安装包

bigegpt 2024-08-21 12:11 2 浏览

最近公司需要我把做完的项目打包,但公司没有相关经验的文档来作为指导参考,作为有科(zuo)学(shi)观(xingZhi)的我,就按项目流程来做这次任务.

需求

  1. Tomcat,MySQL,JDK’;/统统地打进包咯;
  2. 安装完后,能直接运行,实现真正的客户只要一安装完后就能运行.

需求转化

功能需求

  1. Tomcat的执行环境需要jdk,需要先安装jdk.
  2. 工程能够直接运行, 则工程需要的数据库数据能够正确存储到数据库开放用户给工程使用,并且容器tomcat能够正常运行.
  3. 开放端口:操作系统能够开放防火墙端口让外部访问数据库和容器.
  4. MySQL能正确稳定运行
  5. Tomcat能正确稳定运行

所需软件

软件名称软件版本下载地址Tomcat7.059(64位)http://tomcat.apache.org/download-70.cgiMySQL5.6.25-winx64http://dev.mysql.com/downloads/mysql/InnoSetup5.5.5http://jrsoftware.org/isdl.php

下载地址指到下载页面,需要读者打开自己选择下载.

设计

在需求转换中,包含一个隐形需求却MySQL,JAVA,和配置命令是有系统的局限限制的.所以不同的系统应该要有不同的安装包.在选择打包软件上综合各种的因素我最终选择了”Inno Setup Compiler”,这个不是把这篇博文的重点.

1. Tomcat准备

Tomcat的配置中,我设计成把JDK和Tomcat绑定在一起,因此把JAVA的JDK文件夹放在tomcat的bin目录下,然后在bin目录下创建setenv.bat文件.

1.setnv.bat 的内容为:

set "JAVA_HOME=%~dp0\Java\jdk1.6.0_45"
set "JAVA_OPTS= -Dfile.encoding=UTF-8 -Duser.timezone=GMT+8"
1
2
3

这里的JAVA_HOME,在catalina.bat文件里要求必须使用JDK(Java Develpment Kit){1},且JAVA_OPTS是可选.

2.Service.bat内容

在tomcat的bin目录下的Service.bat文件内容下”:gotJdkHome” 节下添加下面内容:

:gotJdkHome
set "%JAVA_HOME%=%~dp0\Java\jdk1.6.0_45"
set "JRE_HOME="%JAVA_HOME%\jre"
1
2
3
4

变成

:gotJdkHome
set "%JAVA_HOME%=%~dp0\Java\jdk1.6.0_45"
set "JRE_HOME="%JAVA_HOME%\jre"
if not exist "%JAVA_HOME%\jre\bin\java.exe" goto noJavaHome 
if not exist "%JAVA_HOME%\jre\bin\javaw.exe" goto noJavaHome
if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome
if not "%JRE_HOME%" == "" goto okJavaHome
set "JRE_HOME=%JAVA_HOME%\jre"
goto okJavaHome
1
2
3
4
5
6
7
8
9
10

在:gotJreHome节下添加下面的内容:

:gotJreHome
set "JRE_HOME= %GCIEMS_JAVA%\jre"
1
2
3

变成

:gotJreHome
set "JRE_HOME= %GCIEMS_JAVA%\jre"
if not exist "%JRE_HOME%\bin\java.exe" goto noJavaHome
if not exist "%JRE_HOME%\bin\javaw.exe" goto noJavaHome
1
2
3
4
5

在:installed节下添加下面的内容:

sc config tomcat7w_Gciems start=auto
net start tomcat7w_Gciems
1
2
3

变成

:installed
echo The service '%SERVICE_NAME%' has been installed.
sc config tomcat7w_Gciems start=auto
net start tomcat7w_Gciems
:installed
echo The service '%SERVICE_NAME%' has been installed.
sc config Tomcat7 start=auto
net start Tomcat7
1
2
3
4
5
6
7
8
9
10
11

这段主要是启动Tomcat7的Service,和把Tomcat7设置成为自动启动

3.在bin创建启动服务.bat

“%~dp0%\service.bat” install

我个人不喜欢用 %cd%这个命令,会影响到目录的判断,产生误会.

4.在bin创建关闭服务.bat

在下面添加代码

netsh advfirewall firewall delete rule name=”Tomcat_Gciems端口” dir=in protocol=TCP localport=8080

echo 关闭端口…成功

net stop tomcat7

sc.exe delete tomcat7

这段代码主要是删除tomcat 服务.

5.放置项目包和缓冲清理

  • 把项目的war包,或者部署包直接放置到Tomcat目录下的webapps目录下,
  • 删除logs目录下的文件
  • 删除work/Catalina/localhost目录下的文件
  • 删除temp目录下的文件

2. MySQL准备

1.数据库SQL

我用 MySQLMigrationTool 对项目的数据库经行转换成SQLCreates.sql、和Inserts.sql,然后放在MySQL目录下的data 目录下.

2.用户SQL

我用 MySQLMigrationTool 对数据库下的MySQL数据库下的db表和 user表转换成SQL,命名为InitUserInformations.sql,然后放在MySQL目录下的data 目录下.

3.mysql配置文档

在tomcat目录下my-default.ini,修改mysqld章节成为:

[mysqld]
basedir =
datadir =
port =3306
# server_id = .....
1
2
3
4
5
6
7

basedir 是指向mysql的目录,datadir是指向数据库目录地址,port是指mysql 的服务端口

4.启动服务

在MySQL 的bin目录下创建启动服务.bat,加入下面的代码

cd /d %~dp0

“%cd%\mysqld.exe” –install MySQL_Gciems

net start MySQL_Gciems

sc config MySQL_Gciems start=auto

echo 安装完毕

“%cd%\mysqladmin” -u root password jiesaigciems

echo 修改密码完毕

cd ..

“%cd%\bin\mysql.exe” -uroot -pjiesaigciems < “%cd%\data\Creates.sql”

“%cd%\bin\mysql.exe” -uroot -pjiesaigciems < “%cd%\data\Inserts.sql”

echo 建表完毕

“%cd%\bin\mysql.exe” -uroot -pjiesaigciems < use mysql < “%cd%\data\InitUserInformations.sql”

echo 建立新用户完毕

3. 开放端口的设置

1.开放Tomcat防火墙端口

在Tomcat的bin下的启动服务.bat添加下面的代码,注意不能加在.. service.bat install 之后,因为在 service.bat 的 goto end; 这段代码,会直接让bat文件结束,所以要再Service.bat install之前.

netsh advfirewall firewall add rule name="Tomcat_Gciems端口" dir=in protocol=TCP localport=8080 action=allow
"%~dp0%\service.bat" install
1
2
3

2.关闭Tomcat防火墙端口

在Tomcat 的bin目录下的关闭服务.bat加入下面的代码

netsh advfirewall firewall delete rule name="Tomcat_Gciems端口" dir=in protocol=TCP localport=8080 
echo 关闭端口...成功
1
2
3

3.MySQL开放防火墙端口

在MySQL 的 bin目录下的打开服务.bat加入下面的代码:

netsh advfirewall firewall add rule name="MySQL_Gciems端口" dir=in protocol=TCP localport=3066 action=allow
echo 增加防火墙端口成功
1
2
3

4.MySQL关闭防火墙端口

在MySQL的bin目录下的关闭服务.bat 加入下面的代码:

netsh advfirewall firewall delete rule name="MySQL_Gciems端口" dir=in protocol=TCP localport=3306 
net stop MySQL_Gciems
1
2
3

4.Inno Setup 中的设置

1.初始化

打开Inno Setup软件,在File运行new,创建新的项目.

按照它的提示填写信息,直到第三步Application Files的时候


2.添加MySQL系统环境变量以及数据库配置

在Add folder 按钮中添加Tomcat 和MySQL的 目录.

[Code]
procedure SetEnv(aEnvName, aEnvValue: string; aIsInstall, aIsInsForAllUser: Boolean);
var
sOrgValue: string;
S1, sFileName: string;
bRetValue, bInsForAllUser: Boolean;
SL: TStringList;
x: integer;
begin
bInsForAllUser := aIsInsForAllUser;
if UsingWinNT then
begin
 if bInsForAllUser then
 bRetValue := RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', aEnvName, sOrgValue)
 else
 bRetValue := RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', aEnvName, sOrgValue)
 sOrgValue := Trim(sOrgValue);
 begin
 S1 := aEnvValue; //环境变量地址
 if pos(Uppercase(s1), Uppercase(sOrgValue)) = 0 then //还没有加入到系统环境时
 begin
 if aIsInstall then
 begin
 x := Length(sOrgValue);
 if (x > 0) and (StringOfChar(sOrgValue[x], 1) <> ';') then
 sOrgValue := sOrgValue + ';';
 sOrgValue := sOrgValue + S1;
 end;
 end else
 begin
 if not aIsInstall then
 begin
 StringChangeEx(sOrgValue, S1 + ';', '', True);
 StringChangeEx(sOrgValue, S1, '', True);
 end;
 end;
 if bInsForAllUser then //系统环境变量
 RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', aEnvName, sOrgValue)
 else
 begin
 if (not aIsInstall) and (Trim(sOrgValue) = '') then
 RegDeleteValue(HKEY_CURRENT_USER, 'Environment', aEnvName)
 else
 RegWriteStringValue(HKEY_CURRENT_USER, 'Environment', aEnvName, sOrgValue);
 end;
 end;
end else //非NT 系统,如Win98
begin
 SL := TStringList.Create;
 try
 sFileName := ExpandConstant('{sd}\autoexec.bat');
 LoadStringFromFile(sFileName, S1);
 SL.Text := s1;
 s1 := '"' + aEnvValue + '"';
 s1 := 'set '+aEnvName +'=%path%;' + s1 ;
 bRetValue := False;
 x := SL.IndexOf(s1);
 if x = -1 then
 begin
 if aIsInstall then
 begin
 SL.Add(s1);
 bRetValue := True;
 end;
 end else //还没添加
 if not aIsInstall then
 begin
 SL.Delete(x);
 bRetValue := True;
 end;
 if bRetValue then
 SL.SaveToFile(sFileName);
 finally
 SL.free;
 end;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);//添加环境变量
begin
if CurStep = ssPostInstall then
begin
 SetEnv('path',ExpandConstant('{app}/mysql-5.6.25-winx64/bin;'),true,true); //在这儿重写成你的MySQL 目录{app}是指你安装的父目录,一定在这儿调用,安装完无须重启,立即生效,
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);//删除环境变量
begin
SetEnv('path',ExpandConstant('{app}/mysql-5.6.25-winx64/bin;'),false,true);//同上
//SetEnv('path','{app}/bin',false,true);
end;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

[INI]

Filename:”{app}\mysql-5.6.25-winx64\my-default.ini”;Section:”mysqld”;Key:”basedir”; String:”{app}\mysql-5.6.25-winx64”

Filename:”{app}\mysql-5.6.25-winx64\my-default.ini”;Section:”mysqld”;Key:”datadir”; String:”{app}\mysql-5.6.25-winx64\data”

3.安装后启动应用

[Run]

Filename: “{app}\apache-tomcat-7.0.59-windows-x64\apache-tomcat-7.0.59\bin\启动服务.bat”;

Filename: “{app}\mysql-5.6.25-winx64\bin\启动服务.bat”;

4.卸载前启动的应用

[UninstallRun]

Filename: “{app}\apache-tomcat-7.0.59-windows-x64\apache-tomcat-7.0.59\bin\卸载服务.bat”;

Filename: “{app}\mysql-5.6.25-winx64\bin\卸载服务.bat”;

5.启动每次安装或者卸载时请求系统管理员权限

这步骤很重要,如果安装的时候没有该权限,则会发生tomcat注册不到服务,MySQL 运行不了等错误.

“请求系统管理员权限”,需要在安装脚本,的tools->Options勾上”Always Launch Setup/Uninstall as administrator”就可以了.


6.验证64位支持

我用的Tomcat,MySQL 都是64位的,32位的不支持.为了减少错误,需要在[Setup]章节中添加

ArchitecturesAllowed=x64;
 "ArchitecturesInstallIn64BitMode=x64" requests that the install be
; done in "64-bit mode" on x64, meaning it should use the native
; 64-bit Program Files directory and the 64-bit view of the registry.
; On all other architectures it will install in "32-bit mode".
ArchitecturesInstallIn64BitMode=x64;
1
2
3
4
5
6
7

7.编译

按菜单的Build-> Compile ,或按 “Ctrl+F9” 经行编译,编译的文件默认跟脚本同一目录下的output 目录下.

THE END

Refer

[1]Catalina.bat,tomcat的bin目录45行

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...