This commit is contained in:
180
source.html
180
source.html
@@ -35,9 +35,8 @@
|
||||
2、简化分表分库操作。 <br/>
|
||||
3、通过watch组件动态更改数据库连接参数。 <br/>
|
||||
4、读写分离的简易配置。 <br/>
|
||||
5、进程间的缓存同步。 <br/>
|
||||
6、提供异步接口。 <br/>
|
||||
数据库操作方面常见的是过滤查询操作,JPA规范中的JPQL虽然简化了SQL,但是对于动态产生的过滤条件,开发人员还是无法免去组装过滤条件的过程(无论JPQL还是CriteriaQuery), DataSource定义了FilterBean接口可以省略组装条件的过程,FilterNode提供了类似CriteriaQuery的功能,且这两种对象都可以序列化,给<a href="service.html#service_remote" target="_blank">远程模式Service</a>提供了基础,微服务架构提倡服务之间尽量降低耦合,因此DataSource仅支持简单的关联查询,复杂的表关联查询或统计应放在数据分析系统中。一个服务通常部署多个进程,若用JPA的缓存则进程之间的缓存无法同步,而DataSource采用SNCP协议即可方便地达到自动同步缓存功能。JPA无法在主数据库异常时动态切换到备份数据库,<a href="#source_confxml">persistence.xml</a>文件更改后已运行中的进程不会自动切换,需要开启watch组件通过watch动态更改正在运行进程中的配置。<br/>
|
||||
5、提供异步接口。 <br/>
|
||||
数据库操作方面常见的是过滤查询操作,JPA规范中的JPQL虽然简化了SQL,但是对于动态产生的过滤条件,开发人员还是无法免去组装过滤条件的过程(无论JPQL还是CriteriaQuery), DataSource定义了FilterBean接口可以省略组装条件的过程,FilterNode提供了类似CriteriaQuery的功能,且这两种对象都可以序列化,给<a href="service.html#service_remote" target="_blank">远程模式Service</a>提供了基础,微服务架构提倡服务之间尽量降低耦合,因此DataSource仅支持简单的关联查询,复杂的表关联查询或统计应放在数据分析系统中。一个服务通常部署多个进程,若用JPA的缓存则进程之间的缓存无法同步,而DataSource采用SNCP协议即可方便地达到自动同步缓存功能。JPA无法在主数据库异常时动态切换到备份数据库,<a href="#source_confproperties">source.properties</a>文件更改后已运行中的进程不会自动切换,需要开启watch组件通过watch动态更改正在运行进程中的配置。<br/>
|
||||
为了降低学习成本,DataSource重用了JPA里的部分注解与配置文件,使用方法基本相同,与JPA用法的区别是注解只能标记于字段,不能标记在方法上。
|
||||
</p>
|
||||
<table style="margin: auto;">
|
||||
@@ -75,7 +74,7 @@
|
||||
<p>
|
||||
以上接口除了directXXX,其他都有等同的异步接口。insert、delete、update接口与JPA同名接口用法一样。DataSource提供了丰富的查询接口,且有独特的翻页查询功能。每以系列的方法主要重载三类: 单个字段过滤、FilterBean过滤和FilterNode过滤。<br/>
|
||||
<b>返回类型为CompletableFuture的接口均为异步接口</b>。<br/>
|
||||
开发者可以借鉴 <a href="https://github.com/redkale/redkale-demo" target="_blank">Redkale-demo</a> 中的 <a href="https://github.com/redkale/redkale-demo/blob/master/src/org/redkale/demo/base/AutoClassCreator.java" target="_blank"> AutoClassCreator</a>的代码根据数据表自动生成Entity代码。
|
||||
开发者可以借鉴 <a href="https://github.com/redkale/redkale-demo" target="_blank">Redkale-demo</a> 中的 <a href="https://github.com/redkale/redkale-demo/blob/master/src/main/java/org/redkale/demo/base/AutoClassCreator.java" target="_blank"> AutoClassCreator</a>的代码根据数据表自动生成Entity代码。
|
||||
</p>
|
||||
<p> <b>过滤条件</b></p>
|
||||
<p> FilterBean、FilterNode对象用于构造过滤条件。FilterBean可以转化为FilterNode。FilterBean主要用于接收外界构建的过滤条件,而FilterNode为了构建内部的过滤条件且降低过滤条件变化的耦合性,FilterNode中name值以#开头的视为虚拟字段,不会构建成过滤条件,仅供分布分库的DistributeTableStrategy策略使用。</p>
|
||||
@@ -84,13 +83,13 @@
|
||||
<span class="kd">private</span> <span class="kt">int</span> <span class="n">userid</span><span class="o">;</span>
|
||||
|
||||
<span class="nd">@FilterColumn</span><span class="o">(</span><span class="n">express</span> <span class="o">=</span> <span class="n">FilterExpress</span><span class="o">.</span><span class="na">LIKE</span><span class="o">)</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">username</span><span class="o">;</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">userName</span><span class="o">;</span>
|
||||
|
||||
<span class="kd">private</span> <span class="n">Range</span> <span class="n">age</span><span class="o">;</span>
|
||||
|
||||
<span class="kd">public</span> <span class="nf">UserBean</span><span class="o">(</span><span class="kt">int</span> <span class="n">userid</span><span class="o">,</span> <span class="n">String</span> <span class="n">username</span><span class="o">,</span> <span class="n">Range</span> <span class="n">age</span><span class="o">)</span> <span class="o">{</span>
|
||||
<span class="kd">public</span> <span class="nf">UserBean</span><span class="o">(</span><span class="kt">int</span> <span class="n">userid</span><span class="o">,</span> <span class="n">String</span> <span class="n">userName</span><span class="o">,</span> <span class="n">Range</span> <span class="n">age</span><span class="o">)</span> <span class="o">{</span>
|
||||
<span class="k">this</span><span class="o">.</span><span class="na">userid</span> <span class="o">=</span> <span class="n">userid</span><span class="o">;</span>
|
||||
<span class="k">this</span><span class="o">.</span><span class="na">username</span> <span class="o">=</span> <span class="n">username</span><span class="o">;</span>
|
||||
<span class="k">this</span><span class="o">.</span><span class="na">userName</span> <span class="o">=</span> <span class="n">userName</span><span class="o">;</span>
|
||||
<span class="k">this</span><span class="o">.</span><span class="na">age</span> <span class="o">=</span> <span class="n">age</span><span class="o">;</span>
|
||||
<span class="o">}</span>
|
||||
|
||||
@@ -101,11 +100,11 @@
|
||||
|
||||
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">200001</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">,</span> <span class="k">new</span> <span class="nf">IntRange</span><span class="o">(</span><span class="mi">14</span><span class="o">,</span> <span class="mi">36</span><span class="o">))</span> <span class="o">等价于</span>
|
||||
<span class="n">FilterNode</span><span class="o">.</span><span class="na">create</span><span class="o">(</span><span class="s">"userid"</span><span class="o">,</span> <span class="mi">200001</span><span class="o">).</span><span class="na">and</span><span class="o">(</span><span class="s">"username"</span><span class="o">,</span> <span class="n">FilterExpress</span><span class="o">.</span><span class="na">LIKE</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">).</span><span class="na">and</span><span class="o">(</span><span class="s">"age"</span><span class="o">,</span> <span class="k">new</span> <span class="n">Range</span><span class="o">.</span><span class="na">IntRange</span><span class="o">(</span><span class="mi">14</span><span class="o">,</span> <span class="mi">36</span><span class="o">))</span>
|
||||
<span class="n">FilterNode</span><span class="o">.</span><span class="na">create</span><span class="o">(</span><span class="s">"userid"</span><span class="o">,</span> <span class="mi">200001</span><span class="o">).</span><span class="na">and</span><span class="o">(</span><span class="s">"userName"</span><span class="o">,</span> <span class="n">FilterExpress</span><span class="o">.</span><span class="na">LIKE</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">).</span><span class="na">and</span><span class="o">(</span><span class="s">"age"</span><span class="o">,</span> <span class="k">new</span> <span class="n">Range</span><span class="o">.</span><span class="na">IntRange</span><span class="o">(</span><span class="mi">14</span><span class="o">,</span> <span class="mi">36</span><span class="o">))</span>
|
||||
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">200001</span><span class="o">,</span><span class="s">"redkale"</span><span class="o">,</span><span class="k">new</span> <span class="nf">IntRange</span><span class="o">(</span><span class="mi">14</span><span class="o">,</span><span class="mi">36</span><span class="o">))</span> <span class="o">等价于</span> <span class="s">"WHERE userid=200001 AND username LIKE '%redkale%' AND age BETWEEN 14 AND 36"</span>
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">200001</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">,</span> <span class="kc">null</span><span class="o">)</span> <span class="o">等价于</span> <span class="s">"WHERE userid = 200001 AND username LIKE '%redkale%'"</span>
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">,</span> <span class="kc">null</span><span class="o">)</span> <span class="o">等价于</span> <span class="s">"WHERE username LIKE '%redkale%'"</span>
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">200001</span><span class="o">,</span><span class="s">"redkale"</span><span class="o">,</span><span class="k">new</span> <span class="nf">IntRange</span><span class="o">(</span><span class="mi">14</span><span class="o">,</span><span class="mi">36</span><span class="o">))</span> <span class="o">等价于</span> <span class="s">"WHERE userid=200001 AND userName LIKE '%redkale%' AND age BETWEEN 14 AND 36"</span>
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">200001</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">,</span> <span class="kc">null</span><span class="o">)</span> <span class="o">等价于</span> <span class="s">"WHERE userid = 200001 AND userName LIKE '%redkale%'"</span>
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">,</span> <span class="kc">null</span><span class="o">)</span> <span class="o">等价于</span> <span class="s">"WHERE userName LIKE '%redkale%'"</span>
|
||||
|
||||
</pre></div>
|
||||
<p> 如上定义UserBean过滤条件,当非数值类字段值为null、字符串值为空、数值类字段值小于@FilterColumn.least()值(least的默认值为1)都不会构建成过滤条件。@FilterColumn.express根据字段的类型有不同的默认值,若字段类型为Collection子类或数组则express默认为FilterExpress.IN;若字段类型为Range的子类则express默认为FilterExpress.BETWEEN;其他类型则express默认为FilterExpress.EQUAL。默认字段之间是AND关系,若想使用OR关系则需要使用@FilterGroup进行标记:</p>
|
||||
@@ -115,14 +114,14 @@
|
||||
|
||||
<span class="nd">@FilterGroup</span><span class="o">(</span><span class="s">"[OR]a"</span><span class="o">)</span>
|
||||
<span class="nd">@FilterColumn</span><span class="o">(</span><span class="n">express</span> <span class="o">=</span> <span class="n">FilterExpress</span><span class="o">.</span><span class="na">LIKE</span><span class="o">)</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">username</span><span class="o">;</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">userName</span><span class="o">;</span>
|
||||
|
||||
<span class="nd">@FilterGroup</span><span class="o">(</span><span class="s">"[OR]a"</span><span class="o">)</span>
|
||||
<span class="kd">private</span> <span class="n">Range</span> <span class="n">age</span><span class="o">;</span>
|
||||
|
||||
<span class="kd">public</span> <span class="nf">UserBean</span><span class="o">(</span><span class="kt">int</span> <span class="n">userid</span><span class="o">,</span> <span class="n">String</span> <span class="n">username</span><span class="o">,</span> <span class="n">Range</span> <span class="n">age</span><span class="o">)</span> <span class="o">{</span>
|
||||
<span class="kd">public</span> <span class="nf">UserBean</span><span class="o">(</span><span class="kt">int</span> <span class="n">userid</span><span class="o">,</span> <span class="n">String</span> <span class="n">userName</span><span class="o">,</span> <span class="n">Range</span> <span class="n">age</span><span class="o">)</span> <span class="o">{</span>
|
||||
<span class="k">this</span><span class="o">.</span><span class="na">userid</span> <span class="o">=</span> <span class="n">userid</span><span class="o">;</span>
|
||||
<span class="k">this</span><span class="o">.</span><span class="na">username</span> <span class="o">=</span> <span class="n">username</span><span class="o">;</span>
|
||||
<span class="k">this</span><span class="o">.</span><span class="na">userName</span> <span class="o">=</span> <span class="n">userName</span><span class="o">;</span>
|
||||
<span class="k">this</span><span class="o">.</span><span class="na">age</span> <span class="o">=</span> <span class="n">age</span><span class="o">;</span>
|
||||
<span class="o">}</span>
|
||||
|
||||
@@ -133,16 +132,16 @@
|
||||
|
||||
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">200001</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">,</span> <span class="k">new</span> <span class="nf">IntRange</span><span class="o">(</span><span class="mi">14</span><span class="o">,</span> <span class="mi">36</span><span class="o">))</span> <span class="o">等价于</span>
|
||||
<span class="n">FilterNode</span> <span class="n">orNode</span> <span class="o">=</span> <span class="n">FilterNode</span><span class="o">.</span><span class="na">create</span><span class="o">(</span><span class="s">"username"</span> <span class="o">,</span> <span class="n">FilterExpress</span><span class="o">.</span><span class="na">LIKE</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">).</span><span class="na">or</span><span class="o">(</span><span class="s">"age"</span><span class="o">,</span> <span class="k">new</span> <span class="n">Range</span><span class="o">.</span><span class="na">IntRange</span><span class="o">(</span><span class="mi">14</span><span class="o">,</span> <span class="mi">36</span><span class="o">));</span>
|
||||
<span class="n">FilterNode</span> <span class="n">orNode</span> <span class="o">=</span> <span class="n">FilterNode</span><span class="o">.</span><span class="na">create</span><span class="o">(</span><span class="s">"userName"</span> <span class="o">,</span> <span class="n">FilterExpress</span><span class="o">.</span><span class="na">LIKE</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">).</span><span class="na">or</span><span class="o">(</span><span class="s">"age"</span><span class="o">,</span> <span class="k">new</span> <span class="n">Range</span><span class="o">.</span><span class="na">IntRange</span><span class="o">(</span><span class="mi">14</span><span class="o">,</span> <span class="mi">36</span><span class="o">));</span>
|
||||
<span class="n">FilterNode</span> <span class="n">node</span> <span class="o">=</span> <span class="n">FilterNode</span><span class="o">.</span><span class="na">create</span><span class="o">(</span><span class="s">"userid"</span><span class="o">,</span> <span class="mi">200001</span><span class="o">).</span><span class="na">and</span><span class="o">(</span><span class="n">orNode</span><span class="o">);</span>
|
||||
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">200001</span><span class="o">,</span><span class="s">"redkale"</span><span class="o">,</span><span class="k">new</span> <span class="nf">IntRange</span><span class="o">(</span><span class="mi">14</span><span class="o">,</span><span class="mi">36</span><span class="o">))</span> <span class="o">等价于</span> <span class="s">"WHERE userid=200001 AND (username LIKE '%redkale%' OR age BETWEEN 14 AND 36)"</span>
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">200001</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">,</span> <span class="kc">null</span><span class="o">)</span> <span class="o">等价于</span> <span class="s">"WHERE userid = 200001 AND username LIKE '%redkale%'"</span>
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">,</span> <span class="kc">null</span><span class="o">)</span> <span class="o">等价于</span> <span class="s">"WHERE username LIKE '%redkale%'"</span>
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">200001</span><span class="o">,</span><span class="s">"redkale"</span><span class="o">,</span><span class="k">new</span> <span class="nf">IntRange</span><span class="o">(</span><span class="mi">14</span><span class="o">,</span><span class="mi">36</span><span class="o">))</span> <span class="o">等价于</span> <span class="s">"WHERE userid=200001 AND (userName LIKE '%redkale%' OR age BETWEEN 14 AND 36)"</span>
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">200001</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">,</span> <span class="kc">null</span><span class="o">)</span> <span class="o">等价于</span> <span class="s">"WHERE userid = 200001 AND userName LIKE '%redkale%'"</span>
|
||||
<span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">,</span> <span class="kc">null</span><span class="o">)</span> <span class="o">等价于</span> <span class="s">"WHERE userName LIKE '%redkale%'"</span>
|
||||
|
||||
|
||||
<span class="n">source</span><span class="o">.</span><span class="na">getNumberResult</span><span class="o">(</span><span class="n">User</span><span class="o">.</span><span class="k">class</span><span class="o">,</span> <span class="n">FilterFunc</span><span class="o">.</span><span class="na">COUNT</span><span class="o">,</span> <span class="kc">null</span><span class="o">,</span> <span class="k">new</span> <span class="nf">UserBean</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="s">"redkale"</span><span class="o">,</span> <span class="k">new</span> <span class="nf">IntRange</span><span class="o">(</span><span class="mi">14</span><span class="o">,</span> <span class="mi">36</span><span class="o">))).</span><span class="na">intValue</span><span class="o">()</span> <span class="o">等价于</span>
|
||||
<span class="s">"SELECT COUNT(*) FROM user WHERE username LIKE '%redkale%' AND age BETWEEN 14 AND 36"</span>
|
||||
<span class="s">"SELECT COUNT(*) FROM user WHERE userName LIKE '%redkale%' AND age BETWEEN 14 AND 36"</span>
|
||||
</pre></div>
|
||||
<p> 如上@FilterGroup 的value 必须是[OR]或者[AND]开头,没有标记@FilterGroup的字段等价于标记了@FilterGroup(value = "[AND]")。[AND]、[OR]后面的字符串为GROUP_NAME,默认的GROUP_NAME为空字符串。如上"[OR]a"可以直接使用"[OR]",有多个[OR]或者[AND]则需要加上不同的NAME。</p>
|
||||
|
||||
@@ -187,7 +186,7 @@
|
||||
<span class="o">}</span>
|
||||
</pre></div>
|
||||
|
||||
<p> DistributeTableStrategy分表策略需要实现三个接口,模板表由实体类的@Table注解提供。Redkale默认实现的MySQL数据库的拷贝表结构语句,其他数据库类型需要通过指定<a href="#source_confxml">persistence.xml</a> 中的 <b>javax.persistence.tablenotexist.sqlstates</b> 与 <b>javax.persistence.tablecopy.sqltemplate</b> 来配置。</p>
|
||||
<p> DistributeTableStrategy分表策略需要实现三个接口,模板表由实体类的@Table注解提供。Redkale默认实现的MySQL数据库的拷贝表结构语句,其他数据库类型需要通过指定<a href="#source_confproperties">source.properties</a> 中的 <b>tablenotexist-sqlstates</b> 与 <b>tablecopy-sqltemplate</b> 来配置。</p>
|
||||
<div class="highlight"><pre><span></span><span class="nd">@DistributeTable</span><span class="o">(</span><span class="n">strategy</span> <span class="o">=</span> <span class="n">LoginRecord</span><span class="o">.</span><span class="na">TableStrategy</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
|
||||
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">LoginRecord</span> <span class="kd">extends</span> <span class="n">BaseEntity</span> <span class="o">{</span>
|
||||
|
||||
@@ -199,22 +198,22 @@
|
||||
<span class="kd">private</span> <span class="kt">long</span> <span class="n">userid</span><span class="o">;</span> <span class="c1">//C端用户ID</span>
|
||||
|
||||
<span class="nd">@Column</span><span class="o">(</span><span class="n">updatable</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">"登录网络类型; wifi/4g/3g"</span><span class="o">)</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">netmode</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//登录网络类型; wifi/4g/3g</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">netMode</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//登录网络类型; wifi/4g/3g</span>
|
||||
|
||||
<span class="nd">@Column</span><span class="o">(</span><span class="n">updatable</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">"APP版本信息"</span><span class="o">)</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">appversion</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//APP版本信息</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">appVersion</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//APP版本信息</span>
|
||||
|
||||
<span class="nd">@Column</span><span class="o">(</span><span class="n">updatable</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">"APP操作系统信息"</span><span class="o">)</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">appos</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//APP操作系统信息</span>
|
||||
|
||||
<span class="nd">@Column</span><span class="o">(</span><span class="n">updatable</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">"登录时客户端信息"</span><span class="o">)</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">loginagent</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//登录时客户端信息</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">loginAgent</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//登录时客户端信息</span>
|
||||
|
||||
<span class="nd">@Column</span><span class="o">(</span><span class="n">updatable</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">"登录时的IP"</span><span class="o">)</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">loginaddr</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//登录时的IP</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">loginAddr</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//登录时的IP</span>
|
||||
|
||||
<span class="nd">@Column</span><span class="o">(</span><span class="n">updatable</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">"创建时间"</span><span class="o">)</span>
|
||||
<span class="kd">private</span> <span class="kt">long</span> <span class="n">createtime</span><span class="o">;</span> <span class="c1">//创建时间</span>
|
||||
<span class="kd">private</span> <span class="kt">long</span> <span class="n">createTime</span><span class="o">;</span> <span class="c1">//创建时间</span>
|
||||
|
||||
<span class="cm">/** 以下省略getter setter方法 */</span>
|
||||
|
||||
@@ -223,7 +222,7 @@
|
||||
<span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Throwable</span> <span class="o">{</span>
|
||||
<span class="n">LoginRecord</span> <span class="n">record</span> <span class="o">=</span> <span class="k">new</span> <span class="n">LoginRecord</span><span class="o">();</span>
|
||||
<span class="kt">long</span> <span class="n">now</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="n">record</span><span class="o">.</span><span class="na">setCreatetime</span><span class="o">(</span><span class="n">now</span><span class="o">);</span> <span class="c1">//设置创建时间</span>
|
||||
<span class="n">record</span><span class="o">.</span><span class="na">setCreateTime</span><span class="o">(</span><span class="n">now</span><span class="o">);</span> <span class="c1">//设置创建时间</span>
|
||||
<span class="n">record</span><span class="o">.</span><span class="na">setLoginid</span><span class="o">(</span><span class="n">Utility</span><span class="o">.</span><span class="na">format36time</span><span class="o">(</span><span class="n">now</span><span class="o">)</span> <span class="o">+</span> <span class="s">"-"</span> <span class="o">+</span> <span class="n">Utility</span><span class="o">.</span><span class="na">uuid</span><span class="o">());</span> <span class="c1">//主键的生成规则</span>
|
||||
<span class="c1">//.... 填充其他字段</span>
|
||||
<span class="n">source</span><span class="o">.</span><span class="na">insert</span><span class="o">(</span><span class="n">record</span><span class="o">);</span>
|
||||
@@ -241,14 +240,14 @@
|
||||
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getTable</span><span class="o">(</span><span class="n">String</span> <span class="n">table</span><span class="o">,</span> <span class="n">FilterNode</span> <span class="n">node</span><span class="o">)</span> <span class="o">{</span>
|
||||
<span class="n">Serializable</span> <span class="n">day</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="na">findValue</span><span class="o">(</span><span class="s">"#day"</span><span class="o">);</span> <span class="c1">//LoginRecord没有day字段,所以前面要加#,表示虚拟字段, 值为yyyyMMdd格式</span>
|
||||
<span class="k">if</span> <span class="o">(</span><span class="n">day</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="n">getTable</span><span class="o">(</span><span class="n">table</span><span class="o">,</span> <span class="o">(</span><span class="n">Integer</span><span class="o">)</span> <span class="n">day</span><span class="o">,</span> <span class="mi">0</span><span class="n">L</span><span class="o">);</span> <span class="c1">//存在#day参数则直接使用day值</span>
|
||||
<span class="n">Serializable</span> <span class="n">time</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="na">findValue</span><span class="o">(</span><span class="s">"createtime"</span><span class="o">);</span> <span class="c1">//存在createtime则使用最小时间,且createtime的范围必须在一天内,因为本表以天为单位建表</span>
|
||||
<span class="n">Serializable</span> <span class="n">time</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="na">findValue</span><span class="o">(</span><span class="s">"createTime"</span><span class="o">);</span> <span class="c1">//存在createTime则使用最小时间,且createTime的范围必须在一天内,因为本表以天为单位建表</span>
|
||||
<span class="k">return</span> <span class="n">getTable</span><span class="o">(</span><span class="n">table</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="o">(</span><span class="n">time</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="mi">0</span><span class="n">L</span> <span class="o">:</span> <span class="o">(</span><span class="n">time</span> <span class="k">instanceof</span> <span class="n">Range</span> <span class="o">?</span> <span class="o">((</span><span class="n">Range</span><span class="o">.</span><span class="na">LongRange</span><span class="o">)</span> <span class="n">time</span><span class="o">).</span><span class="na">getMin</span><span class="o">()</span> <span class="o">:</span> <span class="o">(</span><span class="n">Long</span><span class="o">)</span> <span class="n">time</span><span class="o">)));</span>
|
||||
<span class="o">}</span>
|
||||
|
||||
<span class="c1">//创建或单个查询时调用本方法</span>
|
||||
<span class="nd">@Override</span>
|
||||
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getTable</span><span class="o">(</span><span class="n">String</span> <span class="n">table</span><span class="o">,</span> <span class="n">LoginRecord</span> <span class="n">bean</span><span class="o">)</span> <span class="o">{</span>
|
||||
<span class="k">return</span> <span class="n">getTable</span><span class="o">(</span><span class="n">table</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="n">bean</span><span class="o">.</span><span class="na">getCreatetime</span><span class="o">());</span>
|
||||
<span class="k">return</span> <span class="n">getTable</span><span class="o">(</span><span class="n">table</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="n">bean</span><span class="o">.</span><span class="na">getCreateTime</span><span class="o">());</span>
|
||||
<span class="o">}</span>
|
||||
|
||||
<span class="c1">//根据主键ID查询单个记录时调用本方法</span>
|
||||
@@ -258,10 +257,10 @@
|
||||
<span class="k">return</span> <span class="n">getTable</span><span class="o">(</span><span class="n">table</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="n">Long</span><span class="o">.</span><span class="na">parseLong</span><span class="o">(</span><span class="n">id</span><span class="o">.</span><span class="na">substring</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="mi">9</span><span class="o">),</span> <span class="mi">36</span><span class="o">));</span>
|
||||
<span class="o">}</span>
|
||||
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="nf">getTable</span><span class="o">(</span><span class="n">String</span> <span class="n">table</span><span class="o">,</span> <span class="kt">int</span> <span class="n">day</span><span class="o">,</span> <span class="kt">long</span> <span class="n">createtime</span><span class="o">)</span> <span class="o">{</span> <span class="c1">//day为0或yyyyMMdd格式数据</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="nf">getTable</span><span class="o">(</span><span class="n">String</span> <span class="n">table</span><span class="o">,</span> <span class="kt">int</span> <span class="n">day</span><span class="o">,</span> <span class="kt">long</span> <span class="n">createTime</span><span class="o">)</span> <span class="o">{</span> <span class="c1">//day为0或yyyyMMdd格式数据</span>
|
||||
<span class="kt">int</span> <span class="n">pos</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="na">indexOf</span><span class="o">(</span><span class="sc">'.'</span><span class="o">);</span>
|
||||
<span class="n">String</span> <span class="n">year</span> <span class="o">=</span> <span class="n">day</span> <span class="o">></span> <span class="mi">0</span> <span class="o">?</span> <span class="n">String</span><span class="o">.</span><span class="na">valueOf</span><span class="o">(</span><span class="n">day</span> <span class="o">/</span> <span class="mi">10000</span><span class="o">)</span> <span class="o">:</span> <span class="n">String</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="n">yearformat</span><span class="o">,</span> <span class="n">createtime</span><span class="o">);</span> <span class="c1">//没有day取createtime</span>
|
||||
<span class="k">return</span> <span class="s">"platf_login_"</span> <span class="o">+</span> <span class="n">year</span> <span class="o">+</span> <span class="s">"."</span> <span class="o">+</span> <span class="n">table</span><span class="o">.</span><span class="na">substring</span><span class="o">(</span><span class="n">pos</span> <span class="o">+</span> <span class="mi">1</span><span class="o">)</span> <span class="o">+</span> <span class="s">"_"</span> <span class="o">+</span> <span class="o">(</span><span class="n">day</span> <span class="o">></span> <span class="mi">0</span> <span class="o">?</span> <span class="n">day</span> <span class="o">:</span> <span class="n">String</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="n">dayformat</span><span class="o">,</span> <span class="n">createtime</span><span class="o">));</span>
|
||||
<span class="n">String</span> <span class="n">year</span> <span class="o">=</span> <span class="n">day</span> <span class="o">></span> <span class="mi">0</span> <span class="o">?</span> <span class="n">String</span><span class="o">.</span><span class="na">valueOf</span><span class="o">(</span><span class="n">day</span> <span class="o">/</span> <span class="mi">10000</span><span class="o">)</span> <span class="o">:</span> <span class="n">String</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="n">yearformat</span><span class="o">,</span> <span class="n">createTime</span><span class="o">);</span> <span class="c1">//没有day取createTime</span>
|
||||
<span class="k">return</span> <span class="s">"platf_login_"</span> <span class="o">+</span> <span class="n">year</span> <span class="o">+</span> <span class="s">"."</span> <span class="o">+</span> <span class="n">table</span><span class="o">.</span><span class="na">substring</span><span class="o">(</span><span class="n">pos</span> <span class="o">+</span> <span class="mi">1</span><span class="o">)</span> <span class="o">+</span> <span class="s">"_"</span> <span class="o">+</span> <span class="o">(</span><span class="n">day</span> <span class="o">></span> <span class="mi">0</span> <span class="o">?</span> <span class="n">day</span> <span class="o">:</span> <span class="n">String</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="n">dayformat</span><span class="o">,</span> <span class="n">createTime</span><span class="o">));</span>
|
||||
<span class="o">}</span>
|
||||
<span class="o">}</span>
|
||||
<span class="o">}</span>
|
||||
@@ -281,7 +280,7 @@
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">loginid</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//LoginRecord主键</span>
|
||||
|
||||
<span class="nd">@Column</span><span class="o">(</span><span class="n">updatable</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">"创建时间"</span><span class="o">)</span>
|
||||
<span class="kd">private</span> <span class="kt">long</span> <span class="n">createtime</span><span class="o">;</span> <span class="c1">//创建时间</span>
|
||||
<span class="kd">private</span> <span class="kt">long</span> <span class="n">createTime</span><span class="o">;</span> <span class="c1">//创建时间</span>
|
||||
|
||||
<span class="cm">/** 以下省略getter setter方法 */</span>
|
||||
|
||||
@@ -321,7 +320,7 @@
|
||||
<span class="kd">private</span> <span class="kt">long</span> <span class="n">userid</span><span class="o">;</span> <span class="c1">//用户ID</span>
|
||||
|
||||
<span class="nd">@Column</span><span class="o">(</span><span class="n">length</span> <span class="o">=</span> <span class="mi">64</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">private</span> <span class="n">String</span> <span class="n">username</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//用户昵称</span>
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">userName</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//用户昵称</span>
|
||||
|
||||
<span class="nd">@Column</span><span class="o">(</span><span class="n">length</span> <span class="o">=</span> <span class="mi">32</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">private</span> <span class="n">String</span> <span class="n">mobile</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//手机号码</span>
|
||||
@@ -334,7 +333,7 @@
|
||||
<span class="kd">private</span> <span class="n">String</span> <span class="n">remark</span> <span class="o">=</span> <span class="s">""</span><span class="o">;</span> <span class="c1">//备注</span>
|
||||
|
||||
<span class="nd">@Column</span><span class="o">(</span><span class="n">updatable</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">"创建时间"</span><span class="o">)</span>
|
||||
<span class="kd">private</span> <span class="kt">long</span> <span class="n">createtime</span><span class="o">;</span> <span class="c1">//创建时间</span>
|
||||
<span class="kd">private</span> <span class="kt">long</span> <span class="n">createTime</span><span class="o">;</span> <span class="c1">//创建时间</span>
|
||||
|
||||
<span class="cm">/** 以下省略getter setter方法 */</span>
|
||||
|
||||
@@ -376,21 +375,21 @@
|
||||
|
||||
<span class="c1">//使用CacheSource必须要指明泛型</span>
|
||||
<span class="nd">@Resource</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"usersessions"</span><span class="o">)</span>
|
||||
<span class="kd">protected</span> <span class="n">CacheSource</span><span class="o"><</span><span class="n">Integer</span><span class="o">></span> <span class="n">sessions</span><span class="o">;</span>
|
||||
<span class="kd">protected</span> <span class="n">CacheSource</span> <span class="n">sessions</span><span class="o">;</span>
|
||||
|
||||
<span class="c1">//登录</span>
|
||||
<span class="kd">public</span> <span class="n">RetResult</span><span class="o"><</span><span class="n">UserInfo</span><span class="o">></span> <span class="nf">login</span><span class="o">(</span><span class="n">LoginBean</span> <span class="n">bean</span><span class="o">)</span> <span class="o">{</span> <span class="c1">//bean.sessionid 在接入层进行赋值</span>
|
||||
<span class="n">UserInfo</span> <span class="n">user</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
|
||||
<span class="c1">// 登陆逻辑 user = ...</span>
|
||||
<span class="n">users</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="n">user</span><span class="o">.</span><span class="na">getUserid</span><span class="o">(),</span> <span class="n">user</span><span class="o">);</span>
|
||||
<span class="n">sessions</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="mi">600</span><span class="o">,</span> <span class="n">bean</span><span class="o">.</span><span class="na">getSessionid</span><span class="o">(),</span> <span class="n">user</span><span class="o">.</span><span class="na">getUserid</span><span class="o">());</span> <span class="c1">//session过期时间设置为10分钟</span>
|
||||
<span class="n">sessions</span><span class="o">.</span><span class="na">setLong</span><span class="o">(</span><span class="mi">600</span><span class="o">,</span> <span class="n">bean</span><span class="o">.</span><span class="na">getSessionid</span><span class="o">(),</span> <span class="n">user</span><span class="o">.</span><span class="na">getUserid</span><span class="o">());</span> <span class="c1">//session过期时间设置为10分钟</span>
|
||||
<span class="k">return</span> <span class="k">new</span> <span class="n">RetResult</span><span class="o"><>(</span><span class="n">user</span><span class="o">);</span>
|
||||
<span class="o">}</span>
|
||||
|
||||
<span class="c1">//获取当前用户信息</span>
|
||||
<span class="kd">public</span> <span class="n">UserInfo</span> <span class="nf">current</span><span class="o">(</span><span class="n">String</span> <span class="n">sessionid</span><span class="o">)</span> <span class="o">{</span> <span class="c1">//给HTTP的BaseServlet用</span>
|
||||
<span class="n">Integer</span> <span class="n">userid</span> <span class="o">=</span> <span class="n">sessions</span><span class="o">.</span><span class="na">getAndRefresh</span><span class="o">(</span><span class="n">sessionid</span><span class="o">);</span>
|
||||
<span class="k">return</span> <span class="n">userid</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="kc">null</span> <span class="o">:</span> <span class="n">users</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">userid</span><span class="o">);</span>
|
||||
<span class="n">Long</span> <span class="n">userid</span> <span class="o">=</span> <span class="n">sessions</span><span class="o">.</span><span class="na">getLongAndRefresh</span><span class="o">(</span><span class="n">sessionid</span><span class="o">);</span>
|
||||
<span class="k">return</span> <span class="n">userid</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="kc">null</span> <span class="o">:</span> <span class="n">users</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">userid.intValue()</span><span class="o">);</span>
|
||||
<span class="o">}</span>
|
||||
|
||||
<span class="c1">//注销</span>
|
||||
@@ -400,61 +399,56 @@
|
||||
<span class="o">}</span></pre></div>
|
||||
<p> 以上是个简单的范例,用于用户模块存放sessionid。</p>
|
||||
|
||||
<h3><a id="source_confxml" href="#" aria-hidden="true"></a>persistence.xml 配置说明</h3>
|
||||
<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="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="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>
|
||||
<span class="c"> org.mariadb.jdbc.Driver —————— org.mariadb.jdbc.MySQLDataSource</span>
|
||||
<span class="c"> org.postgresql.Driver —————— org.postgresql.ds.PGConnectionPoolDataSource</span>
|
||||
<span class="c"> com.mysql.jdbc.Driver —————— com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource</span>
|
||||
<span class="c"> oracle.jdbc.driver.OracleDriver —————— oracle.jdbc.pool.OracleConnectionPoolDataSource</span>
|
||||
<span class="c"> com.microsoft.sqlserver.jdbc.SQLServerDriver —————— com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource</span>
|
||||
<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="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="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="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">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">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">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>
|
||||
</pre></div>
|
||||
<h3><a id="source_confproperties" href="#" aria-hidden="true"></a>source.properties 配置说明</h3>
|
||||
<div class="highlight"><pre>
|
||||
<span></span><span class="c1"># CacheSource @Resource(name="usersession")</span>
|
||||
<span class="c1"># type可以不用设置,框架会根据url判断使用哪个CacheSource实现类</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">cachesource</span><span class="p">[</span><span class="n">usersession</span><span class="p">]</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">org</span><span class="o">.</span><span class="n">redkalex</span><span class="o">.</span><span class="n">cache</span><span class="o">.</span><span class="n">redis</span><span class="o">.</span><span class="n">RedisCacheSource</span>
|
||||
<span class="c1"># 最大连接数</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">cachesource</span><span class="p">[</span><span class="n">usersession</span><span class="p">]</span><span class="o">.</span><span class="n">maxconns</span> <span class="o">=</span> <span class="mi">16</span>
|
||||
<span class="c1"># 节点地址</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">cachesource</span><span class="p">[</span><span class="n">usersession</span><span class="p">]</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">redis</span><span class="p">:</span><span class="o">//</span><span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="p">:</span><span class="mi">6363</span>
|
||||
<span class="c1"># 节点密码</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">cachesource</span><span class="p">[</span><span class="n">usersession</span><span class="p">]</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="mi">12345678</span>
|
||||
<span class="c1"># 节点db</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">cachesource</span><span class="p">[</span><span class="n">usersession</span><span class="p">]</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
|
||||
|
||||
|
||||
<span class="c1"># DataSource @Resource(name="platf")</span>
|
||||
<span class="c1"># type可以不用设置,框架会根据url判断使用哪个DataSource实现类,默认值: org.redkale.source.DataJdbcSource</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">org</span><span class="o">.</span><span class="n">redkale</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">DataJdbcSource</span>
|
||||
<span class="c1"># 是否开启缓存(标记为@Cacheable的Entity类),值目前只支持两种: ALL: 所有开启缓存。 NONE: 关闭所有缓存, 非NONE字样统一视为ALL</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">cachemode</span> <span class="o">=</span> <span class="n">ALL</span>
|
||||
<span class="c1"># 是否自动建表当表不存在的时候, 目前只支持mysql、postgres, 默认为false</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">table</span><span class="o">-</span><span class="n">autoddl</span> <span class="o">=</span> <span class="n">false</span>
|
||||
<span class="c1"># 用户</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">root</span>
|
||||
<span class="c1"># 密码</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="mi">12345678</span>
|
||||
<span class="c1"># 多个URL用;隔开,如分布式SearchSource需要配多个URL</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">jdbc</span><span class="p">:</span><span class="n">mysql</span><span class="p">:</span><span class="o">//</span><span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="p">:</span><span class="mi">3306</span><span class="o">/</span><span class="n">platf</span><span class="">?</span><span class="n">allowPublicKeyRetrieval</span><span class="o">=</span><span class="n">true</span><span class="o">&</span><span class="n">amp</span><span class="p">;</span><span class="n">rewriteBatchedStatements</span><span class="o">=</span><span class="n">true</span><span class="o">&</span><span class="n">amp</span><span class="p">;</span><span class="n">serverTimezone</span><span class="o">=</span><span class="n">UTC</span><span class="o">&</span><span class="n">amp</span><span class="p">;</span><span class="n">characterEncoding</span><span class="o">=</span><span class="n">utf8</span>
|
||||
<span class="c1"># 最大连接数,默认值:CPU数</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">maxconns</span> <span class="o">=</span> <span class="mi">16</span>
|
||||
<span class="c1"># 包含的SQL模板,相当于反向LIKE,不同的JDBC驱动的SQL语句不一样,Redkale内置了MySQL的语句</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">contain</span><span class="o">-</span><span class="n">sqltemplate</span> <span class="o">=</span> <span class="n">LOCATE</span><span class="p">(</span><span class="">$</span><span class="p">{</span><span class="n">keystr</span><span class="p">},</span> <span class="">$</span><span class="p">{</span><span class="n">column</span><span class="p">})</span> <span class="o">></span> <span class="mi">0</span>
|
||||
<span class="c1"># 包含的SQL模板,相当于反向LIKE,不同的JDBC驱动的SQL语句不一样,Redkale内置了MySQL的语句</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">notcontain</span><span class="o">-</span><span class="n">sqltemplate</span> <span class="o">=</span> <span class="n">LOCATE</span><span class="p">(</span><span class="">$</span><span class="p">{</span><span class="n">keystr</span><span class="p">},</span> <span class="">$</span><span class="p">{</span><span class="n">column</span><span class="p">})</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="c1"># 复制表结构的SQL模板,Redkale内置了MySQL的语句</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">tablenotexist</span><span class="o">-</span><span class="n">sqlstates</span> <span class="o">=</span> <span class="mi">42000</span><span class="p">;</span><span class="mi">42</span><span class="n">S02</span>
|
||||
<span class="c1"># 复制表结构的SQL模板,Redkale内置了MySQL的语句</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">tablecopy</span><span class="o">-</span><span class="n">sqltemplate</span> <span class="o">=</span> <span class="n">CREATE</span> <span class="n">TABLE</span> <span class="n">IF</span> <span class="n">NOT</span> <span class="n">EXISTS</span> <span class="">$</span><span class="p">{</span><span class="n">newtable</span><span class="p">}</span> <span class="n">LIKE</span> <span class="">$</span><span class="p">{</span><span class="n">oldtable</span><span class="p">}</span>
|
||||
|
||||
|
||||
<span class="c1"># DataSource 读写分离</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">jdbc</span><span class="p">:</span><span class="n">mysql</span><span class="p">:</span><span class="o">//</span><span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="p">:</span><span class="mi">3306</span><span class="o">/</span><span class="n">platf_r</span><span class="">?</span><span class="n">allowPublicKeyRetrieval</span><span class="o">=</span><span class="n">true</span><span class="o">&</span><span class="n">amp</span><span class="p">;</span><span class="n">rewriteBatchedStatements</span><span class="o">=</span><span class="n">true</span><span class="o">&</span><span class="n">amp</span><span class="p">;</span><span class="n">serverTimezone</span><span class="o">=</span><span class="n">UTC</span><span class="o">&</span><span class="n">amp</span><span class="p">;</span><span class="n">characterEncoding</span><span class="o">=</span><span class="n">utf8</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">root</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="mi">12345678</span>
|
||||
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">write</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">jdbc</span><span class="p">:</span><span class="n">mysql</span><span class="p">:</span><span class="o">//</span><span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="p">:</span><span class="mi">3306</span><span class="o">/</span><span class="n">platf_w</span><span class="">?</span><span class="n">allowPublicKeyRetrieval</span><span class="o">=</span><span class="n">true</span><span class="o">&</span><span class="n">amp</span><span class="p">;</span><span class="n">rewriteBatchedStatements</span><span class="o">=</span><span class="n">true</span><span class="o">&</span><span class="n">amp</span><span class="p">;</span><span class="n">serverTimezone</span><span class="o">=</span><span class="n">UTC</span><span class="o">&</span><span class="n">amp</span><span class="p">;</span><span class="n">characterEncoding</span><span class="o">=</span><span class="n">utf8</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">write</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">root</span>
|
||||
<span class="n">redkale</span><span class="o">.</span><span class="n">datasource</span><span class="p">[</span><span class="n">platf</span><span class="p">]</span><span class="o">.</span><span class="n">write</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="mi">12345678</span>
|
||||
</pre></div>
|
||||
|
||||
<footer class="site-footer">
|
||||
<span class="site-footer-owner"> 欢迎加入Redkale QQ群: 527523235</span>
|
||||
|
||||
Reference in New Issue
Block a user