




中山堂光雕秀



1. 新增資料到 cache
2. 從 cache 中取出資料
3. 移除 cache 中的資料
// --- <<IS-BEGIN-SHARED-SOURCE-AREA>> --- private static final String cacheManagerName = "Test"; private static final String cacheName = "hello"; public static void addValueToCacheByKey(IData pipeline, String key, Object value) throws ServiceException { IDataCursor cursor = pipeline.getCursor(); IDataUtil.put(cursor, "cacheManagerName", cacheManagerName); IDataUtil.put(cursor, "cacheName", cacheName); IDataUtil.put(cursor, "key", key); IDataUtil.put(cursor, "value", value); try { Service.doInvoke("pub.cache", "put", pipeline); } catch (Exception e) { throw new ServiceException(e); } cursor.destroy(); } public static Object getValueFromCacheByKey(IData pipeline, String key) throws ServiceException { IDataCursor cursor = pipeline.getCursor(); IDataUtil.put(cursor, "cacheManagerName", cacheManagerName); IDataUtil.put(cursor, "cacheName", cacheName); IDataUtil.put(cursor, "key", key); IData data = null; try { data = Service.doInvoke("pub.cache", "get", pipeline); } catch (Exception e) { throw new ServiceException(e); } Object result = IDataUtil.get(data.getCursor(), "value"); cursor.destroy(); return result; } public static void removeCacheByKey(IData pipeline, String key) throws ServiceException { IDataCursor cursor = pipeline.getCursor(); IDataUtil.put(cursor, "cacheManagerName", cacheManagerName); IDataUtil.put(cursor, "cacheName", cacheName); IDataUtil.put(cursor, "key", key); try { Service.doInvoke("pub.cache", "remove", pipeline); } catch (Exception e) { throw new ServiceException(e); } } // --- <<IS-END-SHARED-SOURCE-AREA>> ---
Startup service acme.albert.adapters:OPC_Connection was not found in Acme package
- retry 5 times at most and sleep 5 second then retry again
- Sets the delay between retries (i.e. 5 seconds), exponentially backing off to the maxDelay (i.e. 120 seconds) and multiplying successive delays by the delayFactor (i.e. 2).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | package albert.practice.retry; import java.sql.Connection; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.TimeUnit; import lombok.extern.slf4j.Slf4j; import net.jodah.failsafe.Failsafe; import net.jodah.failsafe.RetryPolicy; @Slf4j public class RetryTest { private int count = 0; public static void main(String[] args) throws ConnectionException { new RetryTest().connectWithRetry(); } public Connection connectWithRetry() { // create a retry policy with 5 max retries and have 2 seconds delay among retries RetryPolicy retryPolicy = new RetryPolicy(); // create a retry policy and sets the delay 5 seconds between retries, exponentially backing off to the maxDelay 120 // seconds and multiplying successive delays by the delayFactor 2. retryPolicy.retryOn(ConnectionException.class).withMaxRetries(5).withBackoff(5, 120, TimeUnit.SECONDS, 2); // Using Fallbacks allow you to provide an alternative result for a failed execution. // In this example, it will retry again after 5 seconds. Connection conn = Failsafe.with(retryPolicy).withFallback(() -> retryIfFail()) .get(() -> connect()); return conn; } public void retryIfFail() throws InterruptedException { log.debug("GG at " + getCurrentTime()); Thread.sleep(5000); log.debug("retry....." + getCurrentTime()); connectWithRetry(); } public Connection connect() throws ConnectionException { log.debug(" time = " + getCurrentTime()); Connection conn = null; if (count < 9) { count++; throw new ConnectionException("connection fail!"); } else { log.debug("get connection successfuly..."); } return conn; } private String getCurrentTime() { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); return dateFormat.format(new Date()); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | [main] DEBUG albert.practice.retry.RetryTest - time = 2016/11/23 17:31:51.495 [main] DEBUG albert.practice.retry.RetryTest - time = 2016/11/23 17:32:01.509 [main] DEBUG albert.practice.retry.RetryTest - time = 2016/11/23 17:32:21.515 [main] DEBUG albert.practice.retry.RetryTest - time = 2016/11/23 17:33:01.498 [main] DEBUG albert.practice.retry.RetryTest - time = 2016/11/23 17:34:21.499 [main] DEBUG albert.practice.retry.RetryTest - time = 2016/11/23 17:36:21.539 [main] DEBUG albert.practice.retry.RetryTest - GG at 2016/11/23 17:36:21.539 [main] DEBUG albert.practice.retry.RetryTest - retry.....2016/11/23 17:36:26.545 [main] DEBUG albert.practice.retry.RetryTest - time = 2016/11/23 17:36:26.545 [main] DEBUG albert.practice.retry.RetryTest - time = 2016/11/23 17:36:36.554 [main] DEBUG albert.practice.retry.RetryTest - time = 2016/11/23 17:36:56.564 [main] DEBUG albert.practice.retry.RetryTest - time = 2016/11/23 17:37:36.571 [main] DEBUG albert.practice.retry.RetryTest - get connection successfuly... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package albert.practice.retry; import java.sql.Connection; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.TimeUnit; import lombok.extern.slf4j.Slf4j; import net.jodah.failsafe.Failsafe; import net.jodah.failsafe.RetryPolicy; @Slf4j public class RetryTest { private int count = 0; public static void main(String[] args) throws ConnectionException { new RetryTest().connectWithRetry(); } public Connection connectWithRetry() { // create a retry policy with 5 max retries and have 2 seconds delay among retries RetryPolicy retryPolicy = new RetryPolicy(); retryPolicy.retryOn(ConnectionException.class).withDelay(2, TimeUnit.SECONDS) .withMaxRetries(5); // Using Fallbacks allow you to provide an alternative result for a failed execution. // In this example, it will retry again after 5 seconds. Connection conn = Failsafe.with(retryPolicy).withFallback(() -> retryIfFail()) .get(() -> connect()); return conn; } public void retryIfFail() throws InterruptedException { log.debug("GG at " + getCurrentTime()); Thread.sleep(5000); log.debug("retry....." + getCurrentTime()); connectWithRetry(); } public Connection connect() throws ConnectionException { log.debug(" time = " + getCurrentTime()); Connection conn = null; if (count < 9) { count++; throw new ConnectionException("connection fail!"); } else { log.debug("get connection successfuly..."); } return conn; } private String getCurrentTime() { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); return dateFormat.format(new Date()); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | DEBUG albert.practice.retry.RetryTest - time = 2016/11/05 11:42:13.832 DEBUG albert.practice.retry.RetryTest - time = 2016/11/05 11:42:15.837 DEBUG albert.practice.retry.RetryTest - time = 2016/11/05 11:42:17.837 DEBUG albert.practice.retry.RetryTest - time = 2016/11/05 11:42:19.837 DEBUG albert.practice.retry.RetryTest - time = 2016/11/05 11:42:21.838 DEBUG albert.practice.retry.RetryTest - time = 2016/11/05 11:42:23.839 DEBUG albert.practice.retry.RetryTest - GG at 2016/11/05 11:42:23.839 DEBUG albert.practice.retry.RetryTest - retry.....2016/11/05 11:42:28.839 DEBUG albert.practice.retry.RetryTest - time = 2016/11/05 11:42:28.839 DEBUG albert.practice.retry.RetryTest - time = 2016/11/05 11:42:30.839 DEBUG albert.practice.retry.RetryTest - time = 2016/11/05 11:42:32.839 DEBUG albert.practice.retry.RetryTest - time = 2016/11/05 11:42:34.840 DEBUG albert.practice.retry.RetryTest - get connection successfuly... |
<div class="row"> <div class="col-sm-12"> <div class="form-group"> <label> 負責人員 </label> <div style="width: 300px; margin-bottom: 20px;"> <ng-select [allowClear]="true" [items]="items" [data]="selectedItem" (data)="refreshValue($event)" (selected)="selected($event)" (removed)="removed($event)" placeholder="請選擇負責人員"> </ng-select> </div> </div> </div> </div>
<div class="row" *ngIf="items && items.length > 0"> <div class="col-sm-12"> <div class="form-group"> <label> 負責人員 </label> <div style="width: 300px; margin-bottom: 20px;"> <ng-select [allowClear]="true" [items]="items" [data]="selectedItem" (data)="refreshValue($event)" (selected)="selected($event)" (removed)="removed($event)" placeholder="請選擇負責人員"> </ng-select> </div> </div> </div> </div>
1 2 3 4 5 6 7 | <dependencies> <dependency> <groupId>net.jodah</groupId> <artifactId>failsafe</artifactId> <version>0.9.5</version> </dependency> </dependencies> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package albert.practice.retry; import java.util.Calendar; import java.util.Date; import java.util.concurrent.TimeUnit; import lombok.extern.slf4j.Slf4j; import net.jodah.failsafe.Failsafe; import net.jodah.failsafe.RetryPolicy; @Slf4j public class RetryTest { public static void main(String[] args) throws ConnectionException { @SuppressWarnings("unchecked") RetryPolicy retryPolicy = new RetryPolicy().retryOn(ConnectionException.class) .withDelay(2, TimeUnit.SECONDS).withMaxRetries(5); Failsafe.with(retryPolicy).run(() -> new RetryTest().connect()); } public void connect() throws ConnectionException { log.debug("time=" + new Date(Calendar.getInstance().getTimeInMillis())); if (true) { throw new ConnectionException("connection fail!"); } } } |