<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>Dhboy工作室</title><link>https://blog.dhboy.com/</link><description>Good Luck To You!</description><item><title>JFinalConfig-configConstant（JFinal常量配置）</title><link>https://blog.dhboy.com/?id=70</link><description>&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;configConstant（JFinal常量配置）:读取数据库配置文件、开发模式、视图类型、视图ViewPath、上传文件保存路径、下载文件默认路径、视图后缀名、URL参数分隔符

1、加载数据库配置，读取配置文件使用loadPropertyFile或者PropKit读取
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.g&amp;nbsp;loadProperFile(&amp;quot;config.properties&amp;quot;);&amp;nbsp;/&amp;nbsp;PropKit.use(&amp;quot;config.properties&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
2、设置开发模式（默认false）(当控制台出现action&amp;nbsp;report为开发模式)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.g&amp;nbsp;me.setDevMode(PropKit.getBoolean(&amp;quot;devMode&amp;quot;));&amp;nbsp;或&amp;nbsp;me.setDevMode(getPropertyToBoolean(&amp;quot;devMode&amp;quot;));
&amp;nbsp;&amp;nbsp;//设置Action&amp;nbsp;Report什么时候出现&amp;nbsp;默认&amp;nbsp;true
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;me.setReportAfterInvocation(false);

3.配置默认的视图类型&amp;nbsp;默认是FreeMarker
&amp;nbsp;&amp;nbsp;&amp;nbsp;me.setViewType(ViewType.JSP);
&amp;nbsp;&amp;nbsp;&amp;nbsp;
4.配置默认视图层路径viewpath
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;me.setBaseViewPath(&amp;quot;/WEB-INF/view&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
5.设置默认上传路径cos组件有效&amp;nbsp;。jfinal默认有值&amp;nbsp;相对，绝对都可以
&amp;nbsp;&amp;nbsp;&amp;nbsp;me.setBaseUploadPath(&amp;quot;xmupload&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;当路径以&amp;quot;/&amp;quot;开头或是以windows磁盘符打头，则将路径设置为绝对路径，否则路径将是以应用根路径为基础的相对路径
&amp;nbsp;&amp;nbsp;&amp;nbsp;
6.设置默认下载路径cos组件有效&amp;nbsp;jfinal默认有值&amp;nbsp;相对，绝对都可以
&amp;nbsp;&amp;nbsp;me.setBaseDownloadPath(&amp;quot;xmdownload&amp;quot;);
&amp;nbsp;&amp;nbsp;
7.设置默认的Freemarker模板文件后缀名为jfinal默认.html(基本不用)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;me.setFreemarkViewExtension(&amp;quot;.ftl&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
8.设置URL参数分隔符，默认“-”
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;me.setUrlParaSeparator(&amp;quot;~&amp;quot;);&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Fri, 12 May 2023 16:10:46 +0800</pubDate></item><item><title>老骥教大家如何给阿里云香港轻量级服务器提速</title><link>https://blog.dhboy.com/?id=67</link><description>&lt;p style=&quot;margin-top: 0px; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;本来也想学其他那些做营销的人把大家引导到老骥的微信上面来的，然后怎么怎么的&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;后来仔细想了下，这样子其实挺无聊的，最近都在谈所谓的私域流量，其实只不过就是大家平时说常见的各种群，微信群、QQ群等可以不对公众开放的领域，不像知乎这样的平台，所有人都能看得到。&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;这种其实已经违背了互联网开放的精神了，真正的大神（绝对不是说老骥我）是绝对不会干这种圈韭菜流量赚钱的事情的，想想国外那些大神级别的营销专家，那些大牛程序猿，就连微软都准备开源了。而国内居然掀起了什么私域流量，把各种群营销改个名字凭空弄出一个概念来，反正老骥是接受不了，所以老骥到现在还是那么穷:(&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;不废话了，说说香港阿里云轻量服务器吧&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://pic1.zhimg.com/80/v2-5fb12321a763badeb8ba0c1a4a284050_720w.jpg&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;相信看过老骥之前文章的朋友肯定有印象，老骥的这个香港轻量级服务器下载速度能有3-4M/s，电信宽带能跑满速&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;阿里云的这个香港轻量级服务器，用的是香港国际带宽，在国内，移动、联通都是直连的，速度那是相当快，但是就是电信，要去美国绕一圈再回来，这速度，真心蛋疼的很。&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;白天还好些，一到晚上，电信访问香港轻量服务器搭建的网站，那就是感觉要爆炸了的那种，不停的按F5，越按越慢，越慢越按。。。&lt;/p&gt;&lt;p&gt;&lt;figure data-size=&quot;normal&quot; style=&quot;margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img src=&quot;https://pic1.zhimg.com/80/v2-9bdab0d39420ff0ee80f499b407b9510_720w.png&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;85&quot; data-rawheight=&quot;38&quot; class=&quot;content_image lazy&quot; width=&quot;85&quot; data-actualsrc=&quot;https://pic1.zhimg.com/v2-9bdab0d39420ff0ee80f499b407b9510_b.png&quot; data-lazy-status=&quot;ok&quot; style=&quot;display: block; max-width: 100%; margin: 0px auto; background-color: transparent; animation: fxRichTextFadeIn 0.5s ease-in 0s 1 normal none running;&quot;/&gt;&lt;/figure&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;下载速度就是这么可怜的13KB&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;而经过优化后的香港轻量云服务器，下载速度就爽爆了，电信直接拉满30M带宽&lt;/p&gt;&lt;p&gt;&lt;figure data-size=&quot;normal&quot; style=&quot;margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img src=&quot;https://pic2.zhimg.com/80/v2-24ac99c6a4a6a284813905f0bb4883e9_720w.png&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;180&quot; data-rawheight=&quot;178&quot; class=&quot;content_image lazy&quot; width=&quot;180&quot; data-actualsrc=&quot;https://pic2.zhimg.com/v2-24ac99c6a4a6a284813905f0bb4883e9_b.png&quot; data-lazy-status=&quot;ok&quot; style=&quot;display: block; max-width: 100%; margin: 0px auto; background-color: transparent; animation: fxRichTextFadeIn 0.5s ease-in 0s 1 normal none running;&quot;/&gt;&lt;/figure&gt;&lt;/p&gt;&lt;p class=&quot;ztext-empty-paragraph&quot; style=&quot;margin-top: -0.8em; margin-bottom: -0.8em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;下面说下老骥是如何优化的&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;1.首先卸载阿里云安骑士（阿里云的一个安全（jiandie）软件）&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;wget&amp;nbsp;http://update.aegis.aliyun.com/download/uninstall.sh
chmod&amp;nbsp;+x&amp;nbsp;uninstall.sh
./uninstall.sh
wget&amp;nbsp;http://update.aegis.aliyun.com/download/quartz_uninstall.sh
chmod&amp;nbsp;+x&amp;nbsp;quartz_uninstall.sh
./quartz_uninstall.sh&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;color: #121212; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; background-color: #FFFFFF;&quot;&gt;2.删除安骑士残留文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #121212; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;pkill&amp;nbsp;aliyun-service
rm&amp;nbsp;-fr&amp;nbsp;/etc/init.d/agentwatch&amp;nbsp;/usr/sbin/aliyun-service
rm&amp;nbsp;-rf&amp;nbsp;/usr/local/aegis*&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;color: #121212; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; background-color: #FFFFFF;&quot;&gt;3.屏蔽安骑士IP&lt;/span&gt;&lt;span style=&quot;color: #121212; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-s&amp;nbsp;140.205.201.0/28&amp;nbsp;-j&amp;nbsp;DROP
iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-s&amp;nbsp;140.205.201.16/29&amp;nbsp;-j&amp;nbsp;DROP
iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-s&amp;nbsp;140.205.201.32/28&amp;nbsp;-j&amp;nbsp;DROP
iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-s&amp;nbsp;140.205.225.192/29&amp;nbsp;-j&amp;nbsp;DROP
iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-s&amp;nbsp;140.205.225.200/30&amp;nbsp;-j&amp;nbsp;DROP
iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-s&amp;nbsp;140.205.225.184/29&amp;nbsp;-j&amp;nbsp;DROP
iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-s&amp;nbsp;140.205.225.183/32&amp;nbsp;-j&amp;nbsp;DROP
iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-s&amp;nbsp;140.205.225.206/32&amp;nbsp;-j&amp;nbsp;DROP
iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-s&amp;nbsp;140.205.225.205/32&amp;nbsp;-j&amp;nbsp;DROP
iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-s&amp;nbsp;140.205.225.195/32&amp;nbsp;-j&amp;nbsp;DROP
iptables&amp;nbsp;-I&amp;nbsp;INPUT&amp;nbsp;-s&amp;nbsp;140.205.225.204/32&amp;nbsp;-j&amp;nbsp;DROP&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;color: #121212; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; background-color: #FFFFFF;&quot;&gt;4.安装魔改BBR+（BBR是Google推出的一个TCP反堵塞程序，能大幅提升服务器的速度）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #121212; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;wget&amp;nbsp;-N&amp;nbsp;--no-check-certificate&amp;nbsp;&amp;quot;https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh&amp;quot;
chmod&amp;nbsp;+x&amp;nbsp;tcp.sh
./tcp.sh&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;color: #121212; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #121212; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; background-color: #FFFFFF;&quot;&gt;选2，安装重启后再次运行./tcp.sh命令，然后选7，完成BBR+的安装，此时提速明显！&lt;/span&gt;&lt;/p&gt;&lt;figure data-size=&quot;normal&quot; style=&quot;margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img src=&quot;https://pic4.zhimg.com/80/v2-653e9e1cf181541dfaacc324551197bb_720w.jpg&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;420&quot; data-rawheight=&quot;383&quot; class=&quot;content_image lazy&quot; width=&quot;420&quot; data-actualsrc=&quot;https://pic4.zhimg.com/v2-653e9e1cf181541dfaacc324551197bb_b.jpg&quot; data-lazy-status=&quot;ok&quot; style=&quot;display: block; max-width: 100%; margin: 0px auto; background-color: transparent; animation: fxRichTextFadeIn 0.5s ease-in 0s 1 normal none running;&quot;/&gt;&lt;/figure&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;到此为止，整个提速已经完成了，赶紧试试你网站的速度吧，是不是爽歪歪了&lt;/p&gt;&lt;p class=&quot;ztext-empty-paragraph&quot; style=&quot;margin-top: -0.8em; margin-bottom: -0.8em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;font-weight: 600;&quot;&gt;注意：不要用阿里云的香港服务器搭梯子，会封&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;font-weight: 600;&quot;&gt;注意：不要用阿里云的香港服务器搭梯子，会封&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 1.4em; margin-bottom: 1.4em; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Source Han Sans SC&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;font-weight: 600;&quot;&gt;注意：不要用阿里云的香港服务器搭梯子，会封&lt;/span&gt;&lt;/p&gt;</description><pubDate>Wed, 07 Oct 2020 00:06:27 +0800</pubDate></item><item><title>《DHBOY企业站管理》快速上手文档</title><link>https://blog.dhboy.com/?id=66</link><description>&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://demo.dhboy.com/statics/file/DHBOY%E4%BC%81%E4%B8%9A%E7%AB%99%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F%E8%AF%B4%E6%98%8E%E4%B9%A6_20200708.pdf&quot; target=&quot;_blank&quot; title=&quot;文档下载&quot;&gt;&lt;span style=&quot;font-size: 20px; text-decoration: underline;&quot;&gt;&lt;strong&gt;点击此处 下载文档&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 20px;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://blog.dhboy.com/zb_users/upload/2020/07/202007101594352327105507.jpg&quot; title=&quot;IMG_6221(20200708-180434).JPG&quot; alt=&quot;IMG_6221(20200708-180434).JPG&quot;/&gt;&lt;/p&gt;</description><pubDate>Fri, 10 Jul 2020 11:38:05 +0800</pubDate></item><item><title>【限时特惠】公司个性化网站建设限时优惠</title><link>https://blog.dhboy.com/?id=65</link><description>&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif;&quot;&gt;自今日起凡通过宣传单页上门建站客户，均可享受50至100元不等优惠，先到先得，机不可失。&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal; text-align: center;&quot;&gt;&lt;img src=&quot;https://blog.dhboy.com/zb_users/upload/2020/05/202005081588906021121962.jpg&quot; title=&quot;hfkj_xcx.jpg&quot; alt=&quot;hfkj_xcx.jpg&quot; width=&quot;842&quot; height=&quot;664&quot; style=&quot;width: 842px; height: 664px;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal;&quot;&gt;浩飞科技，是由业界精英组成的专业工作室，专注于网站建设服务，多年专注，以一流、优质的服务赢得了广大企业的一致青睐与好评！出众的新技术、独享的服务器，为您量身定制完美的个性官网。收录更快、排名更优，让您的企业脱颖而出。以诚相约，用心承托，浩飞科技时刻为消费者提供最贴心、周到的服务，将您的事业推向高峰，共创更加美好的未来，热忱欢迎广大企业致电联系！&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal;&quot;&gt;联系人：毛经理&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal;&quot;&gt;联系电话：&lt;strong&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;17862806780（微信同号）&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal;&quot;&gt;演示网址：&lt;a href=&quot;http://demo.dhboy.com&quot; target=&quot;_self&quot; title=&quot;浩飞科技演示站&quot;&gt;demo.dhboy.com&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal;&quot;&gt;地址：聊城市东昌府区大东钢管市场&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal; text-align: center;&quot;&gt;&lt;img src=&quot;https://blog.dhboy.com/zb_users/upload/2020/05/202005081588906073137481.jpg&quot; title=&quot;微信一.jpg&quot; alt=&quot;微信一.jpg&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal; text-align: center;&quot;&gt;&lt;img src=&quot;https://blog.dhboy.com/zb_users/upload/2020/05/202005081588907545846814.png&quot; title=&quot;CgEeDV60zVKAaLryABHzw7RaQVo472.png&quot; alt=&quot;CgEeDV60zVKAaLryABHzw7RaQVo472.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal; text-align: center;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Fri, 08 May 2020 10:44:35 +0800</pubDate></item><item><title>【限时免费】钢材现货查询系统限免费使用！</title><link>https://blog.dhboy.com/?id=64</link><description>&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal;&quot;&gt;20年2月19号，吨位换算微信小程序中的现货查询模块全面升级，新升级的现货查询系统中提升了搜索效率，并对五十万条真实数据进行了逐一删选，从而保证数据的真实有效，使用户手机查询现货更便捷。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif;&quot;&gt;电脑端：&lt;/span&gt;&lt;a href=&quot;https://xcx.dhboy.com/&quot; target=&quot;_blank&quot;&gt;xcx.dhboy.com&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal; text-align: center;&quot;&gt;&lt;img src=&quot;https://xcx.dhboy.com/upload/config_1582962868101.png&quot; alt=&quot;微信图片_20200229155129.png&quot; style=&quot;margin: 0px; padding: 0px; display: inline-block; border: none; vertical-align: middle;&quot;/&gt;&lt;br style=&quot;margin: 0px; padding: 0px;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal;&quot;&gt;手机端：扫描下方二维码，关注即可&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal; text-align: center;&quot;&gt;&lt;img src=&quot;https://blog.dhboy.com/zb_users/upload/2020/02/202002191582094321146848.png&quot; title=&quot;扫码_搜索联合传播样式-标准色版.png&quot; alt=&quot;扫码_搜索联合传播样式-标准色版.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal;&quot;&gt;【诚邀商业合作】建站创优服务，真诚快捷安全。浩飞科技，是由业界精英组成的金牌企业，专注于网站建设服务，多年专注，以一流的优质的服务赢得了广大企业的一致青睐与好评！出众的新技术、独享的服务器，为您量身定制完美的个性官网。收录更快、排名更优，让您的企业脱颖而出。以诚相约，用心承托，浩飞科技时刻为消费者提供最贴心、周到的服务，将您的事业推向高峰，共创更加美好的未来，热忱欢迎广大企业前来联系！&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal;&quot;&gt;联系人：毛经理&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal;&quot;&gt;联系电话：17862806780（微信同号）&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, Tahoma, Arial, sans-serif; white-space: normal; text-align: center;&quot;&gt;&lt;img src=&quot;https://blog.dhboy.com/zb_users/upload/2020/02/202002191582094511150552.jpg&quot; title=&quot;hfkj_xcx.jpg&quot; alt=&quot;hfkj_xcx.jpg&quot; width=&quot;749&quot; height=&quot;577&quot; style=&quot;width: 749px; height: 577px;&quot;/&gt;&lt;/p&gt;</description><pubDate>Wed, 19 Feb 2020 14:35:22 +0800</pubDate></item><item><title>宝塔mysql总是自动停止解决总汇</title><link>https://blog.dhboy.com/?id=63</link><description>&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; font-size: 16px; line-height: 24px; color: rgb(51, 51, 51); text-align: justify; font-family: arial; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span class=&quot;bjh-p&quot;&gt;最近小编使用宝塔经常遇到mysql自动停止，好多读者发消息给小编说网站打不开，小编于是查看了一下服务器mysql的日志，发现mysql出错时报【InnoDB: Fatal error: cannot allocate memory for the buffer pool】&lt;span class=&quot;bjh-br&quot;&gt;&lt;/span&gt;Innodb 存储引擎的缓存机制和 MyISAM 的最大区别就在于 Innodb 不仅仅缓存索引，同时还会缓存实际的数据。所以，完全相同的数据库，使用 Innodb 存储引擎可以使用更多的内存来缓存数据库相关的信息，当然前提是要有足够的物理内存。innodb_buffer_pool_size 参数用来设置 Innodb 最主要的 Buffer(Innodb_Buffer_Pool)的大小，也 就是缓存用户表及索引数据的最主要缓存空间，对 Innodb 整体性能影响也最大。这个参数设置成内存的50%-80%，当然具体要结合实际情况而定，考虑别的存储引擎占用的内存，考虑服务器是不是还提供其他服务等等…看来，我的机器之所以宕掉的原因是，系统默认的内存:&lt;span class=&quot;bjh-br&quot;&gt;&lt;/span&gt;default innodb_buffer_pool_size&lt;span class=&quot;bjh-br&quot;&gt;&lt;/span&gt;innodb_buffer_pool_size=50M&lt;span class=&quot;bjh-br&quot;&gt;&lt;/span&gt;出现数据库经常停止可以参照下面解决方案：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 22px; margin-bottom: 0px; padding: 0px; font-size: 16px; line-height: 24px; color: rgb(51, 51, 51); text-align: justify; font-family: arial; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;解决方法一：&lt;/p&gt;&lt;p style=&quot;margin-top: 22px; margin-bottom: 0px; padding: 0px; font-size: 16px; line-height: 24px; color: rgb(51, 51, 51); text-align: justify; font-family: arial; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span class=&quot;bjh-p&quot;&gt;安装宝塔面板【linux工具箱】&lt;span class=&quot;bjh-br&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 22px; margin-bottom: 0px; padding: 0px; font-size: 16px; line-height: 24px; color: rgb(51, 51, 51); text-align: justify; font-family: arial; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span class=&quot;bjh-p&quot;&gt;&lt;img src=&quot;https://blog.dhboy.com/zb_users/upload/2020/02/202002111581416927184303.jpeg&quot; title=&quot;dc54564e9258d1099c16b64c9dbbccba6e814dba.jpeg&quot; style=&quot;white-space: normal;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 22px; margin-bottom: 0px; padding: 0px; font-size: 16px; line-height: 24px; color: rgb(51, 51, 51); text-align: justify; font-family: arial; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span class=&quot;bjh-p&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://blog.dhboy.com/zb_users/upload/2020/02/202002111581416927412158.jpeg&quot; style=&quot;&quot; title=&quot;78310a55b319ebc469138c9dcdc5cff91f1716b7.jpeg&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #333333; font-size: 16px; text-align: justify; background-color: #FFFFFF; font-family: arial;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #333333; font-size: 16px; text-align: justify; background-color: #FFFFFF; font-family: arial;&quot;&gt;添加设置SWAP大小，根据你的实际内存进行调整，swap是Linux下的虚拟内存，设置适当的swap可增加服务器稳定性，建议swap容量在真实内存容量的1.5倍左右，若您的服务器内存大于4GB，可设1-2GB的固定值，swap文件默认保存在/www/swap，设置前请确保磁盘空间够用。&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 22px; margin-bottom: 0px; padding: 0px; font-size: 16px; line-height: 24px; color: rgb(51, 51, 51); text-align: justify; font-family: arial; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;解决方法二：&lt;/p&gt;&lt;p style=&quot;margin-top: 22px; margin-bottom: 0px; padding: 0px; font-size: 16px; line-height: 24px; color: rgb(51, 51, 51); text-align: justify; font-family: arial; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span class=&quot;bjh-p&quot;&gt;根据你的实际内存进行mysql优化&lt;span class=&quot;bjh-br&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;img-container&quot; style=&quot;margin-top: 30px; font-family: arial; font-size: 12px; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img src=&quot;https://blog.dhboy.com/zb_users/upload/2020/02/202002111581416985361223.jpeg&quot; title=&quot;e61190ef76c6a7ef09b9ea44b319af54f2de6619.jpeg&quot; alt=&quot;e61190ef76c6a7ef09b9ea44b319af54f2de6619.jpeg&quot;/&gt;&lt;/div&gt;&lt;p style=&quot;margin-top: 26px; margin-bottom: 0px; padding: 0px; font-size: 16px; line-height: 24px; color: rgb(51, 51, 51); text-align: justify; font-family: arial; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;解决方法三：&lt;/p&gt;&lt;p style=&quot;margin-top: 22px; margin-bottom: 0px; padding: 0px; font-size: 16px; line-height: 24px; color: rgb(51, 51, 51); text-align: justify; font-family: arial; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span class=&quot;bjh-p&quot;&gt;登陆宝塔后台-计划任务-添加Mysql守护，执行周期，可选择多长时间执行一次，比如10分钟监控执行一次，具体的周期请站长根据自己服务器实际情况来设置。&lt;span class=&quot;bjh-br&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 30px; font-family: arial; font-size: 12px; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img src=&quot;https://blog.dhboy.com/zb_users/upload/2020/02/202002111581417002720727.jpeg&quot; title=&quot;8b13632762d0f703965d7928451951382497c5bb.jpeg&quot; alt=&quot;8b13632762d0f703965d7928451951382497c5bb.jpeg&quot;/&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;pgrep&amp;nbsp;-x&amp;nbsp;mysqld&amp;nbsp;&amp;amp;&amp;gt;&amp;nbsp;/dev/null
if&amp;nbsp;[&amp;nbsp;$?&amp;nbsp;-ne&amp;nbsp;0&amp;nbsp;];then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bash&amp;nbsp;/www/server/panel/script/rememory.sh&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/etc/init.d/mysqld&amp;nbsp;start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
fi&lt;/pre&gt;&lt;p style=&quot;margin-top: 22px; margin-bottom: 0px; padding: 0px; font-size: 16px; line-height: 24px; color: rgb(51, 51, 51); text-align: justify; font-family: arial; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;解决方法四：&lt;/p&gt;&lt;p style=&quot;margin-top: 22px; margin-bottom: 0px; padding: 0px; font-size: 16px; line-height: 24px; color: rgb(51, 51, 51); text-align: justify; font-family: arial; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span class=&quot;bjh-p&quot;&gt;这个方法简单粗暴，适合土豪站长，直接增加服务器内存或使用云数据库，把数据库分离出去。&lt;span class=&quot;bjh-br&quot;&gt;&lt;/span&gt;如果你遇到mysql问题或有更好的解决方法欢迎投稿给小编，我们和你一起探讨学习。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 11 Feb 2020 18:26:27 +0800</pubDate></item><item><title>系统安全性之十大措施</title><link>https://blog.dhboy.com/?id=62</link><description>&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; padding: 0px; margin: 8px 0px 16px; font-size: 22px; font-family: &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;SF Pro Display&amp;quot;, Roboto, Noto, Arial, &amp;quot;PingFang SC&amp;quot;, sans-serif; color: rgb(79, 79, 79); line-height: 30px; overflow-wrap: break-word; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word;&quot;&gt;一、MD5 加密用户密码&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 用户密码采用MD5加密，这是一种安全性非常高的加密算法，是普遍使用广泛应用于文件验证，银行密码加密等领域，由于这种加密的不可逆性，在使用10位以上字母加数字组成的随机密码时，几乎没有破解的可能性。&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; padding: 0px; margin: 8px 0px 16px; font-size: 22px; font-family: &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;SF Pro Display&amp;quot;, Roboto, Noto, Arial, &amp;quot;PingFang SC&amp;quot;, sans-serif; color: rgb(79, 79, 79); line-height: 30px; overflow-wrap: break-word; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t2&quot; style=&quot;box-sizing: border-box; outline: 0px; color: rgb(78, 161, 219); cursor: pointer; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word;&quot;&gt;二、COOKIES加密&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 系统保存COOKIES时，对保存于COOKIES(6228481328615898677)中的数据采用了以MD5加密为基础，加入随机加密因子的改进型专用加密算法。若使用的不是标准MD5加密，则系统COOKIES中保存的数据不可能被解密。因此，黑客试图用伪造COOKIES攻击系统变得完全不可能，系统用户资料变得非常安全。&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; padding: 0px; margin: 8px 0px 16px; font-size: 22px; font-family: &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;SF Pro Display&amp;quot;, Roboto, Noto, Arial, &amp;quot;PingFang SC&amp;quot;, sans-serif; color: rgb(79, 79, 79); line-height: 30px; overflow-wrap: break-word; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t3&quot; style=&quot;box-sizing: border-box; outline: 0px; color: rgb(78, 161, 219); cursor: pointer; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word;&quot;&gt;三、SQL注入防护&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 系统在防SQL注入方面，设置四道安全防护：&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word; color: rgb(51, 51, 51); font-family: verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 第一、&amp;nbsp;系统级SQL防注入检测。系统会遍历检测所有用GET、POST、COOKIES提交到服务器上的数据，如发现有可能用于构造可注入SQL的异常代码，系统将终止程序运行，并记录日志。这一道安全防护加在连接数据库之前，能在连接数据库前挡处几乎所有的SQL注入和危害网站安全的数据提交。&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; outline: 0px; padding: 0px; margin-top: 0px; margin-bottom: 16px; font-family: &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;SF Pro Display&amp;quot;, Roboto, Noto, Arial, &amp;quot;PingFang SC&amp;quot;, sans-serif; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 第二、&amp;nbsp;程序级安全仿SQL注入系统。在应用程序中，在构建SQL查询语句前，系统将对由外部获取数据，并带入组装为SQL的变量进行安全性合法性验证，过滤可能构成注入的字符。&lt;br style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word;&quot;/&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 第三、&amp;nbsp;禁止外部提交表单。系统禁止从本域名之外的其它域名提交表单，防止从外部跳转传输攻击性代码。&lt;br style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word;&quot;/&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 第四、数据库操作使用存储过程。系统所有的重要数据操作，均使用存储过程作参数查询，避免组装SQL字符串，令即使通过了层层SQL注入过滤的攻击性字符仍然无法发挥作用。&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; padding: 0px; margin: 8px 0px 16px; font-size: 22px; font-family: &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;SF Pro Display&amp;quot;, Roboto, Noto, Arial, &amp;quot;PingFang SC&amp;quot;, sans-serif; color: rgb(79, 79, 79); line-height: 30px; overflow-wrap: break-word; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t4&quot; style=&quot;box-sizing: border-box; outline: 0px; color: rgb(78, 161, 219); cursor: pointer; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word;&quot;&gt;四、木马和病毒防护&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 针对可能的木马和病毒问题，系统认为，在服务器设置安全的情况下，外部带来的安全问题，主要是用户可能上传病毒和木马，系统作了如下四层的防护&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word; color: rgb(51, 51, 51); font-family: verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;　　 第一、&amp;nbsp;客户端文件检测。在上传之前，对准备上传的文件进行检测，如果发现不是服务器设置的允许上传的文件类型，系统拒绝进行上传。如果客户端屏蔽了检测语句，则上传程序同时被屏蔽，系统无法上传任何文件。&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word; color: rgb(51, 51, 51); font-family: verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;　　 第二、&amp;nbsp;服务器端文件安全性检测。对上传到服务器的文件，程序在将文件写入磁盘前，检测文件的类型，如发现是可能构成服务器安全问题的文件类型，即所有可以在服务器上执行的程序，系统都拒绝写入磁盘。以此保证不被上传可能在服务器上传播的病毒和木马程序。&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word; color: rgb(51, 51, 51); font-family: verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;　　 第三、对有权限的服务器。系统采用即上传即压缩策略，所有上传的除图片文件、视频文件外，其它各种类型的文件一但上传，立即压缩为RAR，因此，即使包含木马也无法运行。不能对网站安全带来威胁。&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word; color: rgb(51, 51, 51); font-family: verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;　　 第四、底层的文件类型检测。系统对文件类型作了底层级检测，由于不仅检测扩展名，而是对文件的实际类型进行检测，所以无法通过改扩展名方式逃过安全性验证。&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; padding: 0px; margin: 8px 0px 16px; font-size: 22px; font-family: &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;SF Pro Display&amp;quot;, Roboto, Noto, Arial, &amp;quot;PingFang SC&amp;quot;, sans-serif; color: rgb(79, 79, 79); line-height: 30px; overflow-wrap: break-word; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t5&quot; style=&quot;box-sizing: border-box; outline: 0px; color: rgb(78, 161, 219); cursor: pointer; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word;&quot;&gt;五、权限控制系统&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 系统设置了严格有效的权限控制系统，何人可以发信息，何人能删除信息等权限设置系统一共有数十项详细设置，并且网站不同栏目可以设置完全不同的权限，所有权限均在多个层次上严格控制权限。&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; padding: 0px; margin: 8px 0px 16px; font-size: 22px; font-family: &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;SF Pro Display&amp;quot;, Roboto, Noto, Arial, &amp;quot;PingFang SC&amp;quot;, sans-serif; color: rgb(79, 79, 79); line-height: 30px; overflow-wrap: break-word; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t6&quot; style=&quot;box-sizing: border-box; outline: 0px; color: rgb(78, 161, 219); cursor: pointer; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word;&quot;&gt;六、IP记录&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; IP地址库。除记录所有重要操作的IP外，还记录了IP所在地区，系统中内置约了17万条IP特征记录。&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word; color: rgb(51, 51, 51); font-family: verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;/&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 详细的IP记录。所有的创建记录、编辑记录行为（如发文章，发评论，发站内信等），均记录此操作发生的IP，IP所在地区，操作时间，以便日后备查。在发现安全问题时，这些数据会非常关键和必要。&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; padding: 0px; margin: 8px 0px 16px; font-size: 22px; font-family: &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;SF Pro Display&amp;quot;, Roboto, Noto, Arial, &amp;quot;PingFang SC&amp;quot;, sans-serif; color: rgb(79, 79, 79); line-height: 30px; overflow-wrap: break-word; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t7&quot; style=&quot;box-sizing: border-box; outline: 0px; color: rgb(78, 161, 219); cursor: pointer; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word;&quot;&gt;七、隐藏的程序入口&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 系统可以全站生成HTML静态文件，使网站的执行程序不暴露在WEB服务中，HTML页不和服务器端程序交互，黑客很难对HTML页进行攻击，很难找到攻击目标。&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; padding: 0px; margin: 8px 0px 16px; font-size: 22px; font-family: &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;SF Pro Display&amp;quot;, Roboto, Noto, Arial, &amp;quot;PingFang SC&amp;quot;, sans-serif; color: rgb(79, 79, 79); line-height: 30px; overflow-wrap: break-word; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t8&quot; style=&quot;box-sizing: border-box; outline: 0px; color: rgb(78, 161, 219); cursor: pointer; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word;&quot;&gt;八、有限的写文件&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 系统所有的写文件操作只发生于一个UPFILE目录，而此目录下的文件均为只需读写即可，可通过WINDOWS安全性设置， 设置此目录下的文件只读写，不执行，而程序所在的其它文件夹只要执行和读权限，从而使破坏性文件无法破坏所有程序执行文件，保证这些文件不被修改。&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; padding: 0px; margin: 8px 0px 16px; font-size: 22px; font-family: &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;SF Pro Display&amp;quot;, Roboto, Noto, Arial, &amp;quot;PingFang SC&amp;quot;, sans-serif; color: rgb(79, 79, 79); line-height: 30px; overflow-wrap: break-word; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t9&quot; style=&quot;box-sizing: border-box; outline: 0px; color: rgb(78, 161, 219); cursor: pointer; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word;&quot;&gt;九、作了MD5校验的订单数据&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 在用户输入的信息处理中，对提交的信息作MD5校验，从而保证数据不被非法修改。&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; padding: 0px; margin: 8px 0px 16px; font-size: 22px; font-family: &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;SF Pro Display&amp;quot;, Roboto, Noto, Arial, &amp;quot;PingFang SC&amp;quot;, sans-serif; color: rgb(79, 79, 79); line-height: 30px; overflow-wrap: break-word; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t10&quot; style=&quot;box-sizing: border-box; outline: 0px; color: rgb(78, 161, 219); cursor: pointer; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; overflow-wrap: break-word;&quot;&gt;十、编译执行的代码&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 基于.net 开发，代码编译执行，更快，更安全。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#333333;font-family:verdana, Arial, Helvetica, sans-serif&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 密钥一：&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;6228481328615898677（&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;nonghang）&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#333333;font-family:verdana, Arial, Helvetica, sans-serif&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 密钥二：6230780100036452648-2648042&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#333333;font-family:verdana, Arial, Helvetica, sans-serif&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 密钥三：6230780100036452648（&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;hengfeng&lt;/span&gt;）&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#333333;font-family:verdana, Arial, Helvetica, sans-serif&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 密钥四：6230780100036452648-5888755&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#333333;font-family:verdana, Arial, Helvetica, sans-serif&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 密钥五：6215824710006932921（youzheng）&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:#333333;font-family:verdana, Arial, Helvetica, sans-serif&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 密钥六：6223203218404315&lt;span style=&quot;color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;（nongshang）&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Sat, 22 Dec 2018 14:02:19 +0800</pubDate></item><item><title>单用户登录</title><link>https://blog.dhboy.com/?id=61</link><description>&lt;p&gt;目的:一个账号只能在一个地方登录,不能同时登录&lt;/p&gt;&lt;p&gt;有两种处理逻辑:&lt;/p&gt;&lt;p&gt;1. A登录后,B不能使用同样的账户进行登录&lt;/p&gt;&lt;p&gt;后台逻辑定义:&lt;/p&gt;&lt;p&gt;用户数据表多添加一个字段,默认为false,每次用户发起登录,检测是否为false,是则可以登录,并设置为true,如果为true,则提示用户已登录,请换个账号&lt;/p&gt;&lt;p&gt;2. A登录后,B可以登录,B登录成功的同时,A会自动被踢&lt;/p&gt;&lt;p&gt;后台逻辑定义:&lt;/p&gt;&lt;p&gt;用户登录成功后,利用登录时间生成一个Session.保存在用户本地的cookie和我们的服务器上.&lt;/p&gt;&lt;p&gt;添加一个中间件,添加到响应的路由前面,每次操作我们的控制器,都必须经过中间件进行过滤,每次都需要将session提交与服务器的进行比对,如果不一致则踢出下线。&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://img-blog.csdn.net/20170713102513301?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGlhbmx1a2UxMjM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center&quot; width=&quot;886&quot; height=&quot;440&quot; style=&quot;width: 886px; height: 440px;&quot;/&gt;&lt;/p&gt;</description><pubDate>Sat, 22 Dec 2018 12:29:12 +0800</pubDate></item><item><title>Spring定时任务的几种实现</title><link>https://blog.dhboy.com/?id=60</link><description>&lt;p style=&quot;text-align: left;&quot;&gt;近日项目开发中需要执行一些定时任务，比如需要在每天凌晨时候，分析一次前一天的日志信息，借此机会整理了一下定时任务的几种实现方式，由于项目采用spring框架，所以我都将结合spring框架来介绍。&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;一．分类&lt;/h2&gt;&lt;ul style=&quot;margin-bottom: 1.5em; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;h3&gt;从实现的技术上来分类，目前主要有三种技术（或者说有三种产品）：&lt;br/&gt;&lt;/h3&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1、Java自带的java.util.Timer类，这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行，但不能在指定时间运行。一般用的较少，这篇文章将不做详细介绍。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2、使用Quartz，这是一个功能比较强大的的调度器，可以让你的程序在指定时间执行，也可以按照某一个频度执行，配置起来稍显复杂，稍后会详细介绍。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3、Spring3.0以后自带的task，可以将它看成一个轻量级的Quartz，而且使用起来比Quartz简单许多，稍后会介绍。&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 1.5em; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;h3&gt;从作业类的继承方式来讲，可以分为两类：&lt;/h3&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1、作业类需要继承自特定的作业类基类，如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean；java.util.Timer中需要继承自java.util.TimerTask。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2、作业类即普通的java类，不需要继承自任何基类。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;注:个人推荐使用第二种方式，因为这样所以的类都是普通类，不需要事先区别对待。&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;strong style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;background-color: #FFFFFF; font-family: Helvetica, Tahoma, Arial, sans-serif;&quot;&gt;从任务调度的触发时机来分，这里主要是针对作业使用的触发器，主要有以下两种：&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每隔指定时间则触发一次，在Quartz中对应的触发器为：org.springframework.scheduling.quartz.SimpleTriggerBean&lt;/p&gt;&lt;p&gt;每到指定时间则触发一次，在Quartz中对应的调度器为：org.springframework.scheduling.quartz.CronTriggerBean&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 注：并非每种任务都可以使用这两种触发器，如java.util.TimerTask任务就只能使用第一种。Quartz和spring task都可以支持这两种触发条件。&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;二．用法说明&lt;/h2&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;详细介绍每种任务调度工具的使用方式，包括Quartz和spring task两种。&lt;/p&gt;&lt;h3&gt;Quartz&lt;/h3&gt;&lt;h3&gt;第一种，作业类继承自特定的基类：org.springframework.scheduling.quartz.QuartzJobBean。&lt;/h3&gt;&lt;h4&gt;第一步：定义作业类&lt;/h4&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;import&amp;nbsp;org.quartz.JobExecutionContext;&amp;nbsp;&amp;nbsp;
import&amp;nbsp;org.quartz.JobExecutionException;&amp;nbsp;&amp;nbsp;
import&amp;nbsp;org.springframework.scheduling.quartz.QuartzJobBean;&amp;nbsp;&amp;nbsp;
public&amp;nbsp;class&amp;nbsp;Job1&amp;nbsp;extends&amp;nbsp;QuartzJobBean&amp;nbsp;{&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;
private&amp;nbsp;int&amp;nbsp;timeout;&amp;nbsp;&amp;nbsp;
private&amp;nbsp;static&amp;nbsp;int&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;
//调度工厂实例化后，经过timeout时间开始执行调度&amp;nbsp;&amp;nbsp;
public&amp;nbsp;void&amp;nbsp;setTimeout(int&amp;nbsp;timeout)&amp;nbsp;{&amp;nbsp;&amp;nbsp;
this.timeout&amp;nbsp;=&amp;nbsp;timeout;&amp;nbsp;&amp;nbsp;
}&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;
/**&amp;nbsp;
*&amp;nbsp;要调度的具体任务&amp;nbsp;
*/&amp;nbsp;&amp;nbsp;
@Override&amp;nbsp;&amp;nbsp;
protected&amp;nbsp;void&amp;nbsp;executeInternal(JobExecutionContext&amp;nbsp;context)&amp;nbsp;&amp;nbsp;
throws&amp;nbsp;JobExecutionException&amp;nbsp;{&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;System.out.println(&amp;quot;定时任务执行中…&amp;quot;);&amp;nbsp;&amp;nbsp;
}&amp;nbsp;&amp;nbsp;
}&lt;/pre&gt;&lt;h4&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: rgb(255, 255, 255);&quot;&gt;第二步：spring配置文件中配置作业类JobDetailBean&lt;/strong&gt;&lt;/h4&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;&amp;lt;bean&amp;nbsp;name=&amp;quot;job1&amp;quot;&amp;nbsp;class=&amp;quot;org.springframework.scheduling.quartz.JobDetailBean&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;jobClass&amp;quot;&amp;nbsp;value=&amp;quot;com.gy.Job1&amp;quot;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;jobDataAsMap&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;map&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;entry&amp;nbsp;key=&amp;quot;timeout&amp;quot;&amp;nbsp;value=&amp;quot;0&amp;quot;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/map&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/property&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;说明：org.springframework.scheduling.quartz.JobDetailBean有两个属性，jobClass属性即我们在java代码中定义的任务类，jobDataAsMap属性即该任务类中需要注入的属性值。&lt;/p&gt;&lt;h4&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;第三步：配置作业调度的触发方式（触发器）&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;/strong&gt;Quartz的作业触发器有两种，分别是&lt;/p&gt;&lt;p&gt;org.springframework.scheduling.quartz.SimpleTriggerBean&lt;br/&gt;&lt;/p&gt;&lt;p&gt;org.springframework.scheduling.quartz.CronTriggerBean&lt;br/&gt;&lt;/p&gt;&lt;p&gt;第一种SimpleTriggerBean，只支持按照一定频度调用任务，如每隔30分钟运行一次。&lt;br/&gt;&lt;/p&gt;&lt;p&gt;配置方式如下：&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;&amp;lt;bean&amp;nbsp;id=&amp;quot;cronTrigger&amp;quot;&amp;nbsp;class=&amp;quot;org.springframework.scheduling.quartz.CronTriggerBean&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;jobDetail&amp;quot;&amp;nbsp;ref=&amp;quot;job1&amp;quot;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;!—每天12:00运行一次&amp;nbsp;--&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;cronExpression&amp;quot;&amp;nbsp;value=&amp;quot;0&amp;nbsp;0&amp;nbsp;12&amp;nbsp;*&amp;nbsp;*&amp;nbsp;?&amp;quot;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&amp;nbsp;关于cronExpression表达式的语法参见附录。&lt;br/&gt;&lt;/p&gt;&lt;h4&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;第四步：配置调度工厂&amp;nbsp;&lt;/strong&gt;&lt;/h4&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;&amp;lt;bean&amp;nbsp;class=&amp;quot;org.springframework.scheduling.quartz.SchedulerFactoryBean&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;triggers&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;list&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;ref&amp;nbsp;bean=&amp;quot;cronTrigger&amp;quot;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/list&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/property&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;说明：该参数指定的就是之前配置的触发器的名字。&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;第五步：启动你的应用即可，即将工程部署至tomcat或其他容器。&lt;/strong&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;font-size: 1.2em; line-height: 1.5em; margin: 0px 0px 0.5em; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;第二种，作业类不继承特定基类。&lt;/h3&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Spring能够支持这种方式，归功于两个类：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;这两个类分别对应spring支持的两种实现任务调度的方式，即前文提到到java自带的timer task方式和Quartz方式。这里我只写MethodInvokingJobDetailFactoryBean的用法，使用该类的好处是,我们的任务类不再需要继承自任何类，而是普通的pojo。&lt;/p&gt;&lt;h4&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;第一步：编写任务类&lt;/strong&gt;&lt;/h4&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;public&amp;nbsp;class&amp;nbsp;Job2&amp;nbsp;{&amp;nbsp;&amp;nbsp;
public&amp;nbsp;void&amp;nbsp;doJob2()&amp;nbsp;{&amp;nbsp;&amp;nbsp;
System.out.println(&amp;quot;不继承QuartzJobBean方式-调度进行中...&amp;quot;);&amp;nbsp;&amp;nbsp;
}&amp;nbsp;&amp;nbsp;
}&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;可以看出，这就是一个普通的类，并且有一个方法。&lt;/p&gt;&lt;h4&gt;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;第二步：配置作业类&lt;/strong&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;&amp;lt;bean&amp;nbsp;id=&amp;quot;job2&amp;quot;&amp;nbsp;&amp;nbsp;
class=&amp;quot;org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;targetObject&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;bean&amp;nbsp;class=&amp;quot;com.gy.Job2&amp;quot;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/property&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;targetMethod&amp;quot;&amp;nbsp;value=&amp;quot;doJob2&amp;quot;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;concurrent&amp;quot;&amp;nbsp;value=&amp;quot;false&amp;quot;&amp;nbsp;/&amp;gt;&amp;lt;!--&amp;nbsp;作业不并发调度&amp;nbsp;--&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;说&lt;/span&gt;明：这一步是关键步骤，声明一个MethodInvokingJobDetailFactoryBean，有两个关键属性：targetObject指定任务类，targetMethod指定运行的方法。往下的步骤就与方法一相同了，为了完整，同样贴出。&lt;/p&gt;&lt;h4&gt;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;第三步：配置作业调度的触发方式（触发器）&lt;/strong&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Quartz的作业触发器有两种，分别是&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.springframework.scheduling.quartz.SimpleTriggerBean&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.springframework.scheduling.quartz.CronTriggerBean&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;第一种SimpleTriggerBean，只支持按照一定频度调用任务，如每隔30分钟运行一次。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;配置方式如下：&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;&amp;lt;bean&amp;nbsp;id=&amp;quot;simpleTrigger&amp;quot;&amp;nbsp;class=&amp;quot;org.springframework.scheduling.quartz.SimpleTriggerBean&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;jobDetail&amp;quot;&amp;nbsp;ref=&amp;quot;job2&amp;quot;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;startDelay&amp;quot;&amp;nbsp;value=&amp;quot;0&amp;quot;&amp;nbsp;/&amp;gt;&amp;lt;!--&amp;nbsp;调度工厂实例化后，经过0秒开始执行调度&amp;nbsp;--&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;repeatInterval&amp;quot;&amp;nbsp;value=&amp;quot;2000&amp;quot;&amp;nbsp;/&amp;gt;&amp;lt;!--&amp;nbsp;每2秒调度一次&amp;nbsp;--&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;第二种CronTriggerBean，支持到指定时间运行一次，如每天12:00运行一次等。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;配置方式如下：&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;&amp;lt;bean&amp;nbsp;id=&amp;quot;cronTrigger&amp;quot;&amp;nbsp;class=&amp;quot;org.springframework.scheduling.quartz.CronTriggerBean&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;jobDetail&amp;quot;&amp;nbsp;ref=&amp;quot;job2&amp;quot;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;!—每天12:00运行一次&amp;nbsp;--&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;cronExpression&amp;quot;&amp;nbsp;value=&amp;quot;0&amp;nbsp;0&amp;nbsp;12&amp;nbsp;*&amp;nbsp;*&amp;nbsp;?&amp;quot;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;以上两种调度方式根据实际情况，任选一种即可。&lt;/p&gt;&lt;h4 style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong&gt;第四步：配置调度工厂&amp;nbsp;&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;&amp;lt;bean&amp;nbsp;class=&amp;quot;org.springframework.scheduling.quartz.SchedulerFactoryBean&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;property&amp;nbsp;name=&amp;quot;triggers&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;list&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;ref&amp;nbsp;bean=&amp;quot;cronTrigger&amp;quot;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/list&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/property&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;说明：该参数指定的就是之前配置的触发器的名字。&lt;/p&gt;&lt;h4 style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong&gt;第五步：启动你的应用即可，即将工程部署至tomcat或其他容器。&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;到此，spring中Quartz的基本配置就介绍完了，当然了，使用之前，要导入相应的spring的包与Quartz的包，这些就不消多说了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;其实可以看出Quartz的配置看上去还是挺复杂的，没有办法，因为Quartz其实是个重量级的工具，如果我们只是想简单的执行几个简单的定时任务，有没有更简单的工具，有！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;请看我第下文Spring task的介绍。&lt;br/&gt;&lt;/p&gt;&lt;h3 style=&quot;line-height: 1.5em; margin: 0px 0px 0.5em; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;Spring-Task&lt;/h3&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;上节介绍了在Spring 中使用Quartz，本文介绍Spring3.0以后自主开发的定时任务工具，spring task，可以将它比作一个轻量级的Quartz，而且使用起来很简单，除spring相关的包外不需要额外的包，而且支持注解和配置文件两种形式，下面将分别介绍这两种方式。&lt;/p&gt;&lt;h3 style=&quot;font-size: 1.2em; line-height: 1.5em; margin: 0px 0px 0.5em; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;第一种：配置文件方式&lt;/h3&gt;&lt;h4 style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong&gt;第一步：编写作业类&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;即普通的pojo，如下：&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;import&amp;nbsp;org.springframework.stereotype.Service;&amp;nbsp;&amp;nbsp;
@Service&amp;nbsp;&amp;nbsp;
public&amp;nbsp;class&amp;nbsp;TaskJob&amp;nbsp;{&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;job1()&amp;nbsp;{&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(“任务进行中。。。”);&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;
}&lt;/pre&gt;&lt;h4&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;第二步：在spring配置文件头中添加命名空间及描述&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;&amp;lt;beans&amp;nbsp;xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:task=&amp;quot;http://www.springframework.org/schema/task&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;。。。。。。&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xsi:schemaLocation=&amp;quot;http://www.springframework.org/schema/task&amp;nbsp;http://www.springframework.org/schema/task/spring-task-3.0.xsd&amp;quot;&amp;gt;&lt;/pre&gt;&lt;h4&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;&lt;/strong&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;第三步：spring配置文件中设置具体的任务&lt;/strong&gt;&lt;/h4&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;&amp;lt;task:scheduled-tasks&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;task:scheduled&amp;nbsp;ref=&amp;quot;taskJob&amp;quot;&amp;nbsp;method=&amp;quot;job1&amp;quot;&amp;nbsp;cron=&amp;quot;0&amp;nbsp;*&amp;nbsp;*&amp;nbsp;*&amp;nbsp;*&amp;nbsp;?&amp;quot;/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/task:scheduled-tasks&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;
&amp;lt;context:component-scan&amp;nbsp;base-package=&amp;quot;&amp;nbsp;com.gy.mytask&amp;nbsp;&amp;quot;&amp;nbsp;/&amp;gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;说明：ref参数指定的即任务类，method指定的即需要运行的方法，cron及cronExpression表达式，具体写法这里不介绍了，详情见上篇文章附录。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;context:component-scan base-package=&amp;quot;com.gy.mytask&amp;quot; /&amp;gt;这个配置不消多说了，spring扫描注解用的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;到这里配置就完成了，是不是很简单。&lt;/p&gt;&lt;h3 style=&quot;font-size: 1.2em; line-height: 1.5em; margin: 0px 0px 0.5em; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;第二种：使用注解形式&lt;/h3&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;也许我们不想每写一个任务类还要在xml文件中配置下，我们可以使用注解@Scheduled，我们看看源文件中该注解的定义：&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;@Target({java.lang.annotation.ElementType.METHOD,&amp;nbsp;java.lang.annotation.ElementType.ANNOTATION_TYPE})&amp;nbsp;&amp;nbsp;
@Retention(RetentionPolicy.RUNTIME)&amp;nbsp;&amp;nbsp;
@Documented&amp;nbsp;&amp;nbsp;
public&amp;nbsp;@interface&amp;nbsp;Scheduled&amp;nbsp;&amp;nbsp;
{&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;public&amp;nbsp;abstract&amp;nbsp;String&amp;nbsp;cron();&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;public&amp;nbsp;abstract&amp;nbsp;long&amp;nbsp;fixedDelay();&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;public&amp;nbsp;abstract&amp;nbsp;long&amp;nbsp;fixedRate();&amp;nbsp;&amp;nbsp;
}&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;可以看出该注解有三个方法或者叫参数，分别表示的意思是：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cron：指定cron表达式&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fixedDelay：官方文档解释：An interval-based trigger where the interval is measured from the completion time of the previous task. The time unit value is measured in milliseconds.即表示从上一个任务完成开始到下一个任务开始的间隔，单位是毫秒。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fixedRate：官方文档解释：An interval-based trigger where the interval is measured from the start time of the previous task. The time unit value is measured in milliseconds.即从上一个任务开始到下一个任务开始的间隔，单位是毫秒。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;下面我来配置一下。&lt;/p&gt;&lt;h4&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: rgb(255, 255, 255);&quot;&gt;第一步：编写pojo&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: rgb(255, 255, 255);&quot;&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;import&amp;nbsp;org.springframework.scheduling.annotation.Scheduled;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
import&amp;nbsp;org.springframework.stereotype.Component;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;
@Component(“taskJob”)&amp;nbsp;&amp;nbsp;
public&amp;nbsp;class&amp;nbsp;TaskJob&amp;nbsp;{&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Scheduled(cron&amp;nbsp;=&amp;nbsp;&amp;quot;0&amp;nbsp;0&amp;nbsp;3&amp;nbsp;*&amp;nbsp;*&amp;nbsp;?&amp;quot;)&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;job1()&amp;nbsp;{&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(“任务进行中。。。”);&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;
}&lt;/pre&gt;&lt;h4&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: rgb(255, 255, 255);&quot;&gt;&lt;/strong&gt;&lt;strong style=&quot;font-family: Helvetica, Tahoma, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);&quot;&gt;第二步：添加task相关的配置：&lt;/strong&gt;&lt;/h4&gt;&lt;pre class=&quot;fy-prettyprint linenums&quot;&gt;&amp;lt;?xml&amp;nbsp;version=&amp;quot;1.0&amp;quot;&amp;nbsp;encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;lt;beans&amp;nbsp;xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;nbsp;xmlns:aop=&amp;quot;http://www.springframework.org/schema/aop&amp;quot;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:context=&amp;quot;http://www.springframework.org/schema/context&amp;quot;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:tx=&amp;quot;http://www.springframework.org/schema/tx&amp;quot;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:task=&amp;quot;http://www.springframework.org/schema/task&amp;quot;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xsi:schemaLocation=&amp;quot;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://www.springframework.org/schema/beans&amp;nbsp;http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://www.springframework.org/schema/aop&amp;nbsp;http://www.springframework.org/schema/aop/spring-aop-3.0.xsd&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://www.springframework.org/schema/context&amp;nbsp;&amp;nbsp;&amp;nbsp;
http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://www.springframework.org/schema/tx&amp;nbsp;http://www.springframework.org/schema/tx/spring-tx-3.0.xsd&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://www.springframework.org/schema/task&amp;nbsp;http://www.springframework.org/schema/task/spring-task-3.0.xsd&amp;quot;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;default-lazy-init=&amp;quot;false&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;context:annotation-config&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!—spring扫描注解的配置&amp;nbsp;&amp;nbsp;&amp;nbsp;--&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;context:component-scan&amp;nbsp;base-package=&amp;quot;com.gy.mytask&amp;quot;&amp;nbsp;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;!—开启这个配置，spring才能识别@Scheduled注解&amp;nbsp;&amp;nbsp;&amp;nbsp;--&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;task:annotation-driven&amp;nbsp;scheduler=&amp;quot;qbScheduler&amp;quot;&amp;nbsp;mode=&amp;quot;proxy&amp;quot;/&amp;gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;task:scheduler&amp;nbsp;id=&amp;quot;qbScheduler&amp;quot;&amp;nbsp;pool-size=&amp;quot;10&amp;quot;/&amp;gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;说明：理论上只需要加上&amp;lt;task:annotation-driven /&amp;gt;这句配置就可以了，这些参数都不是必须的。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Ok配置完毕，当然spring task还有很多参数，我就不一一解释了，具体参考xsd文档http://www.springframework.org/schema/task/spring-task-3.0.xsd。&lt;/p&gt;&lt;p&gt;附录：&lt;/p&gt;&lt;p&gt;cronExpression的配置说明，具体使用以及参数请百度google&lt;/p&gt;&lt;p&gt;字段 &amp;nbsp; 允许值 &amp;nbsp; 允许的特殊字符&lt;/p&gt;&lt;p&gt;秒 &amp;nbsp; &amp;nbsp;0-59 &amp;nbsp; &amp;nbsp;, - * /&lt;/p&gt;&lt;p&gt;分 &amp;nbsp; &amp;nbsp;0-59 &amp;nbsp; &amp;nbsp;, - * /&lt;/p&gt;&lt;p&gt;小时 &amp;nbsp; &amp;nbsp;0-23 &amp;nbsp; &amp;nbsp;, - * /&lt;/p&gt;&lt;p&gt;日期 &amp;nbsp; &amp;nbsp;1-31 &amp;nbsp; &amp;nbsp;, - * ? / L W C&lt;/p&gt;&lt;p&gt;月份 &amp;nbsp; &amp;nbsp;1-12 或者 JAN-DEC &amp;nbsp; &amp;nbsp;, - * /&lt;/p&gt;&lt;p&gt;星期 &amp;nbsp; &amp;nbsp;1-7 或者 SUN-SAT &amp;nbsp; &amp;nbsp;, - * ? / L C #&lt;/p&gt;&lt;p&gt;年（可选） &amp;nbsp; &amp;nbsp;留空, 1970-2099 &amp;nbsp; &amp;nbsp;, - * /&amp;nbsp;&lt;/p&gt;&lt;p&gt;- 区间 &amp;nbsp;&lt;/p&gt;&lt;p&gt;* 通配符 &amp;nbsp;&lt;/p&gt;&lt;p&gt;? 你不想设置那个字段&lt;/p&gt;&lt;p&gt;下面只例出几个式子&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;CRON表达式 &amp;nbsp; &amp;nbsp;含义&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;quot;0 0 12 * * ?&amp;quot; &amp;nbsp; &amp;nbsp;每天中午十二点触发&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;quot;0 15 10 ? * *&amp;quot; &amp;nbsp; &amp;nbsp;每天早上10：15触发&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;quot;0 15 10 * * ?&amp;quot; &amp;nbsp; &amp;nbsp;每天早上10：15触发&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;quot;0 15 10 * * ? *&amp;quot; &amp;nbsp; &amp;nbsp;每天早上10：15触发&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;quot;0 15 10 * * ? 2005&amp;quot; &amp;nbsp; &amp;nbsp;2005年的每天早上10：15触发&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;quot;0 * 14 * * ?&amp;quot; &amp;nbsp; &amp;nbsp;每天从下午2点开始到2点59分每分钟一次触发&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;quot;0 0/5 14 * * ?&amp;quot; &amp;nbsp; &amp;nbsp;每天从下午2点开始到2：55分结束每5分钟一次触发&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;quot;0 0/5 14,18 * * ?&amp;quot; &amp;nbsp; &amp;nbsp;每天的下午2点至2：55和6点至6点55分两个时间段内每5分钟一次触发&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;quot;0 0-5 14 * * ?&amp;quot; &amp;nbsp; &amp;nbsp;每天14:00至14:05每分钟一次触发&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;quot;0 10,44 14 ? 3 WED&amp;quot; &amp;nbsp; &amp;nbsp;三月的每周三的14：10和14：44触发&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;quot;0 15 10 ? * MON-FRI&amp;quot; &amp;nbsp; &amp;nbsp;每个周一、周二、周三、周四、周五的10：15触发&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Mon, 22 Oct 2018 20:37:20 +0800</pubDate></item><item><title>SSM框架注解的总结与详解</title><link>https://blog.dhboy.com/?id=59</link><description>&lt;p&gt;Spring中的注解:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;注解含义：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 用于创建对象的注解：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 相当于：&amp;lt;bean id=&amp;quot;&amp;quot; class=&amp;quot;&amp;quot;&amp;gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Component注解：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;作用：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;把资源让spring来管理。相当于在xml中配置一个bean,次注解使用在实体bean的头部&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Component(&amp;quot;accountService&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public class AccountServiceImpl implements AccountService {}&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value = &amp;quot;accountService&amp;quot;:相当于配置了bean标签的id属性，我们也可以不写value的值默认bean的id是当前类的类名首字母小写accountServiceImpl，单独配置value时，可以省略value。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Controller @Service @Repository：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;三个注解都是针对@Component注解的衍生注解，他们的作用及属性都是一模一样的。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;相当于： &amp;lt;property name=&amp;quot;&amp;quot; ref=&amp;quot;&amp;quot;&amp;gt; &amp;lt;property name=&amp;quot;&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;他们只不过是提供了更加明确的语义化。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Controller：一般用于表现层的注解。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Service：一般用于业务层的注解。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Repository：一般用于持久层的注解。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;细节：如果注解中有且只有一个属性要赋值时，且名称是value，value在赋值时可以不写。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 用于注入数据的：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 相当于： &amp;lt;property name=&amp;quot;&amp;quot; ref=&amp;quot;&amp;quot;&amp;gt; &amp;lt;property name=&amp;quot;&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Autowired：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;作用：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 自动按照类型注入。当使用注解注入属性时，set方法可以省略。它只能注入其他bean类型。当有多个类型匹配时，使用要注入的对象的变量名称作为bean的id，在spring容器查找，找到了也可以注入成功。找不到就报错。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 示例：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Autowired&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private AccountDao accountDao;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Qualifier：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;作用：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 在自动按照类型注入的基础之上，再按照Bean的id注入。它在给字段注入时不能独立使用，必须和@Autowire一起使用，&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 但是给方法参数注入时，可以独立使用。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;属性：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value：指定bean的id。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;示例：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Autowired&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Qualifier(&amp;quot;accountDao2&amp;quot;)指定将accountDao注入实体的变量名&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private AccountDao accountDao;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 给方法注入实参：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public JdbcTemplate craJdbcTemplate(@Qualifier(&amp;quot;dataSource&amp;quot;) DataSource dataSource){&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Resource：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 作用：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;直接按照Bean的id注入。它也只能注入bean类型。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 属性：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name：指定bean的id。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 示例：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Resource(name=&amp;quot;accountDao&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private AccountDao accountDao;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Value：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;作用：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 注入基本数据类型和String类型数据的&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 属性：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value：用于指定值&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 示例1：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Value(&amp;quot;zahngsan&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private String name; name=&amp;quot;zahngsan&amp;quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 示例2：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //将配置文件jdbc.properties中的数据注解到&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Value(&amp;quot;${jdbc.driverClass}&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private String driverClass;driverClass=&amp;quot;com.mysql.jdbc.Driver&amp;quot;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 用于改变作用范围的：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 相当于：&amp;lt;bean id=&amp;quot;&amp;quot; class=&amp;quot;&amp;quot; scope=&amp;quot;&amp;quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Scope：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 作用：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 指定bean的作用范围。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 属性：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value：指定范围的值。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 取值：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; singleton：默认的单例&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; prototype：多例&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 新注解说明：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Configuration：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 作用：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 用于指定当前类是一个spring配置类，当创建容器时会从该类上加载注解。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 获取容器时需要使用AnnotationApplicationContext(有@Configuration注解的类.class)。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 示例代码：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /**&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* spring的配置类，相当于applicationContext.xml文件&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Configuration&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public class SpringConfiguration {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ComponentScan：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 作用：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 用于指定spring在初始化容器时要扫描的包。作用和在spring的xml配置文件中的：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;context:component-scan base-package=&amp;quot;cn.itcast&amp;quot;&amp;gt;&amp;lt;/context:component-scan&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 属性：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Value（单独使用可省略）：用于指定要扫描的包。和标签中的basePackages属性作用一样。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 示例代码：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /**&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* spring的配置类，相当于bean.xml文件&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Configuration&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ComponentScan(&amp;quot;cn.itcast&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public class SpringConfiguration {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Bean：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 作用：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 该注解只能写在方法上，将方法的返回值作为一个bean,并且放入spring容器。id就是name的属性的值&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 属性：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name：给当前@Bean注解方法创建的对象指定一个名称(即bean的id）。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 示例代码：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Bean(name=&amp;quot;dataSource&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public DataSource createDataSource() throws Exception{&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ComboPooledDataSource ds = new ComboPooledDataSource();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ds.setDriverClass(&amp;quot;com.mysql.jdbc.Driver&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ds.setJdbcUrl(&amp;quot;jdbc:mysql://localhost:3306/heima-26&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ds.setUser(&amp;quot;root&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ds.setPassword(&amp;quot;root&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return ds;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @PropertySource：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 作用：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 用于加载.properties文件中的配置。例如我们配置数据源时，可以把连接数据库的信息写到properties配置文件中，就可以使用此注解指定properties配置文件的位置。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 属性：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value[]：用于指定properties文件位置。如果是在类路径下，需要写上classpath:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 示例代码：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @PropertySource(value = { &amp;quot;classpath:jdbc.properties&amp;quot; })&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public class JdbcConfig {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Value(&amp;quot;${jdbc.driver}&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private String driverClass;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Value(&amp;quot;${jdbc.url}&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private String url;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Value(&amp;quot;${jdbc.username}&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private String username;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Value(&amp;quot;${jdbc.password}&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private String password;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Bean(name = &amp;quot;dataSource&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public DataSource createDataSource() throws Exception {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ComboPooledDataSource ds = new ComboPooledDataSource();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ds.setDriverClass(driverClass);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ds.setJdbcUrl(url);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ds.setUser(username);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ds.setPassword(password);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return ds;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Import：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 作用：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 用于导入其他配置类，在引入其他配置类时，其他类上可以不用再写@Configuration注解。当然，写上也没问题。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 属性：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value[]：用于指定其他配置类的字节码。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 示例代码：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Configuration&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ComponentScan(&amp;quot;cn.itcast&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Import(value = { JdbcConfig.class })&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public class SpringConfiguration {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Configuration//写不写都行&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @PropertySource(value = { &amp;quot;classpath:jdbc.properties&amp;quot; })&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public class JdbcConfig {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Spring整合junit：&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@RunWith：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 作用：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 替换掉junit的运行器,换成一个可以初始化spring容器的运行器。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 属性：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value：单独配置时，value属性名称可以省略，配置SpringJUnit4ClassRunner.class来代替原来junit的运行器&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ContextConfiguration：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 作用：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 加载配置类或者xml配置文件&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 属性：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value[]：用来指定xml配置文件的路径&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; class[]: 用来指定配置类&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 示例：自动的加载配置文件的信息&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //表示spring整合junit使用spring容器的运行器&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RunWith(SpringJUnit4ClassRunner.class)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //表示加载xml的配置的文件即可完成配置文件的加载&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ContextConfiguration(locations={&amp;quot;classpath:applicationContext.xml&amp;quot;})&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 配置Aop注解：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @EnableAspectJAutoProxy：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 声明使用注解方式的AOP配置了：&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Configuration：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 标注此类是一个配置的类相当于applicationContext.xml的加载配置的类：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ComponentScan(&amp;quot;com.itheima&amp;quot;)：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 标注此类相当于applicationContext.xml的加载配置的类，开启包的全局的扫描的方式：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Configuration//标注此类是一个配置的类&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ComponentScan(&amp;quot;com.itheima&amp;quot;)//扫描的类&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @EnableAspectJAutoProxy//声明使用注解方式的AOP配置了&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public class SpringConfiguration {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Aspect：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 指定当前类是通知类写在类上：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Aspect//声明这是一个切面类（通知类）里面配置的有具体的通知的方法&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Service//将此类放到容器中&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public class Logger {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Before：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 前置通知方法：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Before(&amp;quot;execution(* com.itheima.serviceImpl.*.*(..))&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void beforePrintLog() {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&amp;quot;前置通知执行了&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @after-returning：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 后置通知方法：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @AfterReturning(&amp;quot;execution(* com.itheima.serviceImpl.*.*(..))&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void afterReturningPrintLog() {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&amp;quot;后置通知执行了&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @after-throwing：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 异常拦截通知方法：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @AfterThrowing(&amp;quot;execution(* com.itheima.serviceImpl.*.*(..))&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void afterThrowingPrintLog() {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&amp;quot;异常通知执行了&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @after：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 后通知方法：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @AfterReturning(&amp;quot;execution(* com.itheima.serviceImpl.*.*(..))&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void afterReturningPrintLog() {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&amp;quot;后置通知执行了&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @PointCut：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 抽取切点表达式：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Pointcut(&amp;quot;execution(* com.itheima.serviceImpl.*.*(..))&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public&amp;nbsp; void pt1(){&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @around：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 环绕通知方法：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /**&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* 环绕通知&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* 问题：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* 当配置完环绕通知之后，没有业务层方法执行（切入点方法执行）&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* 分析：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* 通过动态代理的代码分析，我们现在的环绕通知没有明确的切入点方法调用&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* 解决：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* spring框架为我们提供了一个接口，该接口可以作为环绕通知的方法参数来使用&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* ProceedingJoinPoint。当环绕通知执行时，spring框架会为我们注入该接口的实现类。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* 它有一个方法proceed()，就相当于invoke，执行目标方法&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* &amp;lt;p&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* spring的环绕通知：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* 它是spring为我们提供的一种可以在代码中手动控制增强方法何时执行的方式。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Around(&amp;quot;pt1()&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public Object around(ProceedingJoinPoint pjp) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&amp;quot;增强了前置通知！&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Object obj = pjp.proceed();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&amp;quot;增强了后置通知！&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return obj;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Throwable e) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&amp;quot;增强了异常通知！&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw new RuntimeException(e);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } finally {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&amp;quot;增强了最终通知!&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 基于注解的事务管理：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Transactional：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Transactional 注解可以被应用于接口定义和接口方法、类定义和类的 public 方法上。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 注解使用在类上表明此类下的所有的方法是一个基于注解的事务&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 定义在接口上，只有接口的代理的实现的类可认为是基于注解的方法。因为注解不能被继承。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 然而，请注意仅仅 @Transactional 注解的出现不足于开启事务行为，它仅仅是一种元数据，能够被可以识别。要开启注解的植物管理 &amp;lt;tx:annotation-driven/&amp;gt;：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;SpringMvc中的注解：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Controller：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Spring的Controller是Singleton的。这就意味着会被多个请求线程共享。因此，我们将控制器设计成无状态类：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestMapping：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 在类前面定义，则将url和类绑定；(如果该类里只有单个方法的话可以这样写，访问该地址直接调用该方法)：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 示例代码如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Controller&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestMapping(&amp;quot;/getUser&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public class UserController {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ......&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ......&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 定义在方法上则会为方法生成一个请求的路径：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestMapping(&amp;quot;/hello&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public String getHello() {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;index&amp;quot;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 可以携带请求的参数 Rest风格（占位符）的映射：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestMapping(value=“/user/{name}/{id} &amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 请求URL：http://localhost:8080/user/zhangsan/1001.do&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 这种方式虽然和通配符“*”类似，却比通配符更加强大，占位符除了可以起到通配的作用，最精要的地方是在于它还可以传递参数。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 测试一:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestMapping(value=&amp;quot;show4/{name}/{id}&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public ModelAndView test4(){&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ModelAndView mv = new ModelAndView();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mv.setViewName(&amp;quot;hello&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mv.addObject(&amp;quot;msg&amp;quot;, &amp;quot;占位符的映射:&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return mv;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 与其相关：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @GetMapping：相当于@RequestMapping（method = RequestMethod.GET）&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @PostMapping：相当于@RequestMapping（method = RequestMethod.POST）&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @PutMapping：相当于@RequestMapping（method = RequestMethod.PUT）&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @DeleteMapping：相当于@RequestMapping（method = RequestMethod.DELETE）&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @PathVariable：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 与 Rest风格（占位符）的映射一起使用获取参数数据：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestMapping(value=&amp;quot;/show4/{name}/{id}&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public ModelAndView test4(@PathVariable(&amp;quot;name&amp;quot;)String name,@PathVariable(&amp;quot;id&amp;quot;)Long id){&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ModelAndView mv = new ModelAndView();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mv.setViewName(&amp;quot;hello&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mv.addObject(&amp;quot;msg&amp;quot;, &amp;quot;占位符的映射:&amp;quot;+name+&amp;quot;...&amp;quot;+id);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return mv;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @PathVariable(“userId”) Long id, @PathVariable(“name”)String name获取对应的参数：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @PathVariable(“key”)中的key必须和对应的占位符中的参数名一致，而方法形参的参数名可任意取：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestParam：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; A） 常用来处理简单类型的绑定，通过Request.getParameter() 获取的String可直接转换为简单类型的情况（ String--&amp;gt; 简单类型的转换操作由ConversionService配置的转换器来完成）；因为使用request.getParameter()方式获取参数，所以可以处理get 方式中queryString的值，也可以处理post方式中 body data的值：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; B）用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容，提交方式GET、POST：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GET模式下，这里使用了@PathVariable绑定输入参数，非常适合Restful风格。因为隐藏了参数与路径的关系，可以提升网站的安全性，静态化页面，降低恶意攻击风险。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; POST模式下，使用@RequestBody绑定请求对象，Spring会帮你进行协议转换，将Json、Xml协议转换成你需要的对象。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C) 该注解有三个属性： value、required、defaultValue：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value用来指定要传入值的id名称：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; required用来指示参数是否必须绑定：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; defaultValue用来指定在前端没有传值的情况下限定默认的值：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestMapping(value=&amp;quot;show19&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public String test19(Model model,@RequestParam(value=&amp;quot;name&amp;quot;)String name){&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; model.addAttribute(&amp;quot;msg&amp;quot;, &amp;quot;使用@RequestParam接收到的参数为：&amp;quot;+name);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;hello&amp;quot;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ResponseStatus(value=HttpStatus.OK)：如果不响应页面，就需要响应状态：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestMapping(value = &amp;quot;show23&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ResponseStatus(value=HttpStatus.OK)//不响应页面，就需要响应个状态码&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void test23(@RequestParam(&amp;quot;name&amp;quot;)String name,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestParam(&amp;quot;age&amp;quot;)Integer age,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestParam(&amp;quot;isMarry&amp;quot;)Boolean isMarry, //可以将on或者1转换为true,0转换为false.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestParam(&amp;quot;income&amp;quot;)Float income,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestParam(&amp;quot;interests&amp;quot;)String[] interests) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; StringBuffer sb = new StringBuffer();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sb.append(&amp;quot;name:&amp;quot;+name+&amp;quot;\n&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sb.append(&amp;quot;age:&amp;quot;+age+&amp;quot;\n&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sb.append(&amp;quot;isMarry:&amp;quot;+isMarry+&amp;quot;\n&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sb.append(&amp;quot;income:&amp;quot;+income+&amp;quot;\n&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sb.append(&amp;quot;interests:[&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (String inter : interests) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sb.append(inter+&amp;quot; &amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sb.append(&amp;quot;]&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(sb.toString());&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @CookieValue使用方法同@RequestParam：获取cookie的值：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestMapping(value = &amp;quot;show22&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public String test22(Model model, @CookieValue(&amp;quot;JSESSIONID&amp;quot;)String jsessionid) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; model.addAttribute(&amp;quot;msg&amp;quot;, &amp;quot;jsessionid：&amp;quot; + jsessionid);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;hello&amp;quot;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ResponseBody：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 当一个处理请求的方法标记为@ResponseBody时，表示该方法需要输出其他视图（json、xml），springmvc会通过默认的json转化器转化输出,但是需要引入相关的jar包：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;!--jackson支持json解析--&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;dependency&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;groupId&amp;gt;com.fasterxml.jackson.core&amp;lt;/groupId&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;artifactId&amp;gt;jackson-databind&amp;lt;/artifactId&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/dependency&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /**&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* 将list集合响应成json数据&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @return&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestMapping(value=&amp;quot;show28&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ResponseBody//将数据响应成json格式的数据&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public List&amp;lt;User&amp;gt; test28() {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; List&amp;lt;User&amp;gt; list = new ArrayList&amp;lt;User&amp;gt;();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i = 0;i&amp;lt; 20;i++) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; User user = new User();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; user.setId(i+1L);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; user.setUsername(&amp;quot;zhangsan&amp;quot;+i);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; user.setName(&amp;quot;张三&amp;quot;+i);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; user.setAge(18);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; list.add(user);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return list;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestBody：接收一个json并且转换成一个对象&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /**&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* 将提交的json格式的数据封装到user对象中&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @RequestBody()：自动将json数据序列化成一个user对象&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @param model&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @param user&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* @return&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestMapping(value=&amp;quot;show29&amp;quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public String test29(Model model,@RequestBody()User user) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; model.addAttribute(&amp;quot;msg&amp;quot;, user);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;hello&amp;quot;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RestController：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 有时如果在一个Contoller中所有的方法都是用来响应json格式数据的，那么如果有多个方法，就需要在多个方法上使用@ResponseBody，这样太麻烦，springmvc提供了一个@RestController，将该注解使用在Controller类上，那么该controller中的所有方法都默认是响应json格式的数据了：&lt;/p&gt;&lt;p&gt;---------------------&amp;nbsp;&lt;/p&gt;&lt;p&gt;作者：低调的繁华6&amp;nbsp;&lt;/p&gt;&lt;p&gt;来源：CSDN&amp;nbsp;&lt;/p&gt;&lt;p&gt;原文：https://blog.csdn.net/weixin_42696130/article/details/81051126?utm_source=copy&amp;nbsp;&lt;/p&gt;&lt;p&gt;版权声明：本文为博主原创文章，转载请附上博文链接！&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Sat, 13 Oct 2018 09:32:39 +0800</pubDate></item></channel></rss><!--21.09 ms , 5 query , 1068kb memory , 0 error-->