跳到主要內容

發表文章

Spring boot v1.5 (六) spring data jpa 基本操作

最近天氣好熱,做甚麼事都覺得很懶,想要寫個spring data jpa也是懶懶的,不過這部分卻也是滿重要的一部分,前一篇介紹 JDBCTemplate ,已經覺得跟以前寫SQL方式有所差異了,JPA帶來的是物件導向的設計面思考,說到JPA不得不提提 ORM ,Object-relational mapping主要想法為簡化及物件導向的設計,讓RDB更貼近Object,在設計上可以更加便利,甚至透過一些設計可以讓Table具有物件導向的特性如繼承等等,以往要使用ORM的框架,都會先以 Hibernate 進行,不過近來慢慢地轉向JPA,主要還是在減少程式碼、增加彈性等等,大體的功能沒有差異很大,所以從Hibernate轉到JPA問題不大,JPA要介紹的東西還滿多的,所以我這裡會再分成三個章節來介紹。 SPRING DATA JPA基本操作 JPQL & Named SQL & Native SQL Cache & DB Design Pattern SPRING DATA JPA更加簡化的程式撰寫,只需要一個 Interface內寫一些查詢 method就可以操作JPA,因為利用 method 組合查詢條件,確實很方便也很容易理解,若是都沒有辦法符合需求當然也可以自己實作一個來用當然沒有問題。 學習目的 :SPRING DATA JPA基本操作。 學習時數 :3.5hr 教學影片: pom.xml 說明 spring-boot-starter-web:配置 Web Project所需的函式庫。 spring-boot-starter-test:配置 unit or mock test 所需的函式庫。 spring-boot-starter-actuator:配置監控spring boot所需的函式庫,後續spring cloud會使用到,所以一開就導入。 spring-boot-starter-jdbc:配置使用jdbc所需的函式庫。 postgresql:配置postgresql連接Driver所需的函式庫。 jasypt-spring-boot-starter:加解密所需的函式庫。 spring-boot-starter-data-jpa:配置Spring data jpa所需的函式庫。 ...

Spring boot v1.5 (五) JDBCTemplate

    我個人是較推崇 JPA的,不過有些情況下,或是架構設計上,會需要純SQL的方式進行,但是像教科書介紹的方式進行,在實務上很難看到,太難用、程式太醜、修改太複雜等等都是要克服的問題,不可能期望所有開發者都是同一高等級的,JDBCTemplate某程度簡化了使用SQL的繁雜度,若是需要大量的純SQL時,JDBCTemplate絕對是首選,也會介紹JDBCTemplate如增刪修查方式、Connection Pool設定及帳密加密的方式等等。 預先準備項目 :請先 下載 並 安裝 PostgreSQL ,並建立一個DB(louisz)及Table(users),DDL如下: 。 CREATE DATABASE louisz WITH OWNER = louisz ENCODING = 'UTF8' LC_COLLATE = 'Chinese (Traditional)_Taiwan.950' LC_CTYPE = 'Chinese (Traditional)_Taiwan.950' TABLESPACE = pg_default CONNECTION LIMIT = -1; CREATE TABLE public.users ( id integer NOT NULL, name character varying COLLATE pg_catalog."default", email character varying COLLATE pg_catalog."default", mobilenumber character varying COLLATE pg_catalog."default", CONSTRAINT user_pkey PRIMARY KEY (id) ) WITH ( OIDS = FALSE ) TABLESPACE pg_default;

Spring boot v1.5 (四) swagger,properties and structing your code

在 上一章 有稍微讓大家看一下swagger怎麼跟spring boot無縫接軌,本章就深入一點來介紹swagger,把它定位在 API似乎有點薄弱,當作工具(Tools)我覺得倒很個很好的解釋,它主要提供的工具分別為 swagger core、swagger codegen、swagger editor、swagger ui等,以下是各自的說明: swagger core:這是swagger的核心,使用Java撰寫出來的。 swagger codegen:可以依據swagger(yaml格式)產生出來的api json或是url,可產生客戶端(client)相對應的程式碼。 swagger editor:透過這個工具可以產生yaml,有點像是Eclipse IDE一樣,撰寫相對應的yaml,透過yaml可以產服務端(server)及客戶端(client)的程式碼,透過 這裡 可以玩玩看。 swagger ui:將這工具與你的程式結合,如上章的方式,程式啟動後就會自動生成 api 前端頁面提供使用。

Spring boot v1.5 (三) magic RESTful and some swagger

    會用Magic來形容Spring boot的RESTful,一方面是微服務的架構,另一方面則是透過Spring boot真得很容易完成,本篇開始也就會一些專案的經驗帶進來。     簡單介紹一下REST(Representational State Transfer),具象狀態的傳輸,Wiki是這樣說明的,其實它的出現,主要是因為原本的Web Service太過複雜太謹慎了,SOAP跟XML-RPC不容易讓人一下子就了解,在這惟快不破的時代,時間就是金錢,所以REST的出現,讓原本比較難的Web Service變得簡單易懂,而且也容易上手,有些要點可以參 這裡 都有說明可以看看,對於微服務來說,無狀態很重要,未來架構設計也應該朝向無狀態,不然很難處理日益暴漲的量,符合REST設計風格的Web API稱為RESTful API,這就是我們常說的RESTful,比Web Service多了幾種操作方式,分別為get、post、put、delete、patch及head等(當然還有其他的),差別在 這裡 可以參考看看,Web Service有wsdl,那RESTful有嗎?答案就是Swagger,已經可以算是RESTful的標準了,Spring boot整合swagger也是很無縫地喔。

Spring boot v1.5 (二) logging

本篇主要介紹Logging的機制,Spring boot預設為logback framework,在開始之前先給大家熱身一下,每次執行Spring boot程式在Console上都會看到Spring的Banner如下 這Banner可以自訂喔,可以在google輸入ascii generator關鍵字,就可以找到很多產生這Banner文件,我使用的是 這個 ,然後在/src/main/resources目錄中增加一個banner.txt檔案,然後把產生出來的Code複製到banner.txt的檔案上,也可以透過簡單的設定加上一些顏色 banner.txt ${AnsiColor.BRIGHT_BLUE} _ _______ _________ _______ _______ ( \ ( ___ )|\ /|\__ __/( ____ \/ ___ ) | ( | ( ) || ) ( | ) ( | ( \/\/ ) | | | | | | || | | | | | | (_____ / ) | | | | | || | | | | | (_____ ) / / | | | | | || | | | | | ) | / / | (____/\| (___) || (___) |___) (___/\____) | / (_/\ (_______/(_______)(_______)\_______/\_______)(_______/ ${AnsiColor.BRIGHT_GREEN} Application Version: ${application.version}${application.formatted-version} Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version} 有點跑掉不過執行結...

Spring boot v1.5 (一) introduce

在 微服務(microservice) 當道的時代,快速已經成為王道的代名詞,然而實現他概念的架構不得不提到 Spring boot 和 Spring Cloud ,當然還有DevOps、Container(Moby(Docker))等等(本系列會帶到這些觀念,但是會另外在其他章節來說明,我認為的微服務是怎樣的東西),所以本系列看標題也可以知道都是Spring boot的介紹跟我遇到的一些問題及想法,希望看的人可以快速進入Spring boot,開發真的不難,難的是改變。 本系列文章大致分為 介紹說明本次學習目的及學習預計完成時間 說明學習目的 預計完成時數 影片 程式碼及設定檔相關分析說明 pom.xml說明 .properties or yml設定檔說明 程式碼說明 其他 遭遇到的問題 參考連結 Code Example Github連結

Cordova遇見Genymotion(一):起手式

隨著行動裝置的盛行,行動裝置的開發越來越重要了,大致上可分為Native、Web及Hybird的方式開發,而每種方式都有它的優缺點,Native及Web我就不多說了,大家可以上網查一下,今天我要介紹的是 Cordova 前身是Phonegap,Hybird的方式,混合了Native及Web的優點,但是可能現在還算是起步中,仍有些地方不足以讓大家使用,不過我想中庸之道始終會是王道。 另外就是我使用的模擬器不是用Android的,而是用 Genymotion ,用意則是效能及速度,而且也滿簡單的說。 接下來會有幾篇都是介紹Cordova的文章,這次先介紹環境的安裝及設定。

Lucene(一):Lucene4.3.1、Tika、IKAnalyzer中文分詞

Lucene 是一個很強大的搜尋引擎( Lucene wiki ),重點是Open Source,還有很多子專案很好用喔,這次來介紹一下 Tika 這個子專案,它是一個文件擷取內容及文件metadata的函式庫,支援的檔案格式可以參考一下 這裡 ,加上Lucene Core及中文IKAnalyzer就可以組合文件的中文全文檢索喔。 先下載 Lucene 4.3.1 Tika IKAnalyzer

Java EE(一):Glassfish JAAS JDBC Realm 設定 & SSO補充

甚麼是JAAS可以參考一下 JWorld@TW 及 Oracle Jaas ,在進行專案開發時,基本上人員權限一定是考量進去的,這次來介紹一下如何在Glassfish專案中設定 jdbc realm的方式進行。 既然是jdbc當然要先規劃一下db schema,有三個資料表要建立,user(人員資料表)、role(角色群組表)、userrolemapping(人員角色對應表),user資料表內要有帳號(username)及密碼(password),role資料表角色代號(role_code),userrolemapping資料表帳號(username)及角色代號(role_code)對應,這裡我會建議設計一個view比較方便:  SELECT user.username, user.password, role.role_code    FROM user, role, userrolemapping   WHERE user.username = userrolemapping.username AND role.role_code= userrolemapping.role_code; 若是JPA當然就用Id囉,  SELECT user.username, user.password, role.role_code    FROM user, role, userrolemapping   WHERE user.id= userrolemapping.user_id AND role.id= userrolemapping.role_id; 啟動Glassfis並進入admin console http://localhost:4848

我愛Java EE

Java EE 7千呼萬喚始出來,可以看看以下的連結喔 Java EE 7 at Glance Developer Java EE 7 Java EE 7支援HTML 5 目前Java EE是我開發專案的最愛,真的真的很方便,又快速,但是在台灣使用的人目前還是算少的,我現在公司主流還是  Struts 2 ,我很努力很努力要引入Java EE,希望會有所成效咧。 我不太想花時間介紹 Java EE的架構,想知道的可以Google一下應該就會知道了,我這裡會介紹用Netbeans + Java EE開發專案的方式,當中也會帶一下我的想法,我個人是以實作Prototype以Live Demo方式推專案,或許會有人說這不是很浪費時間嗎?而且又不是一定會是給你做,其實我的想法是如下: 成功率較高:可以讓客戶看到東西,客戶會比較有感覺。 教育訓練 :藉由Prototype可以訓練開發人員。 累積經驗:在客戶的回饋跟訓練過程中,可以調整專案開發的方式,也可以開發相關模組。

mixare:Augmented Reality(AR) Open Source Library (一)

上一篇介紹 AR的概念 ,這次來介紹一下一些Open Source的Library- mixare ,透過mixare就可以開發出一些東西囉,話不多說就先來用用看囉。 以App的方式進行開發,雖然說可以透過CCD使用,但是用行動裝置總是比較方便,而且mixare也是以App來介紹。 可以去下載 Android SDK ,現在已經有內含eclipse囉,就直接使用解壓縮後的eclipse。 先去下載  mixare source ,選擇ZIP整個檔案下載,解壓縮後,先將mixare、mixare lib及其他的plugin import eclipse。

Augmented Reality(AR)擴增實境要起飛囉...

因為公司每年都會舉辦創新競賽,讓大家可以提一些點子,看看有沒有市場機會,雖然我覺得技術創新遠比市場機會大,可是偶也不是老大,又為了獎金,所以囉為了五斗米折腰,原本是要提的是 PhoneGap (之後也會介紹,是個好物啊!),結果在搜尋時看到了 wikitude ,就一路的看到AR這技術,它不算是新技術,很早就有人提出來了,但是隨著行動裝置的流行,這技術也被重新吵起來,然後 Google Glass 也算是推力。 它的概念其實是透過設備如手機上相機、眼鏡、CCD,將所看到的真實且即時的影像,混合虛擬的東西,如看到的人頭上找出角,戴上皇冠或是加上鬍子等等,如 AR Toolkit 、 AR tag ,若是在加上GPS及Compass,就可以增加區域地點及距離的判斷,如 mixare 、wikitude、 DroidAR 。

Jasig CAS SSO 安裝篇

最近在玩SSO CAS,Open Source的Jasig CAS我覺得很好入手,之後就慢慢介紹囉。 先以Tomcat 7.0.37為Ap Server, OS:Window。 先安裝JDK及安裝 Tomcat 。 再下載 Jasig CAS Server ,並解開壓縮檔。 解開後會有很多目錄,都是cas-server-xxxx這些都是source,若是有需求可以自行修改,然後用Maven修改。本次因為只有安裝所以就用modules的目錄就可以囉,複製cas-server-webapp-x.x.x.war到Tomcat\webapps目錄下。 先啟動Tomcat,正常的話應該是可以正常啟動,然後打開Browser輸入http://hostname:8080/cas-server-webapp-x.x.x/login,應該會看到登入畫面但是有警示,你要使用SSL表示快成功了。

Pentaho kettle取指定目錄下的所有檔案

最近開始玩 BI的東西,而之前專案有使用到Pentaho Open Source這個好物.... Pentaho裡面很多東西,跟 Jasperreport一樣東西很多,我最先接觸到的是kettle ETL的工具,玩了一陣子,開始有空就把它寫下來,以免忘記。 Scan一個目錄下所有檔案,然後塞進去資料庫 1.先拉兩個 Input,一個Get File Names,一個是CSV file input,再拉一個 output 中的 Table output,然後把他連起來。 2.點開 Get File Names,File or directory設定你的指定目錄,Regular Expression則是輸入.*\.*$則是所有檔案,若是CSV則可.*\.torrent$這可以了,可以按一下 Preview rows看看是否正確。

Barcode Generator 條碼產生器 by ZXing

ZXing還滿方便的,產生各式條碼跟讀取,可以參考一下。 這裡介紹QRCode的產生方式 1.下載  ZXing 2.解開會出現很多目錄,將core及javase裡面的core.jar及javase.jar檔案include進來 3.部分程式碼 import java.io.File; import java.io.IOException; import java.util.Hashtable; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; ....

使用Apache Http Server進行Proxy和LoadBalance (補充)

1.補上直接使用source進行compile的流程 下載http-2.x.tar.gz檔案 tar xvf http-2.x.tar.gz進入目錄 ./configure --prefix=安裝的目錄 --enable-mods-shard=most --enable-proxy --enable-proxy-ajp --enable-proxy-balancer --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-rewrite ./make ./make install 後續就是設定httpd.conf檔案了.

使用Apache Http Server進行Proxy和LoadB alance

環境概述 OS:Linux Apache Http Server:2.2.21 安裝可以使用rpm或是抓source下來compile,建議前者 rpm –ivh apache-http-xxx.rpm 這裡請注意一下安裝的版本 http.conf 參數設定 Proxy < VirtualHost *:80>      ProxyPass targetPath fromPath | fromUrl < VirtualHost/>  範例如下 < VirtualHost *:80>      ProxyPass /app http://DomainName或IP:8888/app      ProxyPassReverse /app http://DomainName或IP:8888/app < VirtualHost/> 上述的參數設定為,將某主機的http通訊協定下的Web application(app),對應到本台Web Server的app下。這樣的Proxy架構的設定對企業內的Web應用程式相當有用處,若是遇到Web Application Server掛點只需要修改Proxy對應,不需要動到dns等等,是個滿便宜的Proxy架構設定喔。﹝不過要注意Web Application要注意redirectc和forward等的撰寫,盡量不要有絕對IP的出現﹞

MQ PCF API簡介

可以透過該API管理QMGR MQAgent.java--- package cgw.mq.admin; import cgw.mq.bean.MQManageBean; import com.ibm.mq.MQEnvironment; import com.ibm.mq.MQException; import com.ibm.mq.pcf.PCFMessageAgent; public class MQAgent { private PCFMessageAgent agent; public MQAgent(MQManageBean bean ,int ccsid){ //MQEnvironment.CCSID = ccsid; try { PCFMessageAgent agent = new PCFMessageAgent(bean.getMqm_ip(),bean.getMqm_port(),bean.getAdmin_channel()); } catch (MQException e) { e.printStackTrace(); } agent.setCharacterSet(ccsid); } public PCFMessageAgent getAgent() { return agent; } public void close() throws MQException{ agent.disconnect(); } } MQManageBean.java--- package cgw.mq.bean; public class MQManageBean { private String mqm_ip; private int mqm_port; private String admin_channel; public String getAdmin_channel() { return admin_channel; } public void setAdmin_channel(String admin_channel) { this.admin_channel = admin_channel; } public String getMqm_ip() {...

利用Asprise OCR辨識PDF中的條碼

http://asprise.com/product/ocr/index.php?lang=java 這個API還滿不錯用的,它可以直接辨識PDF中的條碼,不過Free的版本跟文件似乎有些不一樣,底下是辨識PDF文件的條碼步驟: 1.下載Asprise OCR v4.0 for Java,http://asprise.com/product/ocr/download.php?lang=java,以及AspriseJavaPDF-free.jar,http://asprise.com/product/javapdf/util.php 2.有Developer Guide手冊可以參考一下,把AspriseOCR.dll、DevIL.dll及ILU.dll放在LIBRARY(如Window/system32或是project的lib) 3.程式碼如下 OCR ocr = new OCR(); PDFReader pdfreader = new PDFReader(new File("d:\\lunch.pdf")); pdfreader.open(); int pageCount = pdfreader.getNumberOfPages(); // PDFToImage pdfToImage = new PDFToImage("D:\\lunch.pdf"); pdfreader.close(); PDFToImage pdfToImage = new PDFToImage("D:\\lunch.pdf"); for(int j=1;j BufferedImage img = pdfToImage.getImage(j); String text=ocr.recognizeBarcode(img); //Vector v = ocr.recognizeBarcodes(img); System.out.println(text); } 一頁是多個條碼時,可以用Vector就可以了,滿方便的不過不用錢的每...

XEN on CentOS

最近因為我申請的開發機器下來了,就玩玩之前沒測完的XEN,先說一下我機器的配備應該算是很高檔. CPU---QC * 2 ---共8核 RAM---12GB 硬碟----3顆1T 有三台(呵呵很酷喔而且還只拿來開發) 回到正題,上次XEN少了Window,這次給他補足了順便紀錄一下遇到的一些問題 1.要在XEN安裝Window系列,Intel CPU要具備VT,AMD要具備AMD-V如何確認呢 cat /proc/cpuinfo | grep flags 看看有沒有VMX的項目,有就可以安裝. p.s這裡還要注意一點若是CPU有註明有VT或是AMD-V可是下該指令沒有的話就請確認核心有沒有開啟(SuSe 11.1就沒有) 2.強烈建議使用CentOS5.2進行,OpenSuSe我分別裝了10.1 - 10.3及11統統不行在XEN裡裝Window,CentOS5.2很順。 3.網路設定問題 a.希望外部可以直接連到虛擬機器(domainU),安裝CentOS時先不要在實體網路卡上設定任何IP,但實體線路可以插上去,然後再安裝CentOS,起動虛擬機器管理員(是圖形介面),連接並建立一新的DomainU,依據所需進行設定,到了Host network設定時請選擇第二項shard physical network,就一路安裝下去囉..安裝好DomainU的作業環境,然後再設定網路卡的IP(DomainU的)應該就可以囉. ※這裡可以把DomainO(CentOS)的網路卡當做一個HUB來看就不難理解他不用設IP了,可是不要問我原因我也不知道 b.希望走DHCP方式同a步驟,到Host network請選擇第一項virtual network後面步驟就一樣了,可是要外部連到這台機器時,則要在DominO(CentOS)上利用iptables進行囉 4.可以使用virt-clone進行複製好用喔