Apachespring boot 配置文件件中部分内容如下,将会发生什么情况

apache的配置文件中,哪个字段定义了访问日志的路径_百度知道
apache的配置文件中,哪个字段定义了访问日志的路径
我有更好的答案
line-height:200%;
Apache日志管理
Apache维护着登录Web服务器的所有用户请求日志,在默认情况下,这些记录包括使用普通日志格式的记录,每个请求的记录单独占一行。
借助于LogFormat和CustomLog指令,用户可根据自己的需要定义日志记录,添加更多可显示细节的日志字段(即日志文件和记录格式说明符),其中各字段说明如表6-6所示。
在Apache的标准中规定了4种日志,即错误、访问、传输和Cookie日志,其中的Cookie日志被Apache2.0认为已经过期,所以本节将介绍错误日志和访问日志,同时错误日志和访问日志被Apache2.0默认设置。
在Apache2.0中有4条与日志相关的配置参数,如表6-7所示。
1.配置错误日志
配置错误日志主要是通过ErrorLog和LogLevel两个参数来配置的,配置错误日志只需说明日志文件的存放位置和日志记录等级即可,其错误日志等级如表6-8所示。
配置错误日志文件应在&/etc/httpd/conf/httpd.conf&文件中添加如下语句:
ErrorLog logs/error_log
//错误日志文件的存放位置
LogLevel warn
//设置错误日志文件等级
如下所示为一个错误日志文件的内容:
由上错误日志的内容可以看出,每条错误信息都由3个部分构成,即发生错误的时间、错误等级和错误信息。
2.配置访问日志
为了便于分析Apache的访问日志,在Apache的默认配置文件中,按记录的信息不同将访问日志分为4类,并由LogFormat配置参数定义昵称,其格式分类如表6-9所示。
由于综合日志格式简单地结合了3种日志信息,所以在配置访问日志时,可使用3个文件分别记录日志,或是通过一个综合文件记录日志。
若使用3个文件分别记录日志,则应在&/etc/httpd/conf/httpd.conf&配置文件中按如下方式配置:
若使用一个综合文件进行记录日志,则在&/etc/httpd/conf/httpd.conf&配置文件中按如下方式配置也是Apache的默认配置:
如下所示为访问日志的部分记录:
从以上的日志记录可以看出,IP地址为192.168.0.66的主机在日19时50分利用微软Windows XP操作系统中IE浏览器访问过本机的主页。
3.日志滚动
所有的日志文件,都会随着时间的推移和访问次数的增加而使日志文件的记录变得很多,因此需定期地对日志文件进行清理,否则会造成不必要的磁盘空间浪费。如果一个日志文件在无限地增大时,其打开日志文件的速度也非常慢,使管理人员的清理速度很受影响,因此,最好的解决办法就是采用日志滚动。
所谓的日志滚动是让系统定期地清理日志文件,并创建新的空白日志文件,但由于Apache进程本身不负责对日志文件进行滚动,因此必须使用其他程序配置日志滚动。
(1)使用系统的logrotate实现日志滚动
logrotate是Linux系统自带的一个日志滚动程度,是专门针对各种系统日志而设置的,下面将介绍使用Red Hat Enterprise Linux AS 4自带的logrotate和crond实现Apache日志滚动的方法。
在终端命令窗口中使用cat命令查看&/etc/cron.daily/logrotate&文件的内容,其操作方法如下:
在终端命令窗口中使用cat命令查看&/etc/logrotate.conf&文件的内容,其操作方法如下:
在终端命令窗口中使用cat命令查看&/etc/logrotate.d&目录中Apache日志配置文件的内容,其操作方法如下:
(2)使用Apache的rotatelogs实现日志滚动
Apache不能将日志记录直接写入文件,但提供了通过管道操作将日志记录发给另一个程序,让其他的应用程序实现日志滚动记录的功能。处理日志的程序可以是任何的日志处理程序,如日志分析、压缩日志等。
Apache自带的rotatelogs程序可以实现日志滚动而无需使用crond运行,为使rotatelogs程序能运行,需在&/etc/httpd/conf/httpd.conf&配置文件进行管道日志配置,其配置参数如下:
在配置文件中的语句意思是,日志滚动间隔为1天(86400秒),滚动后的日志文件名为access_log.nnnnnnn,nnnnnnn的意思是由日0时0分0秒到日志文件滚动的时间差,其时间差值为妙。
推荐阅读:Apache在配置文件中配置认证和授权
为您推荐:
其他类似问题
apache的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Apache 高并发 性能优化
Apache的配置是针对原先较低的服务器来配置的,原先的配置显然已经不适合了,所以今天开始研究下Apache配置的问题。
1. 首先要了解Apache采用的MPM(Multi -Processing Modules,多道处理模块)
MPM是Apache的核心,它的作用是管理网络连接、调度请求。
Apache2.0中MPM分为3种(perfork、worker、event)。perfork从Apache1.3中继承下来的,它采用的是进程管理方式,所以它可以提供更可靠的性能和更好的兼容性;worker是Apache2.0中新增加的方式,它采用了线程控制方法,可以比perfork更节约系统开销、处理更多的数据量,但同时兼容性并不是很好,很多旧的程序无法工作在worker下;event仍处于试验阶段,它为每个任务分配不同的进程池,目前不应该采用。
通过命令 httpd -l 可以获取目前Apache采用的是哪种MPM
本文仅针对perfork方式进行讨论
2. 了解perfork的工作方式
查看Apache2.0的配置文件httpd.conf,可以看到perfork的配置段,大致如下:
ServerLimit
StartServers
MinSpareServers
MaxSpareServers
MaxClients
MaxRequestsPerChild
当Apache被启动时,Apache会自动创建StartServers个进程,并且尽力将空闲进程数保持在MinSpareServers和MaxSpareServers之间。
如果空闲进程小于MinSpareServers,Apache将会以大约每秒1个的速度新建进程。
如果空闲进程小于MaxSpareServers,Apache将会删除多余的空闲进程,释放服务器资源。
进程数的最大值由MaxClients控制,在Apache1.3中最大只能设置为256,但在Apache2.0中,可以通过在配置开头增加ServerLimit项目来突破256的限制,此时必须MaxClients ≤ ServerLimit ≤ 20000
MaxRequestsPerChild用来控制每个进程在处理了多少次请求之后自动销毁,这个参数可以设置为0表示无限(即不销毁进程)。
3. 优化perfork
首先,对于一个负载相对较高的网站来说,256的进程限制是不够的,如果服务器已经达到256的极限,那么接下去的访问就需要排队,这也就是为什么某些服务器负载不高,但是访问却很慢的原因之一。所以首先应该了解服务器在繁忙时的进程数量。
通过命令ps -ef|grep httpd|wc -l可以了解到当前系统中Apache进程数,通过设置ServerLimit和MaxClients来达到为服务器软扩容的目的。
然后,在访问量高峰期,经常会出现的情况是突然之间发生非常多的并发连接,然后突然之间减少了很多访问。如果Apache没有准备足够数量的预备进程,那访问只能等待Apache每秒1个的新增进程,随后又要将多余的进程删除,那Apache只能一直忙于新建和销毁进程,大大地降低了访问速度。可以适当增加StartServers、MinSpareServers、MaxSpareServers来使得Apache不需要一直忙于作无用功。
最后,强烈推荐MaxRequestsPerChild不要设置为0,设置为非0,可以保护Apache进程免遭内存泄漏的影响,因为你不知道运行在Apache上的应用程式在什么时候会出错导致内存泄漏。
设置完之后大致是这样的:
ServerLimit
StartServers
MinSpareServers
MaxSpareServers
MaxClients
MaxRequestsPerChild
-----------------------------------------------------------------------------------分割线-------------------------------------------------------------------
分类: LINUX
先阅读apache配置优化建议如下,再对相关参数进行调整,观察服务器状况.
Apache配置优化建议:
进入/usr/local/apache2/conf/extra 目录下
Apache优化,
经过上述操作后,Apache已经能够正常运行。但是,对于访问量稍大的站点,Apache的这些默认配置是无法满足需求的,我们仍需调整Apache的一些参数,使Apache能够在大访问量环境下发挥出更好的性能。以下我们对Apache配置文件httpd.conf中对性能影响较大的参数进行一些说明。
(1) Timeout 该参数指定Apache在接收请求或发送所请求内容之前的最长等待时间(秒),若超过该时间Apache则放弃处理该请求,并释放连接。该参数默认值为120,推荐设置为60,对于访问量较大的网站可以设置为30或15。
(2) KeepAlive 该参数控制Apache是否允许在一个连接中有多个请求,默认打开。但对于大多数论坛类型站点来说,通常设置为off以关闭该支持。
(3) MPM - prefork.c 在默认情况下Apache使用Prefork(进程)工作模式,可以说这部分的参数设置是对Apache性能影响的核心和关键。用户可以在配置文档中找到以下配置段:
StartServers
MinSpareServers
MaxSpareServers
MaxClients
MaxRequestsPerChild
这就是控制Apache进程工作的配置段,为了更好的理解上述配置中的各项参数,下面让我们先了解一下Apache是如何控制进程工作的。我们知道,在Unix系统中,很多服务(Service)的守护进程(Daemon)在启动时会创建一个进程以准备应答可能的连接请求,服务即进入了端口监听状态,当一个来自客户端(Client)的请求被发送至服务所监听的端口时,该服务进程即会处理该请求,在处理过程中,该进程处于独占状态,也就是说如果此时有其他请求到达,这些请求只能“排队”等待当前请求处理完成且服务进程释放。这样就会导致越来越多的请求处于队列等待状态,实际表现就是该服务处理能力非常低下。Apache使用Prefork模式很好的解决了这一问题。下面我们来看看Apache实际上是如何高效率工作的。
当Apache启动时,Apache会启动StartSpareServers个空闲进程同时准备接收处理请求,当多个请求到来时,StarSpareServers进行会越来越少,当空闲进程减少到MinSpareServers个时,Apache为了能够继续有充裕的进程处理请求,它会再启动StartsServers个进程备用,这样就大大减少了请求队列等待的可能,使得服务效率提高,这也是为什么叫做Pre-fork的原因;让我们继续跟踪Apache的工作,我们假设Apache已经启动了200个进程来处理请求,理论上来说,此时Apache一共有205个进程,而过了一段时间,假设有100个请求都得到了Apache的响应和处理,那么此时这100个进程就被释放成为空闲进程,那么此时Apache有105个空闲进程。而对于服务而言,启动太多的空闲进程时没有任何意义的,反而会降低服务器的整体性能,那么Apache真的会有105个空闲进程么?当然不会!实际上Apache随时在检查自己,当发现有超过MaxSpareServers个空闲进程时,则会自动停止关闭一些进程,以保证空闲进程不过过多。说到这里,用户应该对Apache的工作方式有了一定的了解,如果想获得更多更详细的说明请参阅Apache手册文档。
我们还有两个参数没有介绍:MaxClients和MaxRequestPerchild;MaxClients指定Apache在同一时间内最多允许有多少客户端能够与其连接,如果超过MaxClients个连接,客户端将会得到一个“服务器繁忙”的错误页面。我们看到默认情况下MaxClients设置为15,这对一些中型站点和大型站点显然是远远不够的!也许您需要同时允许512个客户端连接才能满足应用需求,好吧,那么就让我们把MaxClients修改为512,保存httpd.conf并退出,重启Apache,很遗憾,在重启过程当中您看到了一些错误提示,Apache重启失败。错误提示中告诉您MaxClients最大只能设定为256,相信您一定很失望。不过不要沮丧,Apache作为世界一流的Web
Server一定不会如此单薄的!在默认情况下,MaxClients的确只能设定为不超过256的整数,但是,如果您有需要完全可以随意定制,此时就需要使用ServerLimit参数来配合使用,简单的说ServerLimit就像是水桶,而MaxClients就像是水,您可以通过更换更大的水桶(将ServerLimit设定为一个较大值)来容纳更多的水(MaxClients),但要注意,MaxClients的设定数值是不能大于ServerLimit的设定数值的!
注:MaxClents & ServerLimit
下面让我们了解一下MaxRequestPerChild参数,该参数指定一个连接进程中可以有多少个线程同时工作。也许这样解释过于专业,那么您只要想想“网络蚂蚁”、“网际快车FlashGet”中的“多点同时下载”即可,该参数实际上就是限制最多可以用几个“点”。默认设置为0,即为:不限制。但需要注意,如果将该值设置的过小会引起访问问题,如果没有特殊需要或者访问量压力并非很大可以保持默认值,如果访问量很大则推荐设置为2048。
好了,解释了这么多,让我们看看经过修改后Perfork.c配置段的推荐配置:
StartServers
MinSpareServers
MaxSpareServers
ServerLimit
MaxClients
MaxRequestsPerChild
完成了上述对Apache的调整,Apache已经获得了较大的性能改善。
有关apache性能优化 高并发借鉴相关知识点网址:
25个apache性能优化技巧:
http://wenku.baidu.com/link?url=QS_bRiFc-MJ5h0ZQSWhJ2vc7oEH_H667Nsx-43XPqAtdGrKWQGzbIUSs55ricEazYvr-gn3mka1a17w9iQ-TEx2pu1ud2Laf14KpbVNAtRy
apache负载调优:
http://blog.chinaunix.net/uid--id-2827648.html
apache性能优化:
http://sookk8.blog.51cto.com/759/
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!如何防止apache将服务器中的文件列表显示出来_百度知道
如何防止apache将服务器中的文件列表显示出来
我有更好的答案
屏蔽网站htdocs文件目录,将$apache_home/conf/httpd.conf文件以下项注释掉#DocumentRoot&&/opt/IBM/HTTPServer/htdocs&#&Directory&&/opt/IBM/HTTPServer/htdocs&&#&&&&Options&FollowSymLinks#&&&&AllowOverride&None#&&&&Order&allow,deny#&&&&Allow&from&all#&/Directory&
采纳率:52%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Activiti 5.16 用户手册
Activiti 5.16 用户手册Table of ContentsList of Tables2.1. 2.2. 3.1. 3.2. 6.1. 6.2. 6.3. 8.1. 8.2. 8.3. 8.4. 8.5. 8.6. 8.7. 15.1. 15.2. 15.3. 15.4. 15.5. 15.6. 15.7. 15.8. 15.9. 15.10. 15.11. 15.12. 15.13. 15.14. 15.15. 15.16. 15.17. 15.18. 15.19. 15.20. 15.21. 15.22. 15.23. 15.24. 15.25. 15.26. 15.27. 15.28. 15.29. 15.30. 15.31. 15.32. 15.33. 15.34. 15.35. 15.36. 15.37. 15.38. 15.39. 15.40. 15.41. 15.42. 15.43. 15.44. 15.45. 15.46. 15.47. 15.48. 15.49. 15.50. 15.51. 15.52. 15.53. 15.54. 15.55. 15.56. 15.57. 15.58. 15.59. 15.60. 15.61. 15.62. 15.63. 15.64. 15.65. 15.66. 15.67. 15.68. 15.69. 15.70. 15.71. 15.72. 15.73. 15.74. 15.75. 15.76. 15.77. 15.78. 15.79. 15.80. 15.81. 15.82. 15.83. 15.84. 15.85. 15.86. 15.87. 15.88. 15.89. 15.90. 15.91. 15.92. 15.93. 15.94. 15.95. 15.96. 15.97. 15.98. 15.99. 15.100. 15.101. 15.102. 15.103. 15.104. 15.105. 15.106. 15.107. 15.108. 15.109. 15.110. 15.111. 15.112. 15.113. 15.114. 15.115. 15.116. 15.117. 15.118. 15.119. 15.120. 15.121. 15.122. 15.123. 15.124. 15.125. 15.126. 15.127. 15.128. 15.129. 15.130. 15.131. 15.132. 15.133. 15.134. 15.135. 15.136. 15.137. 15.138. 15.139. 15.140. 15.141. 15.142. 15.143. 15.144. 15.145. 15.146. 15.147. 15.148. 15.149. 15.150. 15.151. 15.152. 15.153. 15.154. 15.155. 15.156. 15.157. 15.158. 15.159. 15.160. 15.161. 15.162. 15.163. 15.164. 15.165. 15.166. 15.167. 15.168. 15.169. 15.170. 15.171. 15.172. 15.173. 15.174. 15.175. 15.176. 15.177. 15.178. 15.179. 15.180. 15.181. 15.182. 15.183. 15.184. 15.185. 15.186. 15.187. 15.188. 15.189. 15.190. 15.191. 15.192. 15.193. 15.194. 15.195. 15.196. 15.197. 15.198. 15.199. 15.200. 15.201. 15.202. 15.203. 15.204. 15.205. 15.206. 15.207. 15.208. 15.209. 15.210. 15.211. 15.212. 15.213. 15.214. 15.215. 15.216. 15.217. 15.218. 15.219. 15.220. 15.221. 15.222. 15.223. 15.224. 15.225. 15.226. 15.227. 15.228. 15.229. 15.230. 15.231. 15.232. 15.233. 15.234. 15.235. 15.236. 15.237. 15.238. 15.239. 15.240. 15.241. 15.242. 15.243. 15.244. 15.245. 15.246. 15.247. 15.248. 15.249. 15.250. 15.251. 15.252. 15.253. 15.254. 15.255. 15.256. 15.257. 15.258. 15.259. 17.1. 17.2. Chapter&1.&简介Table of Contents协议Activiti是基于发布的。下载源码发布包里包含大部分的已经打好jar包的源码。
如果想找到并构建完整的源码库,请参考
必要的软件JDK 6+Activiti需要运行在JDK 6或以上版本上。
进入
点击 "下载 JDK"按钮。页面上也提供了安装的方法。
为了验证是否安装成功,可以在命令行中执行 java -version。
它将会打印出安装的JDK的版本。
Eclipse Indigo 和 Juno
(译者注:Eclipse 3.7 版本代号 Indigo 靛青,
Eclipse 4.2 版本代号 Juno 朱诺)。
在下载你选择的eclipse发布包。
解压下载文件,你就可以通过eclipse目录下的eclipse文件启动它。
此外,在该用户指南后面,专门有一章介绍。
报告问题任何一个自觉的开发者都应该看看
看完之后,你可以在上进行提问和评论,
或者在中创建问题。
虽然Activiti已经托管在GitHub上了,但是问题不应该提交到GitHub的问题跟踪系统上。如果你想报告一个问题,
不要创建一个GitHub的问题,而是应该使用。
试验性功能那些标记着 [EXPERIMENTAL] 的章节表示功能尚未稳定。
所有包名中包含 .impl. 的类都是内部实现类,都是不保证稳定的。
不过,如果用户指南把哪些类列为配置项,那么它们可以认为是稳定不变的。
内部实现类在jar包中,所有包名中包含.impl.(比如:org.activiti.engine.impl.pvm.delegate)的类都是实现类,
它们应该被视为流程引擎内部的类。对于这些类和接口都不能够保证其稳定性。
Chapter&2.&开始学习Table of Contents一分钟入门
从下载Activiti Explorer的WAR文件后,
可以按照下列步骤以默认配置运行样例。
你需要一个和
(其实,任何提供了servlet功能的web容器都可以正常运行。但是我们主要是使用tomcat进行的测试)。
把下载的activiti-explorer.war复制到Tomcat的webapps目录下。执行Tomcat的bin目录下的startup.bat或startup.sh启动服务器。
Tomcat启动后,打开浏览器访问。
使用kermit/kermit登录。
这样就好了!Activiti Explorer默认使ଵ存数据库,如果你想使用其他数据库
请参考。
安装Activiti要安装Activiti你需要一个
还要确认设置好JAVA_HOME系统变量。
不同的操作系统下的设置方法是不同的。
要运行Activiti Explorer和REST web应用,你要从Activiti的下载页下载WAR文件,
复制到Tomcat安装目录下webapps目录下。
默认Explorer应用使用的内存数据库已经包含了示例流程,用户和群组信息。
下面是示例中可以使用的用户:Table&2.1.&示例用户账号密码角色kermitkermitadmingonzogonzomanagerfozziefozzieuser现在,你可以访问下列web应用:Table&2.2.&webapp工具Webapp名称URL描述&Activiti Explorer 流程引擎的用户控制台。使用它来启动新流程,分配任务,
查看并认领任务,等等。这个工具也可以用来管理Activiti引擎。
注意Activiti Explorer演示实例只是一种简单快速展示Activiti的功能的方式。
但是并不是说只能使用这种方式使用Activiti。
Activiti只是一个jar,
可以内嵌到任何Java环境中:swing或者Tomcat, JBoss, WebSphere等等。
也可以把Activiti作为一个典型的单独运行的BPM服务器运行。
只要java可以做的,Activiti也可以。
安装Activiti数据库就像在一分钟入门里说过的,Activiti Explorer默认使ଵ存数据库。
要让Activiti使用独立运行ྀ据库或者其他数据库,
可以修改Activiti Explorer web应用WEB-INF/classes目录下的db.properties。
另外,注意Activiti Explorer自动生成了演示用的默认用户和群组,流程定义,数据模型。
要想禁用这个功能,要修改WEB-INF目录下的activiti-standalone-context.xml。
可以使用下面的demoDataGenerator bean定义代码完全禁用安装默认数据。从代码中也可以看出,我们可以单独启用或禁用每一项功能。
&bean id="demoDataGenerator" class="org.activiti.explorer.demo.DemoDataGenerator"&
&property name="processEngine" ref="processEngine" /&
&property name="createDemoUsersAndGroups" value="false" /&
&property name="createDemoProcessDefinitions" value="false" /&
&property name="createDemoModels" value="false" /&
引入Activiti jar和依赖
为了引用Activiti jar和依赖,我们推荐使用
(或),
它简化了我们之间的依赖管理。
参考
来为你的项目引入必须的jar包。
如果不想用Maven,你也可以自己把这些jar引入到你的项目中。
Activiti下载zip包包含了一个libs目录,
包含了所有Activiti的jar包(和源代码jar包)。依赖没有用这种方式发布。
Activiti引擎必须的依赖如下所示(通过mvn dependency:tree生成):
org.activiti:activiti-engine:jar:5.12.1
+- org.apache.commons:commons-email:jar:1.2:compile
+- javax.mail:mail:jar:1.4.1:compile
\- javax.activation:activation:jar:1.1:compile
+- org.apache.commons:commons-lang3:jar:3.1:compile
+- org.mybatis:mybatis:jar:3.1.1:compile
+- org.springframework:spring-beans:jar:3.1.2.RELEASE:compile
\- org.springframework:spring-core:jar:3.1.2.RELEASE:compile
+- org.springframework:spring-asm:jar:3.1.2.RELEASE:compile
\- commons-logging:commons-logging:jar:1.1.1:compile
\- joda-time:joda-time:jar:2.1:compile
注意:只有使用了才必须引入mail依赖jar。
所有依赖可以在的模块中,
通过mvn dependency:copy-dependencies下载。
下一步
使用 web应用
是一个熟悉Activiti概念和功能的好办法。但是,
Activiti的主要目标是为你自己的应用添加强大的BPM和工作流功能。
下面的章节会帮助你熟悉
如何在你的环境中使用Activiti进行编程:
会教你如何设置Activiti,
如何获得ProcessEngine类的实例,
它是所有Activiti引擎功能的中心入口。
会带领你了解建立Activiti API的服务。
这些服务用简便的方法提供了Activiti引擎的强大功能,
它们可以使用在任何Java环境下。
对深入了解BPMN 2.0,Activiti引擎中流程的编写结构感兴趣吗?
请继续浏览。
Chapter&3.&配置Table of Contents创建ProcessEngine
Activiti流程引擎的配置文件是名为activiti.cfg.xml的XML文件。
注意这与使用
是不一样的。
获得ProcessEngine最简单的办法是
使用org.activiti.engine.ProcessEngines类:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine()
它会在classpath下搜索activiti.cfg.xml,
并基于这个文件中的配置构建引擎。
下面代码展示了实例配置。
后面的章节会给出配置参数的详细介绍。
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"&
&bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"&
&property name="jdbcUrl" value="jdbc:h2:mem:DB_CLOSE_DELAY=1000" /&
&property name="jdbcDriver" value="org.h2.Driver" /&
&property name="jdbcUsername" value="sa" /&
&property name="jdbcPassword" value="" /&
&property name="databaseSchemaUpdate" value="true" /&
&property name="jobExecutorActivate" value="false" /&
&property name="mailServerHost" value="mail.my-corp.com" /&
&property name="mailServerPort" value="5025" /&
注意配置XML文件其实是一个spring的配置文件。
但不是说Activiti只能用在Spring环境中!
我们只是利用了Spring的解析和依赖注入功能
来构建引擎。
配置文件中使用的ProcessEngineConfiguration可以通过编程方式创建。
可以配置不同的bean id(比如,第三行)。
ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource);
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName);
ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream);
ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName);
也可以不使用配置文件,基于默认创建配置
(参考)
ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
所有这些ProcessEngineConfiguration.createXXX()方法都返回
ProcessEngineConfiguration,后续可以调整成所需的对象。
在调用buildProcessEngine()后,
就会创建一个ProcessEngine:
ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration()
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)
.setJdbcUrl("jdbc:h2:mem:my-own-DB_CLOSE_DELAY=1000")
.setJobExecutorActivate(true)
.buildProcessEngine();
ProcessEngineConfiguration bean
activiti.cfg.xml必须包含一个id为'processEngineConfiguration'的bean。
&bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"&
这个bean会用来构建ProcessEngine。
有多个类可以用来定义processEngineConfiguration。
这些类对应不同的环境,并设置了对应的默认值。
最好选择(最)适用于你的环境的类,
这样可以少配置几个引擎的参数。
下面是目前可以使用的类(以后会包含更多):
org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration:
单独运行的流程引擎。Activiti会自己处理事务。
默认,数据库只在引擎启动时检测
(如果没有Activiti的表或者表结构不正确就会抛出异常)。
org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration:
单元测试时的辅助类。Activiti会自己控制事务。
默认使ଵ存数据库。数据库表会在引擎启动时创建,关闭时删除。
使用它时,不需要其他配置(除非使用job执行器或邮件功能)。
org.activiti.spring.SpringProcessEngineConfiguration:
在Spring环境下使用流程引擎。
参考。
org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration:
单独运行流程引擎,并使用JTA事务。
数据库配置
Activiti可能使用两种方式配置数据库。
第一种方式是定义数据库配置参数:
jdbcUrl: 数据库的JDBC URL。
jdbcDriver: 对应不同数据库类型的驱动。
jdbcUsername: 连接数据库的用户名。
jdbcPassword: 连接数据库的密码。
基于JDBC参数配置的数据库连接
会使用默认的连接池。
下面的参数可以用来配置连接池(来自MyBatis参数):
jdbcMaxActiveConnections:
连接池中处于被使用状态的连接的最大值。默认Ģ
jdbcMaxIdleConnections:
连接池中处于空闲状态的连接的最大值。
jdbcMaxCheckoutTime:
连接被取出使用的最长时间,超过时间会被强制回收。
默认&#º)。
jdbcMaxWaitTime:
这是一个底层配置,让连接池可以在长时间无法获得连接时,
打印一条日志,并重新尝试获取一个连接。(避免因为错误配置导致沉默的操作失败)。
默认&#º)。
示例数据库配置:
&property name="jdbcUrl" value="jdbc:h2:mem:DB_CLOSE_DELAY=1000" /&
&property name="jdbcDriver" value="org.h2.Driver" /&
&property name="jdbcUsername" value="sa" /&
&property name="jdbcPassword" value="" /&
也可以使用javax.sql.DataSource。
(比如,的DBCP):
&bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" &
&property name="driverClassName" value="com.mysql.jdbc.Driver" /&
&property name="url" value="jdbc:mysql://localhost:3306/activiti" /&
&property name="username" value="activiti" /&
&property name="password" value="activiti" /&
&property name="defaultAutoCommit" value="false" /&
&bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"&
&property name="dataSource" ref="dataSource" /&
注意,Activiti的发布包中没有这些类。
你要自己把对应的类(比如,从DBCP里)放到你的classpath下。
无论你使用JDBC还是DataSource的方式,都可以设置下面的配置:
databaseType:
一般不用设置,因为可以自动通过数据库连接的元数据获取。
只有自动检测失败时才需要设置。
可能的值有:{h2, mysql, oracle, postgres, mssql, db2}。
如果没使用默认ྀ据库就必须设置这项。
这个配置会决定使用哪些创建/删除脚本和查询语句。
参考
了解支持哪些类型。
databaseSchemaUpdate:
设置流程引擎启动和关闭时如何处理数据库表。
false(默认):检查数据库表的版本和依赖库的版本,
如果版本不匹配就抛出异常。
true: 构建流程引擎时,执行检查,如果需要就执行更新。
如果表不存在,就创建。
create-drop: 构建流程引擎时创建数据库表,
关闭流程引擎时删除这些表。
JNDI数据库配置
默认,Activiti的数据库配置会放在web应用的WEB-INF/classes目录下的db.properties文件中。
这样做比较繁琐,
因为要用户在每次发布时,都修改Activiti源码中的db.properties并重新编译war文件,
或者解压缩war文件,修改其中的db.properties。
使用JNDI(Java命名和目录接口)来获取数据库连接,
连接是由servlet容器管理的,可以在war部署外边管理配置。
与db.properties相比,
它也允许对连接进行更多的配置。
使用
要想把Activiti Explorer和Activiti Rest应用从db.properties转换为使用
JNDI数据库配置,需要打开原始的Spring配置文件
(activiti-webapp-explorer2/src/main/webapp/WEB-INF/activiti-standalone-context.xml
和activiti-webapp-rest2/src/main/resources/activiti-context.xml),
删除"dbProperties"和"dataSource"两个bean,然后添加如下bean:
&bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"&
&property name="jndiName" value="java:comp/env/jdbc/activitiDB"/&
接下来,我们需要添加包含了默认౽置的context.xml文件。
如果已经有了JNDI配置,会覆盖这些配置。
对Activiti Explorer来说,对应的配置文件activiti-webapp-explorer2/src/main/webapp/META-INF/context.xml
如下所示:
&Context antiJARLocking="true" path="/activiti-explorer2"&
&Resource auth="Container"
name="jdbc/activitiDB"
type="javax.sql.DataSource"
scope="Shareable"
description="JDBC DataSource"
url="jdbc:h2:mem:DB_CLOSE_DELAY=1000"
driverClassName="org.h2.Driver"
username="sa"
password=""
defaultAutoCommit="false"
initialSize="5"
maxWait="5000"
maxActive="120"
maxIdle="5"/&
&/Context&
对于Activiti REST应用,添加的activiti-webapp-rest2/src/main/webapp/META-INF/context.xml
如下所示:
&?xml version="1.0" encoding="UTF-8"?&
&Context antiJARLocking="true" path="/activiti-rest2"&
&Resource auth="Container"
name="jdbc/activitiDB"
type="javax.sql.DataSource"
scope="Shareable"
description="JDBC DataSource"
url="jdbc:h2:mem:DB_CLOSE_DELAY=-1"
driverClassName="org.h2.Driver"
username="sa"
password=""
defaultAutoCommit="false"
initialSize="5"
maxWait="5000"
maxActive="120"
maxIdle="5"/&
&/Context&
可选的一步,现在可以删除Activiti Explorer和Activiti Rest两个应用中
不再使用的db.properties文件了。
配置
JNDI数据库配置会因为你使用的Servlet container不同而不同。
下面的配置可以在tomcat中使用,但是对其他容易,
请引用你使用的容器的文档。
如果使用tomcat,JNDI资源配置在
$CATALINA_BASE/conf/[enginename]/[hostname]/[warname].xml
(对于Activiti Explorer来说,通常是在$CATALINA_BASE/conf/Catalina/localhost/activiti-explorer.war)。
当应用第一次发布时,会把这个文件从war中复制出来。
所以如果这个文件已经存在了,你需要替换它。要想修改JNDI资源让应用连接mysql而不ࣴ
可以像下面这样修改:
&?xml version="1.0" encoding="UTF-8"?&
&Context antiJARLocking="true" path="/activiti-explorer2"&
&Resource auth="Container"
name="jdbc/activitiDB"
type="javax.sql.DataSource"
description="JDBC DataSource"
url="jdbc:mysql://localhost:3306/activiti"
driverClassName="com.mysql.jdbc.Driver"
username="sa"
password=""
defaultAutoCommit="false"
initialSize="5"
maxWait="5000"
maxActive="120"
maxIdle="5"/&
&/Context&
支持的数据库下面列出Activiti使用的数据库类型(大小写敏感)。Table&3.1.&支持的数据库Activiti数据库类型JDBC URL实例备注h2jdbc:h2:tcp://localhost/activiti默认配置的数据库mysqljdbc:mysql://localhost:3306/activiti?autoReconnect=true使用mysql-connector-java驱动测试oraclejdbc:oracle:thin:@localhost:1521:xe&postgresjdbc:postgresql://localhost:5432/activiti&db2jdbc:db2://localhost:50000/activiti&mssqljdbc:sqlserver://localhost:1433/activiti&创建数据库表
下面是创建数据库表最简单的办法:
把activiti-engine的jar放到classpath下添加对应的数据库驱动把Activiti配置文件 (activiti.cfg.xml) 放到 classpath下,
指向你的数据库(参考)执行 DbSchemaCreate 类的main方法
不过,一般情况只有数据库管理员才能执行DDL语句。
在生产环境,这也是最明智的选择。
SQL DDL语句可以从Activiti下载页或Activiti发布目录里找到,在database子目录下。
脚本也包含在引擎的jar中(activiti-engine-x.jar),
在org/activiti/db/create包下(drop目录里是删除语句)。
SQL文件的命名方式如下
activiti.{db}.{create|drop}.{type}.sql
其中 db 是 ,
type 是
engine: 引擎执行的表。必须。identity: 包含用户,群组,用户与组之间的关系的表。
这些表是可选的,只有使用引擎自带的默认身份管理时才需要。history: 包含历史和审计信息的表。可选的:历史级别设为none时不会使用。
注意这也会引用一些需要把数据保存到历史表中的功能(比如任务的评论)。
MySQL用户需要注意: 版本低&#.4的MySQL不支持毫秒精度的timstamp或date类型。
更严重的是,有些版本会在尝试创建这样一列时抛出异常,而有些版本则不会。
在执行自动创建/更新时,引擎会在执行过程中修改DDL。
当使用DDL时,可以选择通用版本和名为mysql55的文件。
(它适合所有版本低&#.4的情况)。
后一个文件会将列的类型设置为没有毫秒的情况。
总结一下,对于MySQL版本会执行如下操作
&5.6: 不支持毫秒精度。可以使用DDL文件(包含mysql55的文件)。可以实现自动创建/更新。5.6.0 - 5.6.3: 不支持毫秒精度。无法自动创建/更新。建议更新到新的数据库版本。如果真的需要的话,也可以使用mysql 5.5。5.6.4+:支持毫秒精度。可以使用DDL文件(默认包含mysql的文件)。可以实现自动创建、更新。
注意对于已经更新了MySQL数据库,而且Activiti表已经创建/更新的情况,
必须手工修改列的类型。
理解数据库表的命名
Activiti的表都以ACT_开头。
第二部分是表示表的用途的两个字母标识。
用途也和服务的API对应。
ACT_RE_*: 'RE'表示repository。
这个前缀的表包含了流程定义和流程静态资源
(图片,规则,等等)。
ACT_RU_*: 'RU'表示runtime。
这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。
Activiti只在流程实例执行过程中保存这些数据,
在流程结束时就会删除这些记录。
这样运行时表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。
这些表包含身份信息,比如用户,组等等。
ACT_HI_*: 'HI'表示history。
这些表包含历史数据,比如历史流程实例,
变量,任务等等。
ACT_GE_*: 通用数据,
用于不同场景下。
数据库升级在执行更新之前要先备份数据库
(使用数据库的备份功能)
默认,每次构建流程引擎时都会进行版本检测。
这一切都在应用启动或Activiti webapp启动时发生。
如果Activiti发现数据库表的版本与依赖库的版本不同,
就会抛出异常。
要升级,你要把下面的配置
放到activiti.cfg.xml配置文件里:
&beans ... &
&bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"&
&!-- ... --&
&property name="databaseSchemaUpdate" value="true" /&
&!-- ... --&
&/beans& 然后,把对应的数据库驱动放到classpath里。
升级应用的Activiti依赖。启动一个新版本的Activiti
指向包含旧版本的数据库。将databaseSchemaUpdate设置为true,
Activiti会自动将数据库表升级到新版本,
当发现依赖和数据库表版本不通过时。
也可以执行更新升级DDL语句。
也可以执行数据库脚本,可以在Activiti下载页找到。
启用Job执行器JobExecutor是管理一系列线程的组件,可以触发定时器(也包含后续的异步消息)。
在单元测试场景下,很难使用多线程。因此API允许查询(ManagementService.createJobQuery)和执行job
(ManagementService.executeJob),所以job可以在单元测试中控制。
要避免与job执行器冲突,可以关闭它。
默认,JobExecutor在流程引擎启动时就会激活。
如果不想在流程引擎启动后自动激活JobExecutor,可以设置
&property name="jobExecutorActivate" value="false" /&
配置邮件服务器
可以选择配置邮件服务器。Activiti支持在业务流程中发送邮件。
想真正的发送一个email,必须配置一个真实的SMTP邮件服务器。
参考。
配置历史
可以选择定制历史存储的配置。你可以通过配置影响引擎的。
参考。
&property name="history" value="audit" /&
为表达式和脚本暴露配置默认,activiti.cfg.xml和你自己的Spring配置文件中所有bean
都可以在表达式和脚本中使用。
如果你想限制配置文件中的bean的可见性,
可以配置流程引擎配置的beans配置。
ProcessEngineConfiguration的beans是一个map。当你指定了这个参数,
只有包含这个map中的bean可以在表达式和脚本中使用。
通过在map中指定的名称来决定暴露的bean。
配置部署缓存所有流程定义都被缓存了(解析之后)避免每次使用前都要访问数据库,
因为流程定义数据是不会改变的。
默认,不会限制这个缓存。如果想限制流程定义缓存,可以添加如下配置
&property name="processDefinitionCacheLimit" value="10" /&
这个配置会把默认的hashmap缓存替换成LRU缓存,来提供限制。
当然,这个配置的最佳值跟流程定义的总数有关,
实际使用中会具体使用多少流程定义也有关。也你可以注入自己的缓存实现。这个bean必须实现
org.activiti.engine.impl.persistence.deploy.DeploymentCache接口:
&property name="processDefinitionCache"&
&bean class="org.activiti.MyCache" /&
&/property&有一个类似的配置叫knowledgeBaseCacheLimit和knowledgeBaseCache,
它们是配置规则缓存的。只有流程中使用规则任务时才会用到。日志从Activiti 5.12开始,SLF4J被用作日志框架,替换了之前使用java.util.logging。
所有日志(activiti, spring, mybatis等等)都转发给SLF4J
允许使用你选择的日志实现。默认activiti-engine依赖中没有提供SLF4J绑定的jar,
需要根据你的实际需要使用日志框架。如果没有添加任何实现jar,SLF4J会使用NOP-logger,不使用任何日志,不会发出警告,而且什么日志都不会记录。
可以通过了解这些实现。使用Maven,比如使用一个依赖(这里使用log4j),注意你还需要添加一个version:
&dependency&
&groupId&org.slf4j&/groupId&
&artifactId&slf4j-log4j12&/artifactId&
&/dependency&activiti-explorer和activiti-rest应用都使用了Log4j绑定。执行所有activiti-*模块的单元测试页使用了Log4j。
特别提醒如果容器classpath中存在commons-logging:
为了把spring日志转发给SLF4J,需要使用桥接(参考)。
如果你的容器提供了commons-logging实现,请参考下面网页:来确保稳定性。
使用Maven的实例(忽略版本):
&dependency&
&groupId&org.slf4j&/groupId&
&artifactId&jcl-over-slf4j&/artifactId&
&/dependency&
映射诊断上下文
&#中,activiti支持slf4j的MDC功能。
如下的基础信息会传递到日志中记录:
流程定义Id标记为mdcProcessDefinitionID
流程实例Id标记为mdcProcessInstanceID
分支Id标记为mdcexecutionId
默认不会记录这些信息。可以配置日志使用期望的格式来显示它们,扩展通常的日志信息。
比如,下面的log4j配置定义会让日志显示上面提及的信息:
log4j.appender.consoleAppender.layout.ConversionPattern =ProcessDefinitionId=%X{mdcProcessDefinitionID}
executionId=%X{mdcExecutionId} mdcProcessInstanceID=%X{mdcProcessInstanceID} mdcBusinessKey=%X{mdcBusinessKey} %m%n"
当系统进行高风险任务,日志必须严格检查时,这个功能就非常有用,比如要使用日志分析的情况。
事件处理
Activiti 5.15中实现了一种事件机制。它允许在引擎触发事件时获得提醒。
参考了解有效的事件。
可以为对应的事件类型注册监听器,在这个类型的任何时间触发时都会收到提醒。
你可以添加引擎范围的事件监听器,
添加引擎范围的事件监听器,
或添加event-listener到。
所有分发的事件,都是org.activiti.engine.delegate.event.ActivitiEvent的子类。事件包含(如果有效)type,executionId,processInstanceId和processDefinitionId。
对应的事件会包含事件发生时对应上下文的额外信息,
这些额外的载荷可以在中找到。
事件监听器实现
实现事件监听器的唯一要求是实现org.activiti.engine.delegate.event.ActivitiEventListener。
西面是一个实现监听器的例子,它会把所有监听到的事件打印到标准输出中,包括job执行的事件异常:
public class MyEventListener implements ActivitiEventListener {
public void onEvent(ActivitiEvent event) {
switch (event.getType()) {
case JOB_EXECUTION_SUCCESS:
System.out.println(

我要回帖

更多关于 nginx配置文件详解 的文章

 

随机推荐