打包jar文件后的spring部署及hibernate自动建表经验总结

楔子

用spring+hibernate做一个服务器运行程序,在部署到服务器时(打包成jar,在window server2008下运行),出现了以下两个纠结问题:

1. 加载不了Spring容器

2. hibernate.hbm2ddl.auto 到了服务器不能自动建表

困扰了两个小时,终于一一击破,这里就自己的处理经验作一个简单的说明。


说明

整个项目中bean的定义,绝大部分都是用注解形式,在本地运行正常。


加载不了Spring容器

之前想过用exe4j等工具导出为exe文件,但是,不好使。最终敲定用批处理的方式去运行整个程序(因为是window服务器)。

刚刚开始是这样导出为jar文件:





这样导出的jar很奇怪,总是提示找不到第三方class,想想应该是Class-path没有配置正确。但是MANIFEST.MF文件里写classpath又比较麻烦,就想着eclipse能不能帮我生成这个MANIFEST.MF文件。试了一下以下这种方式,果然可以:





选择“copy required libraries into a sub-folder next to the generated JAR”(将需要的lib文件复制到目标JAR包所在目录的子文件夹中)

然后就可以看到生成了 nerSpider.jar 以及一个 nerveSpider_lib 的文件夹(里面就是我们需要用到的jar包),然后写一个bat去运行我们的jar吧:

 

path=%path%;%cd%\jre6\bin@java -jar nerveSpider_1.2.0.jarpause


先设置jre的路径,然后执行 java -jar

 

我们再看看 MANIFEST.MF 文件:

 

Manifest-Version: 1.0
Class-Path: . nerveSpider_lib/antlr-2.7.6.jar nerveSpider_lib/jsoup-1.7.2.jar nerveSpider_lib/spring-context-support-3.2.2-javadoc.jar nerveSpider_lib/spring-beans-3.2.2.jar nerveSpider_lib/spring-jdbc-3.2.2.jar nerveSpider_lib/spring-expression-3.2.2-sources.jar nerveSpider_lib/aopalliance.jar nerveSpider_lib/spring-aop-3.2.2-javadoc.jar nerveSpider_lib/slf4j-api-1.6.1.jar nerveSpider_lib/spring-aop-3.2.2-sources.jar nerveSpider_lib/hibernate-jpa-2.0-api-1.0.1.Final.jar nerveSpider_lib/spring-context-support-3.2.2.jar nerveSpider_lib/hibernate3.jar nerveSpider_lib/httpcore-4.2.2.jar nerveSpider_lib/commons-pool-1.5.4.jar nerveSpider_lib/spring-context-support-3.2.2-sources.jar nerveSpider_lib/slf4j-nop-1.6.1.jar nerveSpider_lib/spring-orm-3.2.2-javadoc.jar nerveSpider_lib/commons-logging-1.1.1.jar nerveSpider_lib/spring-aspects-3.2.2.jar nerveSpider_lib/spring-aspects-3.2.2-javadoc.jar nerveSpider_lib/spring-jdbc-3.2.2-javadoc.jar nerveSpider_lib/spring-jdbc-3.2.2-sources.jar nerveSpider_lib/spring-tx-3.2.2-javadoc.jar nerveSpider_lib/spring-core-3.2.2-sources.jar nerveSpider_lib/spring-core-3.2.2.jar nerveSpider_lib/spring-expression-3.2.2-javadoc.jar nerveSpider_lib/spring-orm-3.2.2-sources.jar nerveSpider_lib/spring-expression-3.2.2.jar nerveSpider_lib/spring-tx-3.2.2-sources.jar nerveSpider_lib/spring-context-3.2.2.jar nerveSpider_lib/commons-collections-3.1.jar nerveSpider_lib/httpclient-4.2.3.jar nerveSpider_lib/spring-orm-3.2.2.jar nerveSpider_lib/commons-dbcp-1.4.jar nerveSpider_lib/spring-tx-3.2.2.jar nerveSpider_lib/spring-beans-3.2.2-javadoc.jar nerveSpider_lib/mysql-connector-java-5.1.13-bin.jar nerveSpider_lib/spring-build-src-3.2.2.jar nerveSpider_lib/spring-aop-3.2.2.jar nerveSpider_lib/spring-aspects-3.2.2-sources.jar nerveSpider_lib/jta-1.1.jar nerveSpider_lib/json_simple-1.1.jar nerveSpider_lib/spring-core-3.2.2-javadoc.jar nerveSpider_lib/dom4j-1.6.1.jar nerveSpider_lib/spring-beans-3.2.2-sources.jar nerveSpider_lib/javassist-3.12.0.GA.jar
Main-Class: com.nerve.sprider.ui.Start


是吧,如果自己写,很蛋疼吧=.=

 


关于 hibernate.hbm2ddl.auto 自动建表

对于 hibernate.hbm2ddl.auto 的值设置,大家应该都了解,常用的就是 update。但是,我部署到服务器后,数据表没有创建,如果将hibernate.hbm2ddl.auto设置为 create,那么数据表会被删除,但是没有被新建。由此可见,配置是成功的了,只是在建表时,出错了。


先看一下在spring的配置文件中对于 sessionFactory 的定义:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialecthibernate.show_sql=truehibernate.format_sql=falsehibernate.hbm2ddl.auto=updatehibernate.jdbc.batch_size=20<!--hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider--><!-- cache.use_second_level_cache=truehibernate.search.default.directory_provider=org.hibernate.search.store.FSDirectoryProviderhibernate.search.default.indexBase=E:/lucene/index--></value></property><!-- - <property name="cacheProvider"><ref local="cacheProvider"/></property>--><property name="packagesToScan" value="com.nerve.sprider.domain.db"/>
</bean>

  


google了一阵,发现有同样问题的人不少,只是大家的解决方法不尽相同,并没有得到答案。一时茫然。在看配置文件时,突然看到了 

 

hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

这一行,啊。会不会是他!接着将 以上语句改成:

 

 

hibernate.dialect=org.hibernate.dialect.MySQLDialect

再次运行,数据表已经正常了。

 

一下子醒悟过来,因为本地的数据库一直是设置了 InnoDB引擎,但是服务器中并没有设置,所以造成了数据表无法成功创建。


对于mysql储存引擎的说明,这里有一个详细的文章:http://javabkb.iteye.com/blog/1441197




转载于:https://www.cnblogs.com/nerve/archive/2013/05/21/3185423.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言非线程安全函数引发的BUG一列

公司的机器最近遇到一个bug(其实这个bug一年前就出现过,只是未引起重视),现象是这样的:在生产环境中,用户连续打印票的时候,中间某张票的一个时间可能会出问题,该时间本来是一个未来的时间,却被打印成了系统当前的时间.其他同事认为是传入的参数出错了,加了大量的调试信息和日志…

我是一个线程 [转]

我是一个线程&#xff0c;我一出生就被编了个号&#xff1a;0x3704&#xff0c;然后被领到一个昏暗的屋子里&#xff0c;在这里我发现了很多和我一模一样的同伴。 我身边的同伴0x6900 待的时间比较长&#xff0c;他带着沧桑的口气对我说&#xff1a;“我们线程的宿命就是处理包…

自动化运维之–Cobbler

Cobbler 自动化 Cobbler简介 Cobbler是一个快速网络安装linux的服务&#xff0c;而且在经过调整也可以支持网络安装windows。该工具使用python开发&#xff0c;小巧轻便&#xff08;才15k行python代码&#xff09;&#xff0c;使用简单的命令即可完成PXE网络安装环境的配置&…

基于VC++6.0的DLL开发

原文地址&#xff1a;http://blog.163.com/twnhr126/blog/static/78927547200910254346804/ 基于VC6.0的DLL开发 最近在开发一个基于网络的模块&#xff0c;目标是将这个在CAsyncSocket基础上开发的扩展类&#xff0c;进行有效的封装&#xff0c;向应用程序提供模块化的功能&a…

开源jumpserver 堡垒机搭建

一、环境 CentOS 6.x x86_64 mini service iptables stop 关闭SELinux的方法&#xff1a; 修改/etc/selinux/config文件中的SELINUX”” 为 disabled &#xff0c;然后重启。 如果不想重启系统&#xff0c;使用命令setenforce 0 1.指定yum源 wget -O /etc/yum.repos.d/e…

Standard Driver Routines(标准驱动程序)

标准驱动程序 This section describes the required and optional routines that you must implement in your driver to respond to calls from Windows or other drivers. 本节介绍当驱动被Windows或其它驱动程序调用时&#xff0c;为了做出适当的回应&#xff0c;你的驱动必…

Shell 变量及函数讲解 [2]

Shell 变量的输入 Shell变量除了可以直接赋值或脚本传参外&#xff0c;还可以使用read命令从标准输入获得&#xff0c;read为bash内置命令&#xff0c;可以通过help read查看帮助【语法格式】read [参数] [变量名]【常用参数】-p prompt&#xff1a;设置提示信息-t timeout&…

python实例化次数怎么算,我需要一个Python类来跟踪它被实例化的次数

I need a class that works like this:>>> aFoo()>>> bFoo()>>> cFoo()>>> c.i3Here is my try:class Foo(object):i 0def __init__(self):Foo.i 1It works as required, but I wonder if there is a more pythonic way to do it.解决方…

多个域名要选择合适的SSL证书

一般来讲&#xff0c;一个网站&#xff08;一个域名&#xff09;对应一个SSL证书&#xff0c;因为SSL证书是绑定域名的。只有通配符证书和UCC多域名证书才支持多个域名。通配符证书适用于同一个域名下的多个子域。如同一服务器有多个网站&#xff1a;www.domain.comlogin.domai…

java大作业私人管家系统_重庆管家婆软件丨管家婆工贸PRO的E-MES管理详解

其实&#xff0c;ERP和MES在制造操作中扮演着独立而又互补的角色。ERP能将企业所有方面的数据进行实时、可用的全面集成&#xff0c;为管理决策提供高效、准确的业务决策支持;MES则能加强MRP计划的执行&#xff0c;把MRP计划同车间作业现场控制通过执行系统联系起来。这些“现场…

监控体系 [精]

监控体系 zabbix 监控对象&#xff1a;     1. 监控对象的理解&#xff1a;CPU是怎么工作的&#xff0c;原理     2. 监控对象的指标&#xff1a;CPU使用率 CPU负载 CPU个数 上下文切换     3. 确定性能基准线&#xff1a;怎么样才算故障&#xff1f;CPU负载多…

SD卡启动盘制作软件

下载地址&#xff1a;http://www.roadkil.net/program.php?ProgramID24转载于:https://www.cnblogs.com/wangf/archive/2013/06/04/3116882.html

vs 设置起始页不见了_发朋友圈屏蔽爸妈,结果不小心设置成了仅家人可见...场面一发不可收拾哈哈哈哈!...

一提到爸妈的朋友圈&#xff0c;就会想到养生鸡汤&#xff0c;中老年流量谣言&#xff0c;土味表情包而出于保护个人隐私拒绝被爸妈误解而遭受灵魂拷问的考虑很多人选择了两全其美的分组法给家人看到阳光可爱正能量的一面沙雕的一面只展现给沙雕网友们可如果不小心把屏蔽的内容…

KVM 安装

KVM介绍 Kernel-based Virtual Machine的简称&#xff0c;是一个开源的系统虚拟化模块&#xff0c;自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理&#xff0c;所以相对于Xen&#xff0c;其核心源码很少。KVM目前已成为学术界的主流VMM之…

彼聆智能语音机器人_电销行业的人工智能:智能语音电话机器人

随着人工智能的发展&#xff0c;越来越多的机器人出现在我们的日常生活中&#xff0c;用于电话营销公司的自动打电话机器人、快递公司用来送快递的机器人、餐厅里用来上菜的机器人&#xff0c;最近更是有一款会后空翻的机器人。机器人正活跃在各行各业中&#xff0c;代替人类去…

接触的第二个引擎 scaleform

最近在研究 一个全新的 引擎 scaleform 一个 基于 Flash 的 优化的一个引擎 这个引擎之前只有 U3D 和 UDK 两个 版本的工具 去年 改引擎 发布了 mobile 的 SDK 这个引擎有一个 很强大的地方就是 对 Flash 中矢量图的 优化 这个引擎配备了相对完备的 说明文档 (c2d相当于没有) 缺…

Shell 基础介绍 [1]

本文目录1.什么是Shell&#xff1f;2.脚本语言类型3.其他常用的脚本语句种类4.Shell脚本的建立和执行5.Shell 变量类型6.普通变量7.Shell 特殊重要变量8.Shell进程状态变量9.Parameter Expansion10.扩展&#xff1a;其他变量的替换11.变量的数值&#xff08;整数&#xff09;计…

c++创建二叉树_数据结构:查找(4)|| 平衡二叉树

在介绍平衡二叉树之前&#xff0c;应该先了解平衡因子的概念&#xff0c;平衡因子定义为左子树深度减去右子树深度&#xff0c;这个值的绝对值越大&#xff0c;非常容易理解它就对应着越不平衡的情况。一棵平衡的二叉树的平衡因子只能是1&#xff0c;0&#xff0c;-1如何构建一…

[批处理]截取for命令里面的变量%%i

写了一个批处理&#xff0c;里面需要call几个其他的批处理。 其中主进程需要根据批处理文件运行时的输入参数&#xff0c;选择合适的url&#xff0c;而url的定义写到另外的批处理里面 URLProxyAA.cmd URLProxyBB.cmd.... 我想在主程序运行时搜索一下当前目录&#xff0c;有多少…

华睿相机sdk 开发_索尼发布相机远程操作SDK(软件开发工具包)

索尼从2020年12月9日开始&#xff0c;向开发者免费提供针对索尼数码相机的软件开发工具包“ Camera Remote SDK” 1.03版。“ Camera Remote SDK”开发的软件可以远程更改相机设置、并执行诸如快门释放&#xff0c;实时取景监视(如取景和对焦)之类的操作。支持的操作系统包括Wi…