﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-hyljava-随笔分类-spring</title><link>http://www.blogjava.net/hyljava/category/51790.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 23 Nov 2013 23:13:33 GMT</lastBuildDate><pubDate>Sat, 23 Nov 2013 23:13:33 GMT</pubDate><ttl>60</ttl><item><title>四海兴唐课程辅导平台</title><link>http://www.blogjava.net/hyljava/archive/2013/11/23/406728.html</link><dc:creator>何云隆</dc:creator><author>何云隆</author><pubDate>Sat, 23 Nov 2013 12:52:00 GMT</pubDate><guid>http://www.blogjava.net/hyljava/archive/2013/11/23/406728.html</guid><wfw:comment>http://www.blogjava.net/hyljava/comments/406728.html</wfw:comment><comments>http://www.blogjava.net/hyljava/archive/2013/11/23/406728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyljava/comments/commentRss/406728.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyljava/services/trackbacks/406728.html</trackback:ping><description><![CDATA[<div>四海兴唐课程辅导平台<br /><a href="http://fd.itedu-g.cn/login.php">http://fd.itedu-g.cn/login.php</a></div><img src ="http://www.blogjava.net/hyljava/aggbug/406728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyljava/" target="_blank">何云隆</a> 2013-11-23 20:52 <a href="http://www.blogjava.net/hyljava/archive/2013/11/23/406728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring中的JDBCTemplate使用（非常详细的配置过程）</title><link>http://www.blogjava.net/hyljava/archive/2013/02/22/Spring-JDBCTemplate.html</link><dc:creator>何云隆</dc:creator><author>何云隆</author><pubDate>Fri, 22 Feb 2013 12:33:00 GMT</pubDate><guid>http://www.blogjava.net/hyljava/archive/2013/02/22/Spring-JDBCTemplate.html</guid><wfw:comment>http://www.blogjava.net/hyljava/comments/395607.html</wfw:comment><comments>http://www.blogjava.net/hyljava/archive/2013/02/22/Spring-JDBCTemplate.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyljava/comments/commentRss/395607.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyljava/services/trackbacks/395607.html</trackback:ping><description><![CDATA[<div><p style="margin-bottom:0pt; margin-top:0pt; text-align:center; "><div>Spring中的JDBCTemplate使用</div></p><p style="margin-bottom:0pt; margin-top:0pt; text-align:justify; "><span style="font-size: 10.5pt; font-family: 宋体; ">数据库准备：</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-align:justify; "><span style="font-size: 10.5pt; font-family: 宋体; ">创建数据库</span><p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><img src="http://www.blogjava.net/images/blogjava_net/hyljava/图片1.png" width="159" height="23" alt="" /></p></p><p style="margin-bottom:0pt; margin-top:0pt; text-align:justify; "><span style="font-size: 10.5pt; font-family: 宋体; ">创建表：</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-align:justify; "><img src="http://www.blogjava.net/images/blogjava_net/hyljava/图片2.png" width="227" height="71" alt="" /></p><p style="margin-bottom:0pt; margin-top:0pt; text-align:justify; "><span style="font-size: 10.5pt; font-family: 宋体; ">Java代码：</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">1、</span><span style="font-size: 10.5pt; font-family: 宋体; ">创建web&nbsp;工程&nbsp;&nbsp;</span><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 'Courier New'; background-position: initial initial; background-repeat: initial initial; ">springJdbcTemplate</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">2、</span><span style="font-size: 10.5pt; font-family: 宋体; ">添加Spring能力&nbsp;在此需要将jdbc包也同时加入</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><img src="http://www.blogjava.net/images/blogjava_net/hyljava/图片3.png" width="580" height="668" alt="" /><br /></p><p style="margin-bottom:0pt; margin-top:0pt; "></p><p style="margin-bottom:0pt; margin-top:0pt; "><img src="http://www.blogjava.net/images/blogjava_net/hyljava/图片4.png" width="446" height="479" alt="" /><br /></p><p style="margin-bottom:0pt; margin-top:0pt; "></p><p style="margin-bottom:0pt; margin-top:0pt; "></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">3、</span><span style="font-size: 10.5pt; font-family: 宋体; ">配置上mysql的连接驱动(拷贝mysql驱动包，如果不拷贝报错很诡异)</span><span style="font-size: 10.5pt; font-family: 宋体; "><br /></span><span style="font-size: 10.5pt; font-family: 宋体; ">在</span><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 'Courier New'; background-position: initial initial; background-repeat: initial initial; ">applicationContext.xml</span><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 宋体; background-position: initial initial; background-repeat: initial initial; ">中进行配置</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 宋体; background-position: initial initial; background-repeat: initial initial; ">在</span><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 宋体; background-position: initial initial; background-repeat: initial initial; ">beans标签中填写</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;</span><span style="color: #3f7f7f; font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #c0c0c0; font-family: 'Courier New'; background-position: initial initial; background-repeat: initial initial; ">bean</span>&nbsp;<span style="color: #7f007f; font-size: 10.5pt; font-family: 'Courier New'; ">id</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">=</span><span style="color: #2a00ff; font-style: italic; font-size: 10.5pt; font-family: 'Courier New'; ">"jdbcTemplate"</span>&nbsp;<span style="color: #7f007f; font-size: 10.5pt; font-family: 'Courier New'; ">class</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">=</span><span style="color: #2a00ff; font-style: italic; font-size: 10.5pt; font-family: 'Courier New'; ">"org.springframework.jdbc.core.JdbcTemplate"</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">property</span>&nbsp;<span style="color: #7f007f; font-size: 10.5pt; font-family: 'Courier New'; ">name</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">=</span><span style="color: #2a00ff; font-style: italic; font-size: 10.5pt; font-family: 'Courier New'; ">"dataSource"</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">ref</span>&nbsp;<span style="color: #7f007f; font-size: 10.5pt; font-family: 'Courier New'; ">local</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">=</span><span style="color: #2a00ff; font-style: italic; font-size: 10.5pt; font-family: 'Courier New'; ">"dataSource"</span>&nbsp;<span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">/&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;/</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">property</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;/</span><span style="color: #3f7f7f; font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #c0c0c0; font-family: 'Courier New'; background-position: initial initial; background-repeat: initial initial; ">bean</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span>&nbsp;<span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">bean</span>&nbsp;<span style="color: #7f007f; font-size: 10.5pt; font-family: 'Courier New'; ">id</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">=</span><span style="color: #2a00ff; font-style: italic; font-size: 10.5pt; font-family: 'Courier New'; ">"dataSource"</span>&nbsp;<span style="color: #7f007f; font-size: 10.5pt; font-family: 'Courier New'; ">class</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">=</span><span style="color: #2a00ff; font-style: italic; font-size: 10.5pt; font-family: 'Courier New'; ">"org.springframework.jdbc.datasource.DriverManagerDataSource"</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span>&nbsp;<span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">property</span>&nbsp;<span style="color: #7f007f; font-size: 10.5pt; font-family: 'Courier New'; ">name</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">=</span><span style="color: #2a00ff; font-style: italic; font-size: 10.5pt; font-family: 'Courier New'; ">"driverClassName"</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">value</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">com.mysql.jdbc.Driver</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;/</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">value</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;/</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">property</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">property</span>&nbsp;<span style="color: #7f007f; font-size: 10.5pt; font-family: 'Courier New'; ">name</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">=</span><span style="color: #2a00ff; font-style: italic; font-size: 10.5pt; font-family: 'Courier New'; ">"url"</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">value</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">jdbc:mysql://</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">localhost</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">:3306/</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">myspringjdbcdb</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;/</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">value</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;/</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">property</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">property</span>&nbsp;<span style="color: #7f007f; font-size: 10.5pt; font-family: 'Courier New'; ">name</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">=</span><span style="color: #2a00ff; font-style: italic; font-size: 10.5pt; font-family: 'Courier New'; ">"username"</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">value</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">root</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;/</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">value</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;/</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">property</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">property</span>&nbsp;<span style="color: #7f007f; font-size: 10.5pt; font-family: 'Courier New'; ">name</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">=</span><span style="color: #2a00ff; font-style: italic; font-size: 10.5pt; font-family: 'Courier New'; ">"password"</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">value</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">root</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;/</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">value</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;/</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">property</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span>&nbsp;</p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span>&nbsp;</p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Courier New'; ">	</span>&nbsp;<span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&lt;/</span><span style="color: #3f7f7f; font-size: 10.5pt; font-family: 'Courier New'; ">bean</span><span style="color: #008080; font-size: 10.5pt; font-family: 'Courier New'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "></p><p style="margin-bottom: 0pt; margin-top: 0pt; "><span style="color: #008080; font-size: 10.5pt; font-family: 宋体; ">4、</span><span style="color: #008080; font-size: 10.5pt; font-family: 宋体; ">创建包结构并且写出类（每个类中可以没内容）</span><span style="color: #008080; font-size: 10.5pt; font-family: 宋体; "><br /></span><img src="http://www.blogjava.net/images/blogjava_net/hyljava/图片5.png" width="283" height="249" alt="" /></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">5、</span><span style="font-size: 10.5pt; font-family: 宋体; ">每个类中的源代码</span><span style="font-size: 10.5pt; font-family: 宋体; "><br /></span></p><p style="margin-bottom: 0pt; margin-top: 0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">UserDao.java</span><span style="font-size: 10.5pt; font-family: 宋体; "><br /></span><span style="font-size: 10.5pt; "><br /><img src="http://www.blogjava.net/images/blogjava_net/hyljava/图片6.png" width="312" height="197" alt="" /><br /></span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; "><br /></span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">UserDaoImp.java</span></p><p style="margin-bottom:0pt; margin-top:0pt; "></p><p style="margin-bottom:0pt; margin-top:0pt; "><img src="http://www.blogjava.net/images/blogjava_net/hyljava/图片7.png" width="576" height="334" alt="" /><br /></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">此项写完填写</span><span style="font-size: 10.5pt; font-family: 宋体; ">在</span><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 'Courier New'; background-position: initial initial; background-repeat: initial initial; ">applicationContext.xml</span><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 宋体; background-position: initial initial; background-repeat: initial initial; ">中进行配置</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 宋体; background-position: initial initial; background-repeat: initial initial; ">在</span><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 宋体; background-position: initial initial; background-repeat: initial initial; ">beans标签中填写</span></p><p style="margin-bottom:0pt; margin-top:0pt; "></p><p style="margin-bottom:0pt; margin-top:0pt; "><img src="http://www.blogjava.net/images/blogjava_net/hyljava/图片8.png" width="469" height="130" alt="" /><br /></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">User.java</span></p><p style="margin-bottom: 0pt; margin-top: 0pt; "><img src="http://www.blogjava.net/images/blogjava_net/hyljava/图片9.png" width="388" height="238" alt="" /><br /></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">每个成员变量都写上get和set方法</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">并且在此类中还要加入</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><img src="http://www.blogjava.net/images/blogjava_net/hyljava/%E5%9B%BE%E7%89%8710.png" width="550" height="147" alt="" />&nbsp;<br /></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">此项写完填写</span><span style="font-size: 10.5pt; font-family: 宋体; ">在</span><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 'Courier New'; background-position: initial initial; background-repeat: initial initial; ">applicationContext.xml</span><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 宋体; background-position: initial initial; background-repeat: initial initial; ">中进行配置</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 宋体; background-position: initial initial; background-repeat: initial initial; ">在</span><span style="font-size: 10.5pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: 宋体; background-position: initial initial; background-repeat: initial initial; ">beans标签中填写</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><img src="http://www.blogjava.net/images/blogjava_net/hyljava/图片11.png" width="377" height="97" alt="" /><br /></p><p style="margin-bottom:0pt; margin-top:0pt; "></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">测试类TestAction.java</span></p><p style="margin-bottom: 0pt; margin-top: 0pt; "><img src="http://www.blogjava.net/images/blogjava_net/hyljava/图片12.png" alt="" /><br /></p><p style="margin-bottom:0pt; margin-top:0pt; "></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">打印出结果：</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><img src="http://www.blogjava.net/images/blogjava_net/hyljava/图片13.png" alt="" /><br /></p><p style="margin-bottom:0pt; margin-top:0pt; ">&nbsp;</p></div><img src ="http://www.blogjava.net/hyljava/aggbug/395607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyljava/" target="_blank">何云隆</a> 2013-02-22 20:33 <a href="http://www.blogjava.net/hyljava/archive/2013/02/22/Spring-JDBCTemplate.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Write operations are not allowed in read-only mode 只读模式下(FlushMode.NEVER/MANUAL)写操作不允</title><link>http://www.blogjava.net/hyljava/archive/2012/09/05/387072.html</link><dc:creator>何云隆</dc:creator><author>何云隆</author><pubDate>Wed, 05 Sep 2012 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/hyljava/archive/2012/09/05/387072.html</guid><wfw:comment>http://www.blogjava.net/hyljava/comments/387072.html</wfw:comment><comments>http://www.blogjava.net/hyljava/archive/2012/09/05/387072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyljava/comments/commentRss/387072.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyljava/services/trackbacks/387072.html</trackback:ping><description><![CDATA[<div class="articalTitle" isshow="1">
<h2 id="t_656ffe730100ugtw" class="titName SG_txta">
<h2 id="t_656ffe730100ugtw" class="titName SG_txta"></h2>Write&nbsp;operations&nbsp;are&nbsp;not&nbsp;allowed&nbsp;in&nbsp;read-only&nbsp;mode&nbsp;只读模式下(FlushMode.NEVER/MANUAL)写操作不允</h2><span class="time SG_txtc"> </span><!-- 正文开始 -->
</div>
<div id="sina_keyword_ad_area2" class="articalContent  ">
<div>
<p>org.springframework.dao.InvalidDataAccessApiUsag<wbr>eException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.</p>
<p><span style="color: #ff0000; font-size: 18px">问题</span>：<span style="font-family: 宋体; color: #0055ff; font-size: 14px">只读模式下(FlushMode.NEVER/MANUAL)写操作不被允许：把你的Session改成FlushMode.COMMIT/AUTO或者清除事务定义中的readOnly标记。</span></p>
<p>&nbsp;<wbr></p>
<p>错误原因:<br />&nbsp;<wbr><span style="color: #5500ff; font-size: 16px">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为<span style="color: #0f9932">FlushMode.NEVER</span>。然后把该sessionFactory绑定到<span style="color: #0f9932">TransactionSynchronizati<wbr>onManager</span>，使request的整个过程都使用同一个session，在请求过后再接除该sessionFactory的绑定，最后</span><span style="color: #5500ff; font-size: 16px">closeSessionIfNecessary</span><span style="color: #5500ff; font-size: 16px">根据该session是否已和transaction绑定来决定是否关闭session。在这个过程中，若HibernateTemplate 发现自当前session有不是readOnly的transaction，就会获取到FlushMode.AUTO Session，使方法拥有写权限。</span><span style="color: #5500ff; font-size: 16px">也即是，如果有不是readOnly的transaction就可以由Flush.NEVER转为Flush.AUTO,拥有insert,update,delete操作权限，如果没有transaction，并且没有另外人为地设flush model的话，则doFilter的整个过程都是Flush.NEVER。所以受transaction<span style="color: #00cc22">(</span><u><span style="color: #00cc22">声明式的事务</span></u><span style="color: #00cc22">)</span>保护的方法有写权限，没受保护的则没有。</span><br /><br /><u>解决方法:</u></p>
<p><span style="color: #5500ff">web.xml配置里添加</span><br /><span style="color: #0f9932">&lt;filter&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;filter-name&gt;OpenSessionInViewFilter&lt;/filter-name&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;filter-class&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;/filter-class&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;init-param&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;param-name&gt;sessionFactoryBeanName&lt;/param-name&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;param-value&gt;sessionFactory&lt;/param-value&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;/init-param&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;init-param&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;param-name&gt;singleSession&lt;/param-name&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;param-value&gt;true&lt;/param-value&gt;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;/init-param&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;init-param&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;param-name&gt; flushMode &lt;/param-name&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;param-value&gt;AUTO &lt;/param-value&gt;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;/init-param&gt;</span><br /><span style="color: #0f9932">&lt;/filter&gt;</span><br />&nbsp;<wbr>&nbsp;<wbr>//&nbsp;<wbr>&nbsp;<wbr> 。。。。</p>
<p><br /><span style="color: #0f9932">&lt;filter-mapping&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;filter-name&gt;OpenSessionInViewFilter&lt;/filter-name&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;url-pattern&gt;/*&lt;/url-pattern&gt;</span><br /><span style="color: #0f9932">&lt;/filter-mapping&gt;</span></p>
<p>&nbsp;<wbr></p>
<p><span style="color: #0f9932">如果在交给spring 管理的情况下，在beans.xml 里的配置</span></p>
<p><span style="color: #0f9932">&nbsp;<wbr>&lt;bean id="txManager"<br />&nbsp;<wbr>&nbsp;<wbr>class="org.springframework.orm.hibernate3.HibernateTransactionMana<wbr>ger"&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;property name="sessionFactory" ref="sessionFactory" /&gt;<br />&nbsp;<wbr>&lt;/bean&gt;</span></p>
<p><span style="color: #0f9932">&nbsp;<wbr>&lt;aop:config&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;aop:pointcut id="bussinessService"<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>expression="execution(* com.fan.service.base.*.*(..))" /&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;aop:advisor pointcut-ref="bussinessService"<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>advice-ref="txAdvice" /&gt;<br />&nbsp;<wbr>&lt;/aop:config&gt;</span></p>
<p><span style="color: #0f9932">&nbsp;<wbr>&lt;tx:advice id="txAdvice" transaction-manager="txManager"&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;tx:attributes&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;tx:method name="get*" read-only="false" propagation="NOT_SUPPORTED"/&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;tx:method name="find*" read-only="false" propagation="NOT_SUPPORTED"/&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;tx:method name="save*" propagation="REQUIRED"/&gt; // 如果不把save update delete都配置上，<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;tx:method name="update*" propagation="REQUIRED"/&gt;&nbsp;<wbr>//这些操作会无效<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;tx:method name="delete*" propagation="REQUIRED"/&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;/tx:attributes&gt;<br />&nbsp;<wbr>&lt;/tx:advice&gt;</span></p></div></div><img src ="http://www.blogjava.net/hyljava/aggbug/387072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyljava/" target="_blank">何云隆</a> 2012-09-05 11:57 <a href="http://www.blogjava.net/hyljava/archive/2012/09/05/387072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LOG4J的解析</title><link>http://www.blogjava.net/hyljava/archive/2012/05/28/379380.html</link><dc:creator>何云隆</dc:creator><author>何云隆</author><pubDate>Mon, 28 May 2012 11:06:00 GMT</pubDate><guid>http://www.blogjava.net/hyljava/archive/2012/05/28/379380.html</guid><wfw:comment>http://www.blogjava.net/hyljava/comments/379380.html</wfw:comment><comments>http://www.blogjava.net/hyljava/archive/2012/05/28/379380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyljava/comments/commentRss/379380.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyljava/services/trackbacks/379380.html</trackback:ping><description><![CDATA[<p>方法一、 解决的办法自然是用相对路径代替绝对路径，其实log4j的FileAppender本身就有这样的机制，如：log4j.appender.logfile.File=${WORKDIR}/logs/app.log <br />其中&#8220;${WORKDIR}/&#8221;是个变量，会被System Property中的&#8220;WORKDIR&#8221;的值代替。这样，我们就可以在log4j加载配置文件之前，先用System.setProperty ("WORKDIR", WORKDIR);设置好根路径，此操作可通过一初始的servlet进行。 </p>
<p>方法二、可以使用服务器环境变量 <br />log4j的配置文件支持服务器的vm的环境变量，格式类似${catalina.home} <br />log4j.appender.R=org.apache.log4j.RollingFileAppender <br />log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log <br />log4j.appender.R.MaxFileSize=10KB <br />其中的${catalina.home}并非windows系统的环境变量，这个环境变量就不需要在Windows系统的环境变量中设置。之所以这样，你可以看看tomcat\bin\catalina.bat(startup,shutdown都是调用这个)里面自带有-Dcatalina.home= "%CATALINA_HOME%" 。继承这个思想，所以你也可以自己设定一个参数-Dmylog.home="D:/abc/log"到对应的服务器java启动的vm参数中 </p>
<p>方法三、通过servlet初始化init()方法中加载file属性实现相对路径 <br />具体实现:做一个servlet,在系统加载的时候,就把properties的文件读到一个properties文件中.那个file的属性值(我使用的是相对目录)改掉(前面加上系统的根目录),让后把这个properties对象设置到propertyConfig中去,这样就初始化了log的设置.在后面的使用中就用不着再配置了 <br />一般在我们开发项目过程中,log4j日志输出路径固定到某个文件夹,这样如果我换一个环境,日志路径又需要重新修改,比较不方便,目前我采用了动态改变日志路径方法来实现相对路径保存日志文件 <br />(1).在项目启动时,装入初始化类: <br />public class Log4jInit extends HttpServlet { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static Logger logger = Logger.getLogger(Log4jInit.class); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Log4jInit() { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void init(ServletConfig config) throws ServletException { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String prefix = config.getServletContext().getRealPath("/"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String file = config.getInitParameter("log4j"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String filePath = prefix + file; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Properties props = new Properties(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileInputStream istream = new FileInputStream(filePath); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.load(istream); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; istream.close(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //toPrint(props.getProperty("log4j.appender.file.File")); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String logFile = prefix + props.getProperty("log4j.appender.file.File");//设置路径 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("log4j.appender.file.File",logFile); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PropertyConfigurator.configure(props);//装入log4j配置信息 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; toPrint("Could not read configuration file [" + filePath + "]."); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; toPrint("Ignoring configuration file [" + filePath + "]."); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void toPrint(String content) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(content); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />} <br />实际上log4j的配置文件log4j.properties如为默认名，可放置在JVM能读到的classpath里的任意地方，一般是放在WEB- INF/classes目录下。当log4j的配置文件不再是默认名，则需要另外加载并给出参数，如上 &#8220;ropertyConfigurator.configure(props);//装入log4j配置信息&#8221; </p>
<p>(2).Web.xml中的配置 <br />&lt;servlet&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;log4j-init&lt;/servlet-name&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;Log4jInit&lt;/servlet-class&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;log4j&lt;/param-name&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;WEB-INF/classes/log4j.properties&lt;/param-value&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet&gt; </p>
<p>注意：上面的load-on-startup设为0，以便在Web容器启动时即装入该Servlet。log4j.properties文件放在根的properties子目录中，也可以把它放在其它目录中。应该把.properties文件集中存放，这样方便管理。 <br />(3).log4j.properties中即可配置log4j.appender.file.File为当前应用的相对路径. </p>
<p><br />以上是网上log4j日志文件的相对路径配置的三种方法（我能找到的就三种），分析： </p>
<p>方法一主要是扩展了log4j的RollingFileAppender类，其他的FileAppender同样道理。扩展的方法，就是用一个子类去覆盖setFile方法，这个方法在log4j读取配置文件生成appender的时候调用，传入的就是配 <br />置文件中的路径，这样我就可以按照自己的想法在路径前面加上根路径了。这种方法可以在log4j.properties中用相对路径自由配置log4j.appender.A1.File属性来决定生成的日志相对web应用根 <br />目录的位置。 </p>
<p>方法二是利用服务器vm中已经存在的环境变量如${catalina.home}来设置相对于${catalina.home}的日志路径，日志只能放到服务器子目录里，而且如果是用的其它服务器，则要改对应的环境变量。此方法平台移植不方便。 </p>
<p>方法三是扩展ActionServlet类，覆盖其init()方法，新方法中载入log4j.properties位置的参数，可以自由配置log4j的配置文件的名字和存放位置。也可自由配置log4j日志文件的相对于当前应用的路径。详 <br />细代码如下： </p>
<p>程序代码 <br />package wbb.bysxxglxt.util; </p>
<p>import org.apache.struts.action.*; <br />import org.apache.commons.logging.LogFactory; <br />import org.apache.commons.logging.Log; <br />import javax.servlet.ServletException; <br />import java.util.Properties; <br />import java.io.InputStream; <br />import org.apache.log4j.PropertyConfigurator; <br />import java.io.FileInputStream; <br />import java.io.IOException; </p>
<p>public class ExtendedActionServlet extends ActionServlet { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Log log = LogFactory.getLog(this.getClass().getName()); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public ExtendedActionServlet() {} </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void init() throws ServletException { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.info( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Initializing, My MyActionServlet init this System's Const Variable"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String prefix = this.getServletConfig().getServletContext().getRealPath( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String file = this.getServletConfig().getInitParameter("log4j"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String filePath = prefix + file; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Properties props = new Properties(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(prefix); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(file); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(filePath); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileInputStream log4jStream = new FileInputStream(filePath); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.load(log4jStream); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4jStream.close(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String logFile = prefix + <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.getProperty("log4j.appender.A1.File"); //设置路径 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(logFile); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.setProperty("log4j.appender.A1.File", logFile); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PropertyConfigurator.configure(props); //装入log4j配置信息 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.info("Initializing, end My Init"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.init();//应用了struts,此方法不能省，ActionServlet覆盖了的此方法中有很多重要操作 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />} </p>
<p><br />**********************应用web.xml 关键部分*************************** </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />程序代码 <br />&lt;servlet&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;action&lt;/servlet-name&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;wbb.bysxxglxt.util.ExtendedActionServlet&lt;/servlet-class&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;log4j&lt;/param-name&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;properties\log4j.properties&lt;/param-value&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;debug&lt;/param-name&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;0&lt;/param-value&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;application&lt;/param-name&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;ApplicationResources&lt;/param-value&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;0&lt;/load-on-startup&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;action&lt;/servlet-name&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.do&lt;/url-pattern&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt; </p>
<p><br />注意log4j参数中相对路径的斜杠线的写法，而且log4j属性文件如放置在web-inf/classes目录或web-inf等目录中最好改名，因为在加载此Servlet之前，服务器如tomcat启动时会自动搜索web-inf目录和web-inf/classes目录中log4j.properties文件，如有则自动加载。log4j属性文件加载后,由于该属性文件中log4j.appender.A1.File的值用的是相对路径，自动加载配置便会出错： <br />log4j:ERROR setFile(null,true) call failed. <br />java.io.FileNotFoundException: WEB-INF\logs\bysxxglxt.log (系统找不到指定的路径。) <br />不知道log4j为什么会这么早自动启动。尽管后面加载扩展的ActionServlet中正确设置了log4j属性文件并正常加载了，但报的这个错还是怪不爽的，于是只有更改log4j属性文件名字或者更改其存放位置，让其不能自动加载了，不过还是有两个警告： <br />log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax). <br />log4j:WARN Please initialize the log4j system properly. <br />这样做就算是掩耳盗铃了，如果你有更好的解决办法，希望能在此贴出来，大家一起研究。 </p>
<p>********************log4j.properties***************************** <br />### 设置logger级别 ### </p>
<p>程序代码 <br />log4j.rootLogger=DEBUG,stdout,A1 </p>
<p>### appender.stdout输出到控制台 ### <br />log4j.appender.stdout=org.apache.log4j.ConsoleAppender <br />log4j.appender.stdout.Target=System.out <br />log4j.appender.stdout.layout=org.apache.log4j.PatternLayout <br />log4j.appender.stdout.layout.ConversionPattern= [%5p] [BYSXXGLXT] %d{yyyy-MM-dd HH:mm:ss}: %-4r [%-5p] [%t] ( %F,%L ) - %m%n </p>
<p>### appender.A1输出到日志文件 ### <br />log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender <br />log4j.appender.A1.File=WEB-INF\\logs\\bysxxglxt.log <br />##注意上面日志文件相对应用根目录路径的写法 <br />log4j.appender.A1.DatePattern='.'yyyy-MM-dd'.log' <br />log4j.appender.A1.Append=true <br />## 输出DEBUG级别以上的日志 <br />log4j.appender.A1.Threshold=DEBUG <br />log4j.appender.A1.layout=org.apache.log4j.PatternLayout <br />log4j.appender.A1.layout.ConversionPattern= [%5p] [BYSXXGLXT] %d{yyyy-MM-dd HH:mm:ss}: %-4r&nbsp;&nbsp;&nbsp;&nbsp; [%t] ( %F,%L ) - %m%n <br /></p><img src ="http://www.blogjava.net/hyljava/aggbug/379380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyljava/" target="_blank">何云隆</a> 2012-05-28 19:06 <a href="http://www.blogjava.net/hyljava/archive/2012/05/28/379380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4j的简单配置</title><link>http://www.blogjava.net/hyljava/archive/2012/05/28/379378.html</link><dc:creator>何云隆</dc:creator><author>何云隆</author><pubDate>Mon, 28 May 2012 11:04:00 GMT</pubDate><guid>http://www.blogjava.net/hyljava/archive/2012/05/28/379378.html</guid><wfw:comment>http://www.blogjava.net/hyljava/comments/379378.html</wfw:comment><comments>http://www.blogjava.net/hyljava/archive/2012/05/28/379378.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyljava/comments/commentRss/379378.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyljava/services/trackbacks/379378.html</trackback:ping><description><![CDATA[<p>&nbsp;首先导入两个包:&nbsp; commons-logging.jar&nbsp; log4j-1.2.12.jar</p>
<p>&nbsp;&nbsp; 在src下编写3个 properties文件</p>
<p>1.log4j.properties 下面是内容</p>
<p><br />##LOGGERS</p>
<p>#define a logger<br />log4j.rootLogger=INFO,console,file</p>
<p>##APPENDERS<br />#define an appender named console<br />log4j.appender.console=org.apache.log4j.ConsoleAppender<br />#define an appender named file<br />log4j.appender.file=org.apache.log4j.RollingFileAppender<br />log4j.appender.file.File=d:/demo_log.txt<br />#set the log's size<br />log4j.appender.file.MaxFileSize=1000KB<br />log4j.appender.file.MaxBackupIndex=20</p>
<p>##LAYOUTS<br />#assign a SimpleLayout to console appender<br />log4j.appender.console.layout=org.apache.log4j.SimpleLayout<br />#assign a PatternLayout to file appender<br />log4j.appender.file.layout=org.apache.log4j.PatternLayout<br />log4j.appender.file.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}]%m%n</p>
<p>&nbsp;</p>
<p>2.<br />&nbsp;&nbsp;&nbsp; simplelog.properties下面是内容</p>
<p><br />log.apache.commons.logging.simplelog.defaultlog=info</p>
<p>3.<br />&nbsp;&nbsp;&nbsp; commons-logging.properties下面是内容</p>
<p>##set Log as Log4J<br />org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger</p>
<p>&nbsp;</p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/hyljava/aggbug/379378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyljava/" target="_blank">何云隆</a> 2012-05-28 19:04 <a href="http://www.blogjava.net/hyljava/archive/2012/05/28/379378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>