打包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,一经查实,立即删除!

相关文章

我是一个线程 [转]

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

自动化运维之–Cobbler

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

开源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…

Shell 变量及函数讲解 [2]

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

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负载多…

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;代替人类去…

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如何构建一…

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

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

Linux 字体颜色设置

本文主要介绍Linux 字体颜色的调整&#xff0c;常用于shell脚本当中。我们举一个例子&#xff1a;echo-e"\033[44;37;5m ME \033[0m COOL" 以上命令设置背景成为蓝色&#xff0c;前景白色&#xff0c;闪烁光标&#xff0c;输出字符“ME”&#xff0c;然后重新设置屏幕…

利用Unity实现AOP

.NET程序中&#xff0c;可以利用Unity来实现AOP&#xff0c;用来进行日志、缓存或权限的处理。这里我们来写一个简单的程序&#xff0c;让其实现简单的AOP功能。 1.使用NuGet&#xff0c;在项目中获取Microsoft.Practices.Unity。 2.新建一个ITalk类及其实现 public interface …

javascript数组的各种操作

用 js有非常久了&#xff0c;但都没有深究过js的数组形式。偶尔用用也就是简单的string.split(char)。这段时间做的一个项目&#xff0c;用到数组的地方非常多&#xff0c;自以为js高手的自己竟然无从下手&#xff0c;一下狠心&#xff0c;我学&#xff01;呵呵。学了之后才知道…

老男孩Shell企业面试题30道 [答案]

老男孩Shell企业面试题 shell 2016年9月7日 本文来自于老男孩教育,未经本人同意&#xff0c;禁止转载&#xff01;否则追究法律责任。 原文&#xff1a;http://oldboy.blog.51cto.com/2561410/1632876 企业面试题1&#xff1a; &#xff08;生产实战案例&#xff09;&#x…

深度优化LNMP之Nginx [1]

Nginx基本安全优化 1.调整参数隐藏Nginx版本号信息一般来说&#xff0c;软件的漏洞都和版本有关&#xff0c;因此我们应尽量隐藏或清除Web服务队访问的用户显示各类敏感信息&#xff08;例如&#xff1a;Web软件名称及版本号等信息&#xff09;&#xff0c;这样恶意的用户就很难…

5阶无向完全图_运动轿跑风 全新上汽名爵5预告图发布

【太平洋汽车网 新车频道】近日&#xff0c;上汽名爵官方发布了一组全新一代名爵5&#xff08;询底价|查参配&#xff09;的预告图。从图片可以看出&#xff0c;换代而来的全新名爵5采用最新的家族化设计语言&#xff0c;外观风格与新款名爵6较为接近&#xff0c;采用轿跑式溜背…

Shell 企业29道面试题 [转]

企业面试题1&#xff1a;&#xff08;生产实战案例&#xff09;&#xff1a;监控MySQL主从同步是否异常&#xff0c;如果异常&#xff0c;则发送短信或者邮件给管理员。提示&#xff1a;如果没主从同步环境,可以用下面文本放到文件里读取来模拟&#xff1a; 阶段1&#xff1a;开…

深度优化LNMP之Nginx [2]

配置Nginx gzip 压缩实现性能优化 1.Nginx gzip压缩功能介绍 Nginx gzuo压缩模块提供了压缩文件内容的功能&#xff0c;用户请求的内容在发送出用客户端之前&#xff0c;Nginx服务器会根据一些具体的策略实施压缩&#xff0c;以节约网站出口带宽&#xff0c;同时加快了数据传…