This commit is contained in:
20
net.html
20
net.html
@@ -37,10 +37,10 @@
|
||||
7、内置WebSocket的集群与组功能,且提供伪WebSocket连接功能。<br/>
|
||||
8、HttpResponse只能异步输出。<br/>
|
||||
</p>
|
||||
<p> 编写Redkale的HttpServlet与 JSR 340中的javax.servlet.http.HttpServlet 基本相同,只需继承 org.redkale.net.http.HttpServlet, Redkale也提供了更友好的基类 org.redkale.net.http.HttpBaseServlet, 比较好的习惯是一个项目先定义一个项目级的BaseServlet类,这样方便以后加入类似javax.servlet.Filter的功能。 <br/> <br/>
|
||||
<p> 编写Redkale的HttpServlet与 JSR 340中的javax.servlet.http.HttpServlet 基本相同,只需继承 org.redkale.net.http.HttpServlet, 比较好的习惯是一个项目先定义一个项目级的BaseServlet类,这样方便以后加入类似javax.servlet.Filter的功能。 <br/> <br/>
|
||||
一个典型的BaseSerlvet实现:
|
||||
</p>
|
||||
<div class="highlight"><pre><span></span><span class="kd">public</span> <span class="kd">class</span> <span class="nc">BaseSerlvet</span> <span class="kd">extends</span> <span class="n">org</span><span class="o">.</span><span class="na">redkale</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">http</span><span class="o">.</span><span class="na">HttpBaseServlet</span> <span class="o">{</span>
|
||||
<div class="highlight"><pre><span></span><span class="kd">public</span> <span class="kd">class</span> <span class="nc">BaseSerlvet</span> <span class="kd">extends</span> <span class="n">org</span><span class="o">.</span><span class="na">redkale</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">http</span><span class="o">.</span><span class="na">HttpServlet</span> <span class="o">{</span>
|
||||
|
||||
<span class="kd">protected</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="na">getClass</span><span class="o">().</span><span class="na">getSimpleName</span><span class="o">());</span>
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
<span class="c1">//在调用authenticate之前调用, 返回false表示请求不合法</span>
|
||||
<span class="c1">//该方法可以用于判断请求源是否合法或加入一些全局的拦截操作</span>
|
||||
<span class="nd">@Override</span>
|
||||
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">preExecute</span><span class="o">(</span><span class="kd">final</span> <span class="n">HttpRequest</span> <span class="n">request</span><span class="o">,</span> <span class="kd">final</span> <span class="n">HttpResponse</span> <span class="n">response</span><span class="o">,</span> <span class="n">HttpServlet</span> <span class="n">next</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
|
||||
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">preExecute</span><span class="o">(</span><span class="kd">final</span> <span class="n">HttpRequest</span> <span class="n">request</span><span class="o">,</span> <span class="kd">final</span> <span class="n">HttpResponse</span> <span class="n">response</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
|
||||
<span class="k">if</span> <span class="o">(!</span><span class="n">request</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="s">"User-Agent"</span><span class="o">,</span> <span class="s">""</span><span class="o">).</span><span class="na">contains</span><span class="o">(</span><span class="s">"Redkale-Agent"</span><span class="o">))</span> <span class="o">{</span> <span class="c1">//只用移动APP的接口可以判断User-Agent是否正确</span>
|
||||
<span class="n">response</span><span class="o">.</span><span class="na">addHeader</span><span class="o">(</span><span class="s">"retcode"</span><span class="o">,</span> <span class="s">"10001"</span><span class="o">);</span>
|
||||
<span class="n">response</span><span class="o">.</span><span class="na">addHeader</span><span class="o">(</span><span class="s">"retmessage"</span><span class="o">,</span> <span class="s">"User-Agent error"</span><span class="o">);</span>
|
||||
@@ -77,32 +77,32 @@
|
||||
<span class="k">return</span><span class="o">;</span>
|
||||
<span class="o">}</span>
|
||||
<span class="c1">//可以加上一些统计操作</span>
|
||||
<span class="k">if</span> <span class="o">(</span><span class="n">fine</span><span class="o">)</span> <span class="n">response</span><span class="o">.</span><span class="na">setRecycleListener</span><span class="o">((</span><span class="n">req</span><span class="o">,</span> <span class="n">resp</span><span class="o">)</span> <span class="o">-></span> <span class="o">{</span> <span class="c1">//记录处理时间太长的请求操作</span>
|
||||
<span class="k">if</span> <span class="o">(</span><span class="n">fine</span><span class="o">)</span> <span class="n">response</span><span class="o">.</span><span class="na">recycleListener</span><span class="o">((</span><span class="n">req</span><span class="o">,</span> <span class="n">resp</span><span class="o">)</span> <span class="o">-></span> <span class="o">{</span> <span class="c1">//记录处理时间太长的请求操作</span>
|
||||
<span class="kt">long</span> <span class="n">e</span> <span class="o">=</span> <span class="n">System</span><span class="o">.</span><span class="na">currentTimeMillis</span><span class="o">()</span> <span class="o">-</span> <span class="n">request</span><span class="o">.</span><span class="na">getCreatetime</span><span class="o">();</span>
|
||||
<span class="k">if</span> <span class="o">(</span><span class="n">e</span> <span class="o">></span> <span class="mi">500</span><span class="o">)</span> <span class="n">logger</span><span class="o">.</span><span class="na">fine</span><span class="o">(</span><span class="s">"耗时居然用了 "</span> <span class="o">+</span> <span class="n">e</span> <span class="o">+</span> <span class="s">" 毫秒. 请求为: "</span> <span class="o">+</span> <span class="n">req</span><span class="o">);</span>
|
||||
<span class="o">});</span>
|
||||
<span class="n">next</span><span class="o">.</span><span class="na">execute</span><span class="o">(</span><span class="n">request</span><span class="o">,</span> <span class="n">response</span><span class="o">);</span>
|
||||
<span class="n">response</span><span class="o">.</span><span class="na">nextEvent</span><span class="o">();</span>
|
||||
<span class="o">}</span>
|
||||
|
||||
<span class="c1">//标记为@AuthIgnore 的方法将不会调用authenticate方法</span>
|
||||
<span class="c1">//一般用于判断用户的登录态, 返回false表示鉴权失败</span>
|
||||
<span class="c1">//moduleid值来自 @WebServlet.moduleid()用于定义模块ID; actionid值自来@WebMapping.actionid()用于定义操作ID; 需要系统化的鉴权需要定义这两个值</span>
|
||||
<span class="c1">//moduleid值来自 @WebServlet.moduleid()用于定义模块ID; actionid值自来@HttpMapping.actionid()用于定义操作ID; 需要系统化的鉴权需要定义这两个值</span>
|
||||
<span class="nd">@Override</span>
|
||||
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">authenticate</span><span class="o">(</span><span class="kt">int</span> <span class="n">moduleid</span><span class="o">,</span> <span class="kt">int</span> <span class="n">actionid</span><span class="o">,</span> <span class="n">HttpRequest</span> <span class="n">request</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">response</span><span class="o">,</span> <span class="n">HttpServlet</span> <span class="n">next</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
|
||||
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">authenticate</span><span class="o">(<span class="n">HttpRequest</span> <span class="n">request</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">response</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
|
||||
<span class="n">UserInfo</span> <span class="n">info</span> <span class="o">=</span> <span class="n">currentUser</span><span class="o">(</span><span class="n">request</span><span class="o">);</span>
|
||||
<span class="k">if</span> <span class="o">(</span><span class="n">info</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
|
||||
<span class="n">response</span><span class="o">.</span><span class="na">finishJson</span><span class="o">(</span><span class="n">RetCodes</span><span class="o">.</span><span class="na">retResult</span><span class="o">(</span><span class="n">RetCodes</span><span class="o">.</span><span class="na">RET_USER_UNLOGIN</span><span class="o">));</span>
|
||||
<span class="k">return</span><span class="o">;</span>
|
||||
<span class="o">}</span> <span class="k">else</span> <span class="k">if</span> <span class="o">(!</span><span class="n">info</span><span class="o">.</span><span class="na">checkAuth</span><span class="o">(</span><span class="n">module</span><span class="o">,</span> <span class="n">actionid</span><span class="o">))</span> <span class="o">{</span>
|
||||
<span class="o">}</span> <span class="k">else</span> <span class="k">if</span> <span class="o">(!</span><span class="n">info</span><span class="o">.</span><span class="na">checkAuth</span><span class="o">(</span><span class="n">request.getModuleid()</span><span class="o">,</span> <span class="n">request.getActionid()</span><span class="o">))</span> <span class="o">{</span>
|
||||
<span class="n">response</span><span class="o">.</span><span class="na">finishJson</span><span class="o">(</span><span class="n">RetCodes</span><span class="o">.</span><span class="na">retResult</span><span class="o">(</span><span class="n">RetCodes</span><span class="o">.</span><span class="na">RET_USER_AUTH_ILLEGAL</span><span class="o">));</span>
|
||||
<span class="k">return</span><span class="o">;</span>
|
||||
<span class="o">}</span>
|
||||
<span class="n">next</span><span class="o">.</span><span class="na">execute</span><span class="o">(</span><span class="n">request</span><span class="o">,</span> <span class="n">response</span><span class="o">);</span>
|
||||
<span class="n">response</span><span class="o">.</span><span class="na">nextEvent</span><span class="o">();</span>
|
||||
<span class="o">}</span>
|
||||
<span class="o">}</span>
|
||||
</pre></div>
|
||||
|
||||
<p> 继承HttpBaseServlet的子类可以使用其自带的鉴权、请求分支、缓存等功能, 一个典型的操作<span id="userservlet">用户HttpServlet</span>: </p>
|
||||
<p> 继承HttpServlet的子类可以使用其自带的鉴权、请求分支、缓存等功能, 一个典型的操作<span id="userservlet">用户HttpServlet</span>: </p>
|
||||
<div class="highlight"><pre><span class="nd">@WebServlet</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="o">{</span><span class="s">"/user/*"</span><span class="o">},</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"用户模块服务"</span><span class="o">)</span> <span class="c1">//拦截所有 /user/ 开头的请求</span>
|
||||
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">UserServlet</span> <span class="kd">extends</span> <span class="n">BaseSerlvet</span> <span class="o">{</span>
|
||||
|
||||
|
||||
@@ -633,7 +633,7 @@
|
||||
|
||||
<span class="c"><!-- </span>
|
||||
<span class="c"> REST的核心配置项, 存在[rest]节点则Server启动时会加载REST服务, 当Server为SNCP协议时,则SncpServer会变成REST的HttpServer, 节点可以多个</span>
|
||||
<span class="c"> base: REST服务的BaseServlet,必须是 org.redkale.net.http.RestHttpServlet 的子类,该属性值默认值为 org.redkale.net.http.DefaultRestServlet。</span>
|
||||
<span class="c"> base: REST服务的BaseServlet,必须是 org.redkale.net.http.RestHttpServlet 的子类,该属性值默认值为 org.redkale.net.http.RestHttpServlet。</span>
|
||||
<span class="c"> autoload:默认值"true" 默认值. 加载当前server所能使用的Servce对象; </span>
|
||||
<span class="c"> mustsign:默认值"true" 是否只加载标记为RestService的Service类,默认只加载标记RestService且ignore=false的Service</span>
|
||||
<span class="c"> includes:当autoload="true", 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开</span>
|
||||
|
||||
38
service.html
38
service.html
@@ -290,7 +290,7 @@
|
||||
<p> 生成远程模式Service时发现参数带有@RpcCall注解的方法,在远程调用返回结果时会进行回调处理。</p>
|
||||
|
||||
<h3><a id="service_rest" class="anchor" href="#" aria-hidden="true"></a>Service REST</h3>
|
||||
<p> RestService提供类似Spring Boot的功能。开启REST功能的HTTP Server在实例化标记为@RestService的Service后自动生成对应的HttpServlet,免去开发人员编写HttpServlet的工作量。RestService生成的HttpServlet均是RestHttpServlet的子类。主要通过<a href="/javadoc/org/redkale/net/http/RestService.html" target="_blank">@RestService</a>、<a href="/javadoc/org/redkale/net/http/RestMapping.html" target="_blank">@RestMapping</a>、<a href="/javadoc/org/redkale/net/http/RestParam.html" target="_blank">@RestParam</a>这三个注解来实现,同时为了获取其他类型的参数也有<a href="/javadoc/org/redkale/net/http/RestAddress.html" target="_blank">@RestAddress</a>、<a href="/javadoc/org/redkale/net/http/RestCookie.html" target="_blank">@RestCookie</a>、<a href="/javadoc/org/redkale/net/http/RestHeader.html" target="_blank">@RestHeader</a>、<a href="/javadoc/org/redkale/net/http/RestSessionid.html" target="_blank">@RestSessionid</a>、<a href="/javadoc/org/redkale/net/http/RestOutput.html" target="_blank">RestOutput</a> 提供其扩展功能。<br/></p>
|
||||
<p> RestService提供类似Spring Boot的功能。开启REST功能的HTTP Server在实例化标记为@RestService的Service后自动生成对应的HttpServlet,免去开发人员编写HttpServlet的工作量。RestService生成的HttpServlet均是RestHttpServlet的子类。主要通过<a href="/javadoc/org/redkale/net/http/RestService.html" target="_blank">@RestService</a>、<a href="/javadoc/org/redkale/net/http/RestMapping.html" target="_blank">@RestMapping</a>、<a href="/javadoc/org/redkale/net/http/RestParam.html" target="_blank">@RestParam</a>这三个注解来实现,同时为了获取其他类型的参数也有<a href="/javadoc/org/redkale/net/http/RestAddress.html" target="_blank">@RestAddress</a>、<a href="/javadoc/org/redkale/net/http/RestCookie.html" target="_blank">@RestCookie</a>、<a href="/javadoc/org/redkale/net/http/RestHeader.html" target="_blank">@RestHeader</a>、<a href="/javadoc/org/redkale/net/http/RestSessionid.html" target="_blank">@RestSessionid</a>、<a href="/javadoc/org/redkale/net/http/RestBody.html" target="_blank">@RestBody</a> 提供其扩展功能。<br/></p>
|
||||
<p>
|
||||
@RestService : <br>
|
||||
</p>
|
||||
@@ -354,15 +354,15 @@
|
||||
<span class="c1">//默认为方法名的小写(若方法名以createXXX、updateXXX、deleteXXX、queryXXX、findXXX且XXXService为Service的类名将只截取XXX之前)</span>
|
||||
<span class="n">String</span> <span class="nf">name</span><span class="o">()</span> <span class="k">default</span> <span class="s">""</span><span class="o">;</span>
|
||||
|
||||
<span class="n">String</span> <span class="nf">comment</span><span class="o">()</span> <span class="k">default</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//备注描述, 对应@WebMapping.comment </span>
|
||||
<span class="n">String</span> <span class="nf">comment</span><span class="o">()</span> <span class="k">default</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//备注描述, 对应@HttpMapping.comment </span>
|
||||
|
||||
<span class="kt">boolean</span> <span class="nf">authignore</span><span class="o">()</span> <span class="k">default</span> <span class="kc">true</span><span class="o">;</span> <span class="c1">//是否鉴权,默认不鉴权, 对应@AuthIgnore </span>
|
||||
|
||||
<span class="kt">int</span> <span class="nf">cacheseconds</span><span class="o">()</span> <span class="k">default</span> <span class="mi">0</span><span class="o">;</span> <span class="c1">//结果缓存的秒数, 为0表示不缓存, 对应@HttpCacheable.seconds</span>
|
||||
|
||||
<span class="kt">int</span> <span class="nf">actionid</span><span class="o">()</span> <span class="k">default</span> <span class="mi">0</span><span class="o">;</span> <span class="c1">//操作ID值,鉴权时用到, 对应@WebMapping.actionid</span>
|
||||
<span class="kt">int</span> <span class="nf">actionid</span><span class="o">()</span> <span class="k">default</span> <span class="mi">0</span><span class="o">;</span> <span class="c1">//操作ID值,鉴权时用到, 对应@HttpMapping.actionid</span>
|
||||
|
||||
<span class="n">String[]</span> <span class="nf">methods</span><span class="o">()</span> <span class="k">default</span> <span class="mi">{}</span><span class="o">;</span> <span class="c1">//允许方法(不区分大小写),如:GET/POST/PUT,为空表示允许所有方法, 对应@WebMapping.methods</span>
|
||||
<span class="n">String[]</span> <span class="nf">methods</span><span class="o">()</span> <span class="k">default</span> <span class="mi">{}</span><span class="o">;</span> <span class="c1">//允许方法(不区分大小写),如:GET/POST/PUT,为空表示允许所有方法, 对应@HttpMapping.methods</span>
|
||||
<span class="o">}</span>
|
||||
</pre></div>
|
||||
|
||||
@@ -383,7 +383,7 @@
|
||||
|
||||
<span class="kt">int</span> <span class="nf">radix</span><span class="o">()</span> <span class="k">default</span> <span class="mi">10</span><span class="o">;</span> <span class="c1">//转换数字byte/short/int/long时所用的进制数, 默认10进制</span>
|
||||
|
||||
<span class="n">String</span> <span class="nf">comment</span><span class="o">()</span> <span class="k">default</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//备注描述, 对应@WebMapping.comment </span>
|
||||
<span class="n">String</span> <span class="nf">comment</span><span class="o">()</span> <span class="k">default</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//备注描述, 对应@HttpMapping.comment </span>
|
||||
<span class="o">}</span>
|
||||
</pre></div>
|
||||
<p> 开启REST功能的步骤很简单:在 <a href="redkale.html#redkale_confxml" target="_blank">application.xml</a> 的 <b><server></b> 节点下增加<b><rest></b>指明RestHttpServlet的子类。<br/></p>
|
||||
@@ -391,13 +391,13 @@
|
||||
<div class="highlight"><pre>
|
||||
<span class="c"><!-- </span>
|
||||
<span class="c"> REST的核心配置项, 存在[rest]节点则Server启动时会加载REST服务, 当Server为SNCP协议时,则SncpServer会变成REST的HttpServer, 节点可以多个</span>
|
||||
<span class="c"> base: REST服务的BaseServlet,必须是 org.redkale.net.http.RestHttpServlet 的子类,该属性值默认值为 org.redkale.net.http.DefaultRestServlet。</span>
|
||||
<span class="c"> base: REST服务的BaseServlet,必须是 org.redkale.net.http.RestHttpServlet 的子类,该属性值默认值为 org.redkale.net.http.RestHttpServlet。</span>
|
||||
<span class="c"> autoload:默认值"true" 默认值. 加载当前server所能使用的Servce对象; </span>
|
||||
<span class="c"> mustsign:默认值"true" 是否只加载标记为RestService的Service类,默认只加载标记RestService且ignore=false的Service</span>
|
||||
<span class="c"> includes:当autoload="true", 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开</span>
|
||||
<span class="c"> excludes:当autoload="true", 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开</span>
|
||||
<span class="c"> --></span>
|
||||
<span class="nt"><rest</span> <span class="na">base=</span><span class="s">"org.redkale.net.http.DefaultRestServlet"</span> <span class="na">mustsign=</span><span class="s">"true"</span> <span class="na">autoload=</span><span class="s">"true"</span> <span class="na">includes=</span><span class="s">""</span> <span class="na">excludes=</span><span class="s">""</span><span class="nt">></span>
|
||||
<span class="nt"><rest</span> <span class="na">base=</span><span class="s">"org.redkale.net.http.RestHttpServlet"</span> <span class="na">mustsign=</span><span class="s">"true"</span> <span class="na">autoload=</span><span class="s">"true"</span> <span class="na">includes=</span><span class="s">""</span> <span class="na">excludes=</span><span class="s">""</span><span class="nt">></span>
|
||||
<span class="c"><!-- </span>
|
||||
<span class="c"> value: Service类名,列出的表示必须被加载的Service对象</span>
|
||||
<span class="c"> ignore: 是否忽略,设置为true则不会加载该Service对象,默认值为false</span>
|
||||
@@ -428,7 +428,7 @@
|
||||
|
||||
<span class="c1">//普通鉴权</span>
|
||||
<span class="nd">@Override</span>
|
||||
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">authenticate</span><span class="o">(</span><span class="kt">int</span> <span class="n">module</span><span class="o">,</span> <span class="kt">int</span> <span class="n">actionid</span><span class="o">,</span> <span class="n">HttpRequest</span> <span class="n">request</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">response</span><span class="o">,</span> <span class="n">HttpServlet</span> <span class="n">next</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
|
||||
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">authenticate</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">request</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">response</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
|
||||
<span class="n">UserInfo</span> <span class="n">info</span> <span class="o">=</span> <span class="n">currentUser</span><span class="o">(</span><span class="n">request</span><span class="o">);</span>
|
||||
<span class="k">if</span> <span class="o">(</span><span class="n">info</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
|
||||
<span class="n">response</span><span class="o">.</span><span class="na">finishJson</span><span class="o">(</span><span class="n">RET_UNLOGIN</span><span class="o">);</span>
|
||||
@@ -437,7 +437,7 @@
|
||||
<span class="n">response</span><span class="o">.</span><span class="na">finishJson</span><span class="o">(</span><span class="n">RET_AUTHILLEGAL</span><span class="o">);</span>
|
||||
<span class="k">return</span><span class="o">;</span>
|
||||
<span class="o">}</span>
|
||||
<span class="n">next</span><span class="o">.</span><span class="na">execute</span><span class="o">(</span><span class="n">request</span><span class="o">,</span> <span class="n">response</span><span class="o">);</span>
|
||||
<span class="n">response</span><span class="o">.</span><span class="na">nextEvent</span><span class="o">();</span>
|
||||
<span class="o">}</span>
|
||||
|
||||
<span class="o">}</span>
|
||||
@@ -539,8 +539,8 @@
|
||||
|
||||
<span class="c1"><b>//异步查询单个</b></span>
|
||||
<span class="nd">@RestMapping</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"asyncfind"</span><span class="o">,</span> <span class="n">auth</span> <span class="o">=</span> <span class="kc">false</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"根据id查找单个Hello对象"</span><span class="o">)</span>
|
||||
<span class="kd">public</span> <span class="n">HelloEntity</span> <span class="nf">findHello</span><span class="o">(</span><span class="n">AsyncHandler</span> <span class="n">handler</span><span class="o">,</span> <span class="nd">@RestParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"#"</span><span class="o">)</span> <span class="kt">int</span> <span class="n">id</span><span class="o">)</span> <span class="o">{</span> <span class="c1">//通过 /pipes/hello/asyncfind/1234 查询对象</span>
|
||||
<span class="k">return</span> <span class="n">source</span><span class="o">.</span><span class="na">findAsync</span><span class="o">(</span><span class="n">handler</span><span class="o">,</span> <span class="n">HelloEntity</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">id</span><span class="o">);</span>
|
||||
<span class="kd">public</span> <span class="n">CompletableFuture<HelloEntity></span> <span class="nf">findAsyncHello</span><span class="o">(</span><span class="nd">@RestParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"#"</span><span class="o">)</span> <span class="kt">int</span> <span class="n">id</span><span class="o">)</span> <span class="o">{</span> <span class="c1">//通过 /pipes/hello/asyncfind/1234 查询对象</span>
|
||||
<span class="k">return</span> <span class="n">source</span><span class="o">.</span><span class="na">findAsync</span><span class="o">(</span><span class="n">HelloEntity</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">id</span><span class="o">);</span>
|
||||
<span class="o">}</span>
|
||||
<span class="o">}</span>
|
||||
</pre></div>
|
||||
@@ -559,7 +559,7 @@
|
||||
<span class="kd">private</span> <span class="n">Map</span><span class="o"><</span><span class="n">String</span><span class="o">,</span> <span class="n">HelloService</span><span class="o">></span> <span class="n">_servicemap</span><span class="o">;</span>
|
||||
|
||||
<span class="nd">@AuthIgnore</span>
|
||||
<span class="nd">@WebMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">"/hello/create"</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"创建Hello对象"</span><span class="o">)</span>
|
||||
<span class="nd">@HttpMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">"/hello/create"</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"创建Hello对象"</span><span class="o">)</span>
|
||||
<span class="nd">@WebParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"bean"</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="n">HelloEntity</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"Hello对象"</span><span class="o">)</span>
|
||||
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">create</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
|
||||
<span class="n">HelloService</span> <span class="n">service</span> <span class="o">=</span> <span class="n">_servicemap</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">_service</span> <span class="o">:</span> <span class="n">_servicemap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">Rest</span><span class="o">.</span><span class="na">REST_HEADER_RESOURCE_NAME</span><span class="o">,</span> <span class="s">""</span><span class="o">));</span>
|
||||
@@ -572,7 +572,7 @@
|
||||
<span class="o">}</span>
|
||||
|
||||
<span class="nd">@AuthIgnore</span>
|
||||
<span class="nd">@WebMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">"/hello/delete/"</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"根据id删除Hello对象"</span><span class="o">)</span>
|
||||
<span class="nd">@HttpMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">"/hello/delete/"</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"根据id删除Hello对象"</span><span class="o">)</span>
|
||||
<span class="nd">@WebParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"#"</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="kt">int</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"Hello对象id"</span><span class="o">)</span>
|
||||
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">delete</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
|
||||
<span class="n">HelloService</span> <span class="n">service</span> <span class="o">=</span> <span class="n">_servicemap</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">_service</span> <span class="o">:</span> <span class="n">_servicemap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">Rest</span><span class="o">.</span><span class="na">REST_HEADER_RESOURCE_NAME</span><span class="o">,</span> <span class="s">""</span><span class="o">));</span>
|
||||
@@ -582,7 +582,7 @@
|
||||
<span class="o">}</span>
|
||||
|
||||
<span class="nd">@AuthIgnore</span>
|
||||
<span class="nd">@WebMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">"/hello/update"</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"修改Hello对象"</span><span class="o">)</span>
|
||||
<span class="nd">@HttpMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">"/hello/update"</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"修改Hello对象"</span><span class="o">)</span>
|
||||
<span class="nd">@WebParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"bean"</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="n">HelloEntity</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"Hello对象"</span><span class="o">)</span>
|
||||
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">update</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
|
||||
<span class="n">HelloService</span> <span class="n">service</span> <span class="o">=</span> <span class="n">_servicemap</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">_service</span> <span class="o">:</span> <span class="n">_servicemap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">Rest</span><span class="o">.</span><span class="na">REST_HEADER_RESOURCE_NAME</span><span class="o">,</span> <span class="s">""</span><span class="o">));</span>
|
||||
@@ -594,7 +594,7 @@
|
||||
<span class="o">}</span>
|
||||
|
||||
<span class="nd">@AuthIgnore</span>
|
||||
<span class="nd">@WebMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">"/hello/query"</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"查询Hello对象列表"</span><span class="o">)</span>
|
||||
<span class="nd">@HttpMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">"/hello/query"</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"查询Hello对象列表"</span><span class="o">)</span>
|
||||
<span class="nd">@WebParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"bean"</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="n">HelloBean</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"过滤条件"</span><span class="o">)</span>
|
||||
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">query</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
|
||||
<span class="n">HelloService</span> <span class="n">service</span> <span class="o">=</span> <span class="n">_servicemap</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">_service</span> <span class="o">:</span> <span class="n">_servicemap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">Rest</span><span class="o">.</span><span class="na">REST_HEADER_RESOURCE_NAME</span><span class="o">,</span> <span class="s">""</span><span class="o">));</span>
|
||||
@@ -609,7 +609,7 @@
|
||||
<span class="o">}</span>
|
||||
|
||||
<span class="nd">@AuthIgnore</span>
|
||||
<span class="nd">@WebMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">"/hello/find/"</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"根据id查找单个Hello对象"</span><span class="o">)</span>
|
||||
<span class="nd">@HttpMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">"/hello/find/"</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"根据id查找单个Hello对象"</span><span class="o">)</span>
|
||||
<span class="nd">@WebParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"#"</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="kt">int</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"Hello对象id"</span><span class="o">)</span>
|
||||
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">find</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
|
||||
<span class="n">HelloService</span> <span class="n">service</span> <span class="o">=</span> <span class="n">_servicemap</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">_service</span> <span class="o">:</span> <span class="n">_servicemap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">Rest</span><span class="o">.</span><span class="na">REST_HEADER_RESOURCE_NAME</span><span class="o">,</span> <span class="s">""</span><span class="o">));</span>
|
||||
@@ -619,12 +619,12 @@
|
||||
<span class="o">}</span>
|
||||
|
||||
<span class="nd">@AuthIgnore</span>
|
||||
<span class="nd">@WebMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">"/hello/asyncfind/"</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"根据id查找单个Hello对象"</span><span class="o">)</span>
|
||||
<span class="nd">@HttpMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">"/hello/asyncfind/"</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"根据id查找单个Hello对象"</span><span class="o">)</span>
|
||||
<span class="nd">@WebParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"#"</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="kt">int</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">"Hello对象id"</span><span class="o">)</span>
|
||||
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">asyncfind</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
|
||||
<span class="n">HelloService</span> <span class="n">service</span> <span class="o">=</span> <span class="n">_servicemap</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">_service</span> <span class="o">:</span> <span class="n">_servicemap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">Rest</span><span class="o">.</span><span class="na">REST_HEADER_RESOURCE_NAME</span><span class="o">,</span> <span class="s">""</span><span class="o">));</span>
|
||||
<span class="kt">int</span> <span class="n">id</span> <span class="o">=</span> <span class="n">Integer</span><span class="o">.</span><span class="na">parseInt</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getRequstURILastPath</span><span class="o">());</span>
|
||||
<span class="n">service</span><span class="o">.</span><span class="na">findHello</span><span class="o">(</span><span class="n">resp</span><span class="o">.</span><span class="na">createAsyncHandler</span><span class="o">(),</span> <span class="n">id</span><span class="o">);</span>
|
||||
<span class="n">resp</span><span class="o">.</span><span class="na">finishJson</span><span class="o">(</span><span class="n">service</span><span class="o">.</span><span class="na">findAsyncHello</span><span class="o">(</span><span class="n">id</span><span class="o">));</span>
|
||||
<span class="o">}</span>
|
||||
<span class="o">}</span>
|
||||
</pre></div>
|
||||
@@ -638,7 +638,7 @@
|
||||
<span class="k">if</span> <span class="o">(</span><span class="n">handler</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="n">handler</span><span class="o">.</span><span class="na">completed</span><span class="o">(</span><span class="kc">null</span><span class="o">,</span> <span class="n">values</span><span class="o">);</span>
|
||||
<span class="o">}</span></pre></div>
|
||||
<p>
|
||||
如上图DataSourceService的源码,当DataSource为本地实例时,异步接口(含<b>AsyncHandler</b>参数或返回类型为<b>CompletableFuture</b>)与同步接口执行流程相同。当DataSource为远程模式时,调用异步接口时,通信接口发到远程服务器时AsyncHandler参数的值传<b>null</b>,返回数据后再调用本地的AsyncHandler参数值执行。<br/>
|
||||
如上图源码,异步接口(含<b>AsyncHandler</b>参数或返回类型为<b>CompletableFuture</b>)与同步接口执行流程相同。当Service为远程模式时,调用异步接口时,通信接口发到远程服务器时AsyncHandler参数的值传<b>null</b>,返回数据后再调用本地的AsyncHandler参数值执行。<br/>
|
||||
异步调用方式是提高服务并发性的有效手段,特别是在远程模式Service比较多的情况下效果更明显。以HTTP服务为例,在Tomcat刚刚改版成NIO的时候,网上随处可见都是大谈NIO性能比BIO多好,认为BIO与NIO的不同,是BIO往往会引入多线程,每个连接一个单独的线程;NIO则是使用单线程或者只使用少量的多线程,每个连接共用一个线程。而事实上呢,通常还是通过增加线程数来提高并发量。为什么NIO作用不大呢, 因为一个HTTP动态请求耗时最多是业务逻辑层,特别是操作数据库,IO操作的耗时比重小得多,只有在静态资源请求这种纯IO操作才能体现NIO、AIO(NIO.2)的优势。举例一个简单的数据查询请求,采用BIO方式耗时(为了方便比较将所耗时间扩大几倍)如下: <br>
|
||||
1、服务器TCP连接开始到进入HttpServlet,耗时 10ms <br>
|
||||
2、用户态判断和参数验证, 耗时 10ms <br>
|
||||
|
||||
37
source.html
37
source.html
@@ -404,14 +404,19 @@
|
||||
<p> 以上是个简单的范例,用于用户模块存放sessionid。</p>
|
||||
|
||||
<h3><a id="source_confxml" href="#" aria-hidden="true"></a>persistence.xml 配置说明</h3>
|
||||
<div class="highlight"><pre><span></span><span class="c"><!-- 其配置算是标准的JPA配置文件的缩略版 --></span>
|
||||
<div class="highlight"><pre><span class="c"><!-- 其配置算是标准的JPA配置文件的缩略版 --></span>
|
||||
<span class="p"><</span><span class="nt">persistence</span><span class="p">></span>
|
||||
<span class="c"><!-- 系统基本库 --></span>
|
||||
<span class="p"><</span><span class="nt">persistence-unit</span> <span class="na">name</span><span class="o">=</span><span class="s">"demouser"</span><span class="p">></span>
|
||||
<span class="p"><</span><span class="nt">persistence-unit</span> <span class="na">name</span><span class="o">=</span><span class="s">"demouser"</span><span class="p">></span>
|
||||
<span class="c"><!-- 为NONE表示不启动缓存,@Cacheable 失效; 非NONE值(通常用ALL)表示开启缓存。 --></span>
|
||||
<span class="p"><</span><span class="nt">shared-cache-mode</span><span class="p">></span>NONE<span class="p"></</span><span class="nt">shared-cache-mode</span><span class="p">></span>
|
||||
<span class="p"><</span><span class="nt">properties</span><span class="p">></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.url"</span> <span class="na">value</span><span class="o">=</span><span class="s">"jdbc:mysql://127.0.0.1:3306/dbuser?characterEncoding=utf8"</span><span class="p">/></span>
|
||||
<span class="c"><!-- </span>
|
||||
<span class="c"> DataSource的实现类,没有设置默认为org.redkale.source.DataJdbcSource的实现,使用常规基于JDBC的数据库驱动一般无需设置</span>
|
||||
<span class="c"> --></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.datasource"</span> <span class="na">value</span><span class="o">=</span><span class="s">"org.redkale.source.DataJdbcSource"</span><span class="p">/></span>
|
||||
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.url"</span> <span class="na">value</span><span class="o">=</span><span class="s">"jdbc:mysql://127.0.0.1:3306/dbuser?characterEncoding=utf8"</span><span class="p">/></span>
|
||||
<span class="c"><!-- </span>
|
||||
<span class="c"> javax.persistence.jdbc.driver在JPA的值是JDBC驱动,Redkale有所不同,值应该是javax.sql.DataSource的子类。 </span>
|
||||
<span class="c"> 为了兼容用户习惯,Redkale内置常见JDBC驱动到javax.sql.DataSource的映射关系:</span>
|
||||
@@ -423,32 +428,32 @@
|
||||
<span class="c"> 因此 com.mysql.jdbc.Driver 会被自动转换成 com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource</span>
|
||||
<span class="c"> 并且如果JDBC驱动是以上几个版本,javax.persistence.jdbc.driver属性都可以省略,Redkale会根据javax.persistence.jdbc.url的值来识别驱动</span>
|
||||
<span class="c"> --></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.driver"</span> <span class="na">value</span><span class="o">=</span><span class="s">"com.mysql.jdbc.Driver"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.user"</span> <span class="na">value</span><span class="o">=</span><span class="s">"root"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.password"</span> <span class="na">value</span><span class="o">=</span><span class="s">"123456"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.driver"</span> <span class="na">value</span><span class="o">=</span><span class="s">"com.mysql.jdbc.Driver"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.user"</span> <span class="na">value</span><span class="o">=</span><span class="s">"root"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.password"</span> <span class="na">value</span><span class="o">=</span><span class="s">"123456"</span><span class="p">/></span>
|
||||
|
||||
<span class="c"><!-- 最大连接数,默认值:CPU数*16 --></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.connections.limit"</span> <span class="na">value</span><span class="o">=</span><span class="s">"32"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.connections.limit"</span> <span class="na">value</span><span class="o">=</span><span class="s">"32"</span><span class="p">/></span>
|
||||
|
||||
<span class="c"><!-- 包含的SQL模板,相当于反向LIKE,不同的JDBC驱动的SQL语句不一样,Redkale内置了MySQL的语句 --></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.contain.sqltemplate"</span> <span class="na">value</span><span class="o">=</span><span class="s">"LOCATE(${keystr}, ${column}) > 0"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.notcontain.sqltemplate"</span> <span class="na">value</span><span class="o">=</span><span class="s">"LOCATE(${keystr}, ${column}) = 0"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.contain.sqltemplate"</span> <span class="na">value</span><span class="o">=</span><span class="s">"LOCATE(${keystr}, ${column}) > 0"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.notcontain.sqltemplate"</span> <span class="na">value</span><span class="o">=</span><span class="s">"LOCATE(${keystr}, ${column}) = 0"</span><span class="p">/></span>
|
||||
|
||||
<span class="c"><!-- 复制表结构的SQL模板,Redkale内置了MySQL的语句 --></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.tablenotexist.sqlstates"</span> <span class="na">value</span><span class="o">=</span><span class="s">"42000;42S02"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.tablecopy.sqltemplate"</span> <span class="na">value</span><span class="o">=</span><span class="s">"CREATE TABLE ${newtable} LIKE ${oldtable}"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.tablenotexist.sqlstates"</span> <span class="na">value</span><span class="o">=</span><span class="s">"42000;42S02"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.tablecopy.sqltemplate"</span> <span class="na">value</span><span class="o">=</span><span class="s">"CREATE TABLE ${newtable} LIKE ${oldtable}"</span><span class="p">/></span>
|
||||
|
||||
<span class="p"></</span><span class="nt">properties</span><span class="p">></span>
|
||||
<span class="p"></</span><span class="nt">persistence-unit</span><span class="p">></span>
|
||||
<span class="c"><!-- IM消息库 --></span>
|
||||
<span class="p"><</span><span class="nt">persistence-unit</span> <span class="na">name</span><span class="o">=</span><span class="s">"demoim"</span><span class="p">></span>
|
||||
<span class="p"><</span><span class="nt">persistence-unit</span> <span class="na">name</span><span class="o">=</span><span class="s">"demoim"</span><span class="p">></span>
|
||||
<span class="p"><</span><span class="nt">shared-cache-mode</span><span class="p">></span>NONE<span class="p"></</span><span class="nt">shared-cache-mode</span><span class="p">></span>
|
||||
<span class="p"><</span><span class="nt">properties</span><span class="p">></span>
|
||||
<span class="c"><!-- jdbc:mysql://127.0.0.1:3306/dbim?autoReconnect=true&amp;autoReconnectForPools=true&amp;characterEncoding=utf8 --></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.url"</span> <span class="na">value</span><span class="o">=</span><span class="s">"jdbc:mysql://127.0.0.1:3306/dbim?characterEncoding=utf8"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.driver"</span> <span class="na">value</span><span class="o">=</span><span class="s">"com.mysql.jdbc.Driver"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.user"</span> <span class="na">value</span><span class="o">=</span><span class="s">"root"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.password"</span> <span class="na">value</span><span class="o">=</span><span class="s">"123456"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.url"</span> <span class="na">value</span><span class="o">=</span><span class="s">"jdbc:mysql://127.0.0.1:3306/dbim?characterEncoding=utf8"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.driver"</span> <span class="na">value</span><span class="o">=</span><span class="s">"com.mysql.jdbc.Driver"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.user"</span> <span class="na">value</span><span class="o">=</span><span class="s">"root"</span><span class="p">/></span>
|
||||
<span class="p"><</span><span class="nt">property</span> <span class="na">name</span><span class="o">=</span><span class="s">"javax.persistence.jdbc.password"</span> <span class="na">value</span><span class="o">=</span><span class="s">"123456"</span><span class="p">/></span>
|
||||
<span class="p"></</span><span class="nt">properties</span><span class="p">></span>
|
||||
<span class="p"></</span><span class="nt">persistence-unit</span><span class="p">></span>
|
||||
<span class="p"></</span><span class="nt">persistence</span><span class="p">></span>
|
||||
|
||||
Reference in New Issue
Block a user