前段时间需要弄一个自动安装J2EE工程的东西,想到用installanywhere,不过还想用更简单的方法,所以就用到了用批处理文件部署J2EE项目,用到的数据库为Mysql,原理很简单就是把注册Mysql服务、启动Tomcat、配置JAVA_HOME、配置PATH这些命令都堆到了一个bat文件下,原来一牛逼哥们儿已经实现了放到硬盘的固定目录下实现这样的功能,之后在本人的狗尾续貂下已经实现放到硬盘的任务目录都能执行,下边记录一下总过程:

1,文件准备,文件目录如下图:

Key documents

相信看到这几个文件都不会陌生,这几个文件的重点就在于startup.bat,这个文件中聚集了所有的命令,jdk就不说了;mysql为noinstall版本,数据库已经创建完毕,并且已经导入数据,如果noinstall-mysql还有疑问的话请参考本站的Mysql noinstall版本的配置和使用;tomcat的webapps下已经放置了将要部署的项目;index.html中的内容为:

<html>
  <head></head>
  <body>
    <script>window.location.href='http://localhost:8088/项目名称';</script>
  </body>
</html>
<!--不再赘述-->

2,startup.bat详解,一下是bat文件中的全部内容,注释中会说的更明白一点:

 
@echo off
rem echo off命令关闭命令在dos窗口中的显示,如果需要显示修改为echo on
rem @echo off行的上面最好空一行,因为测试发现如果它放到第一行的话有时候会失效

rem 以下两行代码的功能是获取当前路径,并把当前路径付给变量"INSTALL_HOME"
setlocal enabledelayedexpansion
set "INSTALL_HOME=%~dp0"

rem 以下三行代码的功能是清空mysql目录下my.ini中的内容,
rem 因为路径是可变的,所以需要修改my.ini中的内容,
rem 向文件中插入内容好像不是很容易实现,所以干脆全部清空,然后再向中写数据
for /f "delims=" %%i in ('dir/b "%INSTALL_HOME%\mysql\my.ini"') do call :del_ "%%i" 
goto :eof 
:del_ 

rem 以下N行代码的功能配置my.ini
>c:\tmp1.tmp (
	echo [WinMySQLAdmin] 
	echo Server=%INSTALL_HOME%\mysql\mysqld-nt.exe
	echo [mysqld] 
	echo basedir=%INSTALL_HOME%\mysql
	echo datadir=%INSTALL_HOME%\mysql\data
	echo [client]
	echo port		= 3306
	echo socket		= /tmp/mysql.sock
	echo default-character-set=utf8
	echo [mysqld]
	echo port		= 3306
	echo socket		= /tmp/mysql.sock
	echo skip-locking
	echo key_buffer = 16K
	echo max_allowed_packet = 12M
	echo table_cache = 4
	echo sort_buffer_size = 64K
	echo read_buffer_size = 256K
	echo read_rnd_buffer_size = 256K
	echo net_buffer_length = 2K
	echo thread_stack = 64K
	echo default-character-set=utf8
	echo default-storage-engine=innodb
	echo server-id	= 1
	echo [mysqldump]
	echo quick
	echo max_allowed_packet = 16M
	echo [mysql]
	echo no-auto-rehash
	echo [isamchk]
	echo key_buffer = 8M
	echo sort_buffer_size = 8M
	echo [myisamchk]
	echo key_buffer = 8M
	echo sort_buffer_size = 8M
	echo [mysqlhotcopy]
	echo interactive-timeout
)
for /f "tokens=* delims=" %%i in ('dir /b %INSTALL_HOME%\mysql\my.ini') do (
	copy c:\tmp1.tmp+"%INSTALL_HOME%\mysql\%%i" c:\tmp2.tmp /y >nul
	copy c:\tmp2.tmp "%INSTALL_HOME%\mysql\%%i" /y >nul
)
del c:\tmp1.tmp /f /q
del c:\tmp2.tmp /f /q

rem 设置PATH、CLASSPATH、CATALINA_HOME、JAVA_HOME,
rem 其中路径都是相对于“INSTALL_HOME”的,可见获取这个路径的重要性
set PATH=%INSTALL_HOME%\jdk\bin;%PATH%
set CLASSPATH=%INSTALL_HOME%\jdk\jre\lib\rt.jar;.
set CATALINA_HOME=%INSTALL_HOME%\tomcat
set JAVA_HOME=%INSTALL_HOME%\jdk

rem 在测试中得知sc命令有时候在运用时,需要依赖telnet服务,
rem 所以将telnet服务设置为自动并且启动它
sc config TlntSvr start= auto 
net start telnet

rem "noinstallmysql"是将要注册的mysql服务名称,
rem 所以安全起见不管机器上有没有这个服务,先停掉,然后再删掉
net stop noinstallmysql
sc delete noinstallmysql 

rem 注册mysql服务,名称为“noinstallmysql”
rem 以下两行在执行时请务必放到一行中,要不会执行出错
Call "%INSTALL_HOME%/mysql/bin/mysqld-nt" --install noinstallmysql 
                                  --defaults-file=%INSTALL_HOME%\mysql\my.ini

rem 配置mysql服务,设置为自动
sc config noinstallmysql start= auto

rem 启动mysql服务
net start noinstallmysql

rem 进入tomcat下的bin目录,启动它,大功告成!
cd %INSTALL_HOME%\tomcat\bin
call %INSTALL_HOME%\tomcat\bin\startup.bat

启动成功之后,还记得那个index.html吗,直接点击就可以进入你的项目,如果启动不成功的话自己调整一下或者mail给我一起交流都可以。E-mail:ripflowers@gmail.com,OK,下班走人。