在Spring Boot使用JdbcTemplate
在console印出執行的SQL及條件參數的方法如下。
網頁
2020/12/30
Spring Boot JdbcTemplate 印出SQL及參數 print query sql and params
Spring Boot H2 Database JdbcTemplate datasource jdbc url
在Spring Boot H2資料庫的datasource jdbc url設定如下。
Canary Deployment 金絲雀部署
Canary Deployment(金絲雀部屬)是一種軟體部署發布策略/模式(deployment/release strategy/pattern)。
2020/12/27
2020/12/25
Spring Boot Web @RestControllerAdvice與@ControllerAdvice區別
Spring Boot Web專案統一處理Controller拋出的例外錯誤可用@ControllerAdvice
或@RestControllerAdvice
,兩者區別如下。
2020/12/24
2020/12/23
2020/12/22
Spring Boot properties配置來源及讀取/覆蓋順序 external configuration read overriding order
Spring Boot可透過以下方式配置properties。
Spring Boot use SPRING_APPLICATION_JSON environment variable properties in Windows
Spring Boot可在系統設定環境變數SPRING_APPLICATION_JSON
的json格式變數注入properties。
Maven Surefire Plugin run Spring Boot JUnit test pass environment variables
Maven Surefire Plugin執行Spring Boot的JUnit測試傳入環境變數的方法如下。
2020/12/21
Spring Data JPA Repository INSERT INTO SELECT WHERE NOT EXISTS
在Spring Data JPA的Repository使用INSERT INTO .. SELECT .. WHERE NOT EXISTS
避免資料重覆新增。
2020/12/19
2020/12/18
Spring Data JPA Query Methods WHERE IS NULL條件查詢
Spring Data JPA 可用方法名稱查詢(query mehtods)撈取資料,查詢條件為WHERE <column> IS NULL
的方法寫法如下。
2020/12/17
2020/12/16
Spring JdbcTemplate query BeanPropertyRowMapper return List elements are null
今天同事和我分享關於BeanPropertyRowMapper
回傳List<String>
長度大於零但內容為空的現象。
2020/12/15
2020/12/13
Spring Boot Jib Maven build image to Docker Hub
使用GoogleContainerTools下的Jib maven plugin build Spring Boot docker image並推送到Docker Hub registry。
2020/12/12
String Boot Jib Maven build docker image
使用GoogleContainerTools下的Jib maven plugin build Spring Boot docker image。
2020/12/10
資料庫 SQL交易隔離 不重覆讀 SQL transaction isolation non-repeatable read
在ANSI SQL-92的4.28 SQL-transactions中提到的併發交易(concurrent transaction)隔離的不重覆讀(non-repeatable read)現象。
2020/12/9
資料庫 SQL交易隔離 髒讀 SQL transaction isolation dirty read
在ANSI SQL-92的4.28 SQL-transactions中提到的併發交易(concurrent transaction)隔離的髒讀(dirty read)現象。
2020/12/8
2020/12/7
2020/12/6
MySQL 8 InnoDB SELECT FOR SHARE 與 SELECT FOR UPDATE 差異
MySQL 8 InnoDB 鎖定讀(Locking Reads)分為SELECT ... FOR SHARE
與SELECT ... FOR UPDATE
,兩者差異如下。
ANSI SQL-92 SQL-transaction isolation level
資料庫交易的ACID特性中的隔離性(Isolation)定義當一筆資料同時被多個交易存取時產生的影響程度。ANSI SQL-92文件中定義了四種隔離層級(isolation level):
2020/12/5
2020/12/4
Python 什麼是IDLE
Python的IDLE(Integrated Development and Learning Environment)為整合開發與學習環境,簡單說就是撰寫Python程式的工具。
2020/12/3
2020/12/1
Docker Jenkins Maven building Spring Boot from Github
使用Jenkins docker container的pipeline建置Github上的Spring Boot專案。
2020/11/29
2020/11/28
2020/11/25
Spring Data JPA 未呼叫Repository.save()但資料卻更新
最近碰到Spring Data JPA的地雷,明明沒有呼叫CrudRepository.save()
但資料卻更新。
Spring Data JPA org.springframework.orm.jpa.JpaSystemException: identifier of an instance of Entity was altered from x to y錯誤
Spring Data JPA的org.springframework.orm.jpa.JpaSystemException: identifier of an instance of Entity was altered from x to y
或
Hibernate的org.hibernate.HibernateException: identifier of an instance of Entity was altered from x to y
錯誤原因如下。
Java Windows javac 編譯出現unmappable character for encoding MS950錯誤
在Windows 7的命令提示字元工具(cmd)用javac
指令編譯在IDE(Eclipse, IntelliJ IDEA)編輯的java檔時出現unmappable character for encoding MS950
錯誤訊息編譯失敗。
2020/11/24
Spring org.springframework.mail.MailSendException: Failed messages: javax.mail.internet.AddressException: Empty address in string ``''
今天使用Spring JavaMailSender
發送email通知信時出現錯誤;
org.springframework.mail.MailSendException: Failed messages: javax.mail.internet.AddressException: Empty address in string ``''
。
Java 編譯器產生合成class檔的情況 complier create synthetic class $1.class files
Java 1.5及1.6編譯器在下面情況時會額外產生synthetic class檔,也就是類別名稱後接金錢符號(dolor symbol)的class檔(<Class$1.class>
)。
2020/11/22
2020/11/21
2020/11/17
2020/11/15
2020/11/14
Spring Boot @Trancsational 捕捉例外不會觸發回滾 try-catch exception won't trigger rollback
之前撰寫@Transactional 方法間呼叫的回滾範圍時,弄錯了try catch捕捉例外時@Trancsational
的rollback效果。
2020/11/11
2020/11/10
2020/11/9
2020/11/8
2020/11/6
2020/11/5
2020/11/4
Spring Data JPA @OneToMany LazyInitializationException could not initialize proxy - no Session
Spring Data JPA撈取一對多(One To Many)物件時,發生錯誤org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.abc.demo.entity.Department.employeeList, could not initialize proxy - no Session
。
Spring @Transactional 方法間呼叫的回滾範圍 methods call rollback boundaries
Spring @Transactional
交易管理(事務管理)的幾種設定回滾範圍。
JPA JPQL簡介
JPQL(Java Persistence Query Language)是EJB-QL(Enterprise JavaBeans query language)的擴展,是類似SQL用來查詢JPA實體(entity)的物件導向持久化查詢語法。與SQL不同的是JPQL操作的對象為JPA的entity物件,而非資料庫的資料表,也就是對SQL及底層資料庫的抽象,所以JPQL是可攜的(portable),不會因為底層資料庫或資料表的異動而修改語法。
2020/11/3
2020/11/2
2020/10/30
日誌 20201031 六 女兒出生
從著床開始歷經39週多一點,女兒終於在2020年10月31日星期六上午9:55分從媽媽的肚子出來了,是個萬聖節出世的天蠍妹妹。出生時的體重2,995克,身長47公分的標準的大小。
IntelliJ IDEA Maven使用自訂的Nexus repository settings xml
IntelliJ IDEA Maven使用自訂的Nexus repository setting.xml設定方式如下。
2020/10/29
Spring Cloud Config Client 讀取Config Server配置範例 reading properties from Config server
Spring Cloud Config Client 讀取Config Server中的properties的設定方式如下。
2020/10/28
Spring Cloud Config Server 檔案系統classpath配置範例 filesystem classpath configuration
Spring Cloud Config Server 使用檔案系統classpath配置(File System Backend)。
2020/10/27
Spring Cloud Config Server 檔案系統配置範例 filesystem configuration
Spring Cloud Config Server 使用檔案系統配置(File System Backend)。
2020/10/24
Spring Data JPA AttributeConverter 轉換列舉屬性為資料表欄位值 convert Enum attribute to table column value
資料表中常有欄位用來儲存資料的類型(type)、種類(category)、狀態(state)、情況(status),這些欄位值通常對應到Java的enum。JPA 2.1可使用AttributeConverter
轉換資料表欄位與entity的enum資料型態屬性。
2020/10/22
Spring Data JPA Hibernate 印出查詢SQL參數 print query sql parameters log
Spring Data JPA及Hibernate印出查詢SQL的參數的方法如下。。
2020/10/21
Spring 呼叫同類別的@Transactional方法不會回滾 call same class @Transactional method no rollback
Spring的交易管理(中國叫做事務管理)(Transactoinal Management)中,當由同類別中一個無交易管理(無@Transactional
)的方法呼叫另一個有交易管理(有@Transactional
)的方法時,有交易管理的方法發生例外時資料不會回滾(rollback)。
2020/10/20
台北市 內湖區 洲子美食街 輕履行水煮雞肉餐盒
最近來到之前一直抗拒不想去的內湖工作,中午去瑞光路西湖派出所隔壁的洲子美食街覓食,滿滿的中午上班族放飯人潮堵在門口等麥當勞。進去後看到有些人手上拿著透明的餐盒,跟著腳步去看發現是一家叫輕履行賣的健康餐盒。
2020/10/19
String Boot 使用BeanFactory動態取得bean BeanFactory get bean dynamically
物件導向的特點是透過繼承與多型來達到的不同實作效果,而Spring容器管理的物件是以依賴注入取得,若介面有多個實作,並且要在執行期(runtime)依條件動態取得對應的bean的方法如下。
2020/10/18
2020/10/17
Shell Script 在命令列執行shell script時傳入參數 command line pass arguments into shell script
在命令列執行shell script並傳入參數(arguments)的方法如下。
2020/10/16
2020/10/15
Spring Boot Test net.bull.javamelody MockMvc.perform() NullPointerException
今天在寫Spring Boot的Controller測試時,執行MockMvc.perform()
總是發生NullPointerException
如下。
2020/10/14
2020/10/13
2020 9月 桃園、三重客運9005 桃園-內湖通勤記錄
桃園-三重客運9005班次經國道1號往返桃園與內湖兩地,是桃園市區上班族前往內湖工作的主要通勤工具之一,本人在2020年9月到10月間的實際搭乘時間紀錄如下。
Java 原始資料型態預設值 primitive data type default value
Java 原始資料型態(primitive data types)的類別欄位(class field)(成員變數)預設值如下。
2020/10/12
2020/10/11
2020/10/10
Mac Docker 安裝Oracle 12c docker container
在macOS建立Oracle 12的docker container環境並使用Oracle SQL Developer連線。
2020/10/9
Spring Boot 用@TestPropertySource修改測試用的properties參數
Spring Boot測試類可使用@TestPropertySource
修改測試時使用的properties參數值。
Spring Boot 測試使用@ActiveProfiles決定是否套用@EnableScheduling
Spring Boot測試時使用@ActiveProfiles
決定測試類是否啟用@EnableScheduling
的方式如下。
2020/10/8
2020/10/3
2020/10/2
2020/10/1
Spring Boot @PropertySource load yaml
Spring Boot @PropertySource
預設只載入properties檔,如果想要用yaml來配置則要修改以下。
Spring Boot @ConfigurationProperties nested properties
Spring Boot @ConfigurationProperties
類對應的properties可用巢狀類別(nested class)呈現。
2020/9/30
2020/9/29
2020/9/27
Spring Boot @PropertySource 依 spring.profiles.active載入對應的properties
Spring可在application.properties
設定spring.profiles.active
的值來切換不同環境用的application
配置檔。而application
外的自訂配置檔透過@PropertySource
載入時也要依spring.profiles.active
載入對應的配置檔的設定如下。
2020/9/26
Spring Data JPA @IdClass複合主鍵範例 composite key example
Spring Data JPA使用@IdClass
設定複合主鍵(composite primary key)範例如下。
2020/9/25
2020/9/24
Spring Boot @ConfigurationProperties with @ConstructorBinding
Spring使用@ConfigurationProperties
及@ConstructorBinding
將properties檔內容以建構式注入到bean。
Spring Boot 使用@ConfigurationProperties 綁定properties至Bean
Spring除了能使用@Value
把properties配置設定值注入到成員變數中外,也可透過@ConfigurationProperties
將properties檔內容綁定到Bean類的屬性。
2020/9/22
2020/9/20
2020/9/19
Spring Boot @ComponentScan掃描指定套件(包) scan specific package
在SpringBoot專案通常都直接把類別放在@SpringBootApplication
類所在package下的package,然後Spring預設會掃描這些package並把掛有@Compoment
、@Repository
、@Service
、@Controller
、@Configuration
的類別註冊為Spring bean。
不過如果專案package及類別非常多會造成啟動時很慢,因為要花很多時間去掃描這些package。要改善此情況可設定只掃描特定的package來提高掃描註冊bean的效率。
2020/9/18
菜鳥工程師 暗色主題 Dark Theme
最近很流行暗色主題,從Facebook,Youtube到IDE,Stackoverflow,Docker官網都推出暗色背景為基調的顏色配置,所以我也來跟隨潮流一下把菜鳥工程師的網頁改成暗色主題風格。暗色看起來真的對眼睛比較不吃力,提高閱讀體驗。
2020/9/17
Spring Boot 操控台印出彩色文字 console log ANSI color output
Spring Boot預設在IDE(IntelliJ IDEA or Eclipse)印出的日誌訊息都是單色的,但透過設定以下參數即可在操控台(console)印出彩色日誌。
IntelliJ Spring Boot java.lang.ClassNotFoundException: javax.servlet.Filter
從SVN checkout下來一個Spring Boot專案在IntelliJ IDEA執行出現java.lang.ClassNotFoundException
錯誤。
2020/9/16
Maven 安裝目錄檔案到本地倉庫發生指定檔案不存在錯誤 install file to local repository specified file not exists
在Windows有pom.xml
的目錄以cmd執行Maven的mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
命令來安裝檔案到local repository時發生錯誤。
2020/9/15
Java inner class shadowing
如果內部類別(inner class)(即非靜態巢狀類別(non-static nested class))成員變數(member variable)名稱與外層類別(enclosing class)的成員變數名稱相同,則內部類別的成員變數會覆蓋(shadowing)外層類別相同名稱的成員變數。
Java 程式執行時出現NoClassDefFoundError錯誤
最近在一個沒有CICD自動部屬的老舊專案。修改好的Java程式如果需要在Dev環境測試,需要把本機編譯好的class檔手動貼到Dev環境的Tomcat WEB/INF/classes
下對照package結構的目錄中來更新。
在本機執行某項功能時明明都正常,但在Dev環境測試時確出現NoClassDefFoundError
錯誤。
2020/9/14
Oracle 找出限制條件資料表 find ORA-02292 constraint table
在Oracle異動資料表時,若發生
ORA-02292: 違反完整性限制條件 (<constraint_name>) - 發現子項記錄
ORA-02292: integrity constraint (<constraint_name>) violated - child record found
代表刪除的資料被外鍵參考,所以有外鍵的限制條件。應該先把參照的子表資料刪除後才能把主表的資料刪除。
透過<constraint_name>
找出參照的資料表的方式如下。
2020/9/13
2020/9/12
MacOS Eclipse 匯入Tomcat原始碼為專案 import Tomcat source code as Eclipse project
在macOS的Eclipse匯入Tomcat原始碼為專案的步驟如下。
2020/9/11
Java 轉位元組陣列為十六進位字串 convert byte array to hexadecimal string
Java 轉位元組陣列byte[]
為十六進位字串(hexadecimal string)的方法如下。
2020/9/7
Servlet 接收表單上傳檔案 upload form data file by Apache Commons FileUpload
在Servlet使用Apache Commons FileUpload接收以form data表單上傳檔案的方法如下。
2020/9/6
2020/9/5
Eclipse 關閉專案減少記憶體用量 closing project to free memory usage
Eclipse在日常工作中通常不會只有一個project(專案),如果project暫時沒有用到的話,可以使用[Close Project]將其關閉。
TortoiseSVN 建立及套用修補檔 create and apply patch
最近又回去用很難用的SVN,想把修改的程式暫存起來之後回復,在git有git stash
,但在SVN似乎只能用patch來達成類似的目的,除了麻煩外限制也很多。
2020/9/4
ORA-01008: 部份變數未被連結 not all variables bound
今天寫好久沒碰的PreparedStatement
,結果執行時出現
ORA-01008: 部份變數未被連結
錯誤。
2020/9/3
2020/9/2
RockTek Rii mini i8+ 無線語音觸控鍵盤開箱
上網買了RockTek Rii mini i8+ 無線觸控鍵盤,原因是長時間使用滑鼠鍵盤造成我的頸肩非常痠痛,所以買了這台掌上鍵盤做些輕量的事,例如瀏覽網頁、Youtube或PTT。
2020/9/1
2020/8/30
Spring Boot RabbitMQ @RabbitListener 簡單範例
Spring Boot RabbitMQ除了自行配置MessageListenerContainer
及註冊MessageListener
來收訊息外,也可使用@RabbitListener
標註在方法上使其接收RabbitMQ的訊息。
Spring Boot Messaging with RabbitMQ 範例
本範例參考Spring官網Messaging with RabbitMQ,示範Spring Boot RabbitMQ的基本配置與傳送/接收訊息。
2020/8/29
2020/8/28
IntelliJ IDEA Maven 下載依賴函式庫原始碼 download dependency library source code
IntelliJ IDEA Maven預設只會下載依賴函式庫已編譯的jar,如果要查看原始碼的話就必須連同原始碼(source code)一起下載。
Spring Data JPA JpaRepository save() 與 saveAndFlush() 差別
使用Spring Data JPA的資料存取層會繼承JpaRepository
,其儲存enity的方法有save()
與saveAndFlush()
,兩者差別如下。
2020/8/27
Spring Boot TransactionTemplate programmatically rollback
本篇介紹Spring TransactionTemplate
如何在程式中手動回滾交易。
2020/8/25
2020/8/23
2020/8/22
Java ThreadPoolExecutor maxPoolSize 考題
最近面試的筆試題中關於ThreadPoolExecutor
的考題,測試對於ThreadPoolExecutor
中Thread Pool生成thread的了解。
2020/8/21
資料庫 交易的悲觀鎖與樂觀鎖 Transaction pessimistic and optimistic locking
資料庫交易特性ACID中的交易隔離(Isolation)通常利用「鎖(locking)」來實現,目的為避免同一筆資料在併行交易(concurrent transaction)中被不同的交易同時修改以確保資料的完整性。
交易鎖又分為「悲觀鎖(pessimistic locking)」與「樂觀鎖(optimistic locking)」。
2020/8/20
2020/8/19
為何在微服務中使用訊息佇列 Why use Messaging Queue in Microservices
在微服務架構(Microservice Architecture)中總是可以看到訊息佇列(Messageing Queue, MQ)技術的存在,為什麼微服務系統要使用MQ呢?
2020/8/14
2020/8/13
2020/8/11
2020/8/10
2020/8/9
Oracle PL/SQL Nested Table FOR LOOP start index
Oracle集合(collection)型態中的Nested Table(表格類型)的index是從1開始起算。
2020/8/7
Oracle PL/SQL Stored Procedure PLS-00428
在撰寫Oracle Stored Procedure時,出現
PLS-00428:在此SELECT敘述句中預期會出現一個INTO子句
PLS-00428: an INTO clause is expected in this SELECT statement.
錯誤的原因如下。
2020/8/6
Oracle PL/SQL call function PLS-00221 error
在Oracle PL/SQL呼叫function時出現
PLS-00221: 'function_name' is not a procedure or is undefined
PLS-00221: 'function_name' 不是程序或未定義
錯誤的原因如下。
Oracle PL/SQL define Function in Package
在Pacakge(套裝程式)中建立一個Function(函式)的方法如下。
2020/8/5
2020/8/4
2020/8/1
2020/7/31
Spring Boot 使用ResponseBodyAdvice修改Response
在Spring Boot Web (Spring Web MVC)修改API回應內容,也就是response body的作法如下。
2020/7/28
2020/7/26
2020/7/24
2020/7/23
2020/7/22
2020/7/19
2020/7/17
IntelliJ IDEA Community Application Servers not found
從去年開始至今工作中已用改用IntelliJ IDEA Community(社群免費版)開發,也逐漸習慣這個方便好用的IDE。直到最近工作轉換才發現最終還是逃不了要付錢使用Ultimate版(付費版)的命運,要不然就是要回頭去用Eclipse。
2020/7/12
2020/7/11
2020/7/10
2020/7/9
2020/7/8
2020/7/7
Mac macOS Catalina default terminal zsh
在新買的2020 MacBook Pro修改終端機(Terminal)的指令符號時,發現原本修改.bash_profile
的做法沒用了,查了一下才發現從2019年10月7日開始發行的macOS 10.15 Catalina的shell預設改為zsh,而非原本的bash。
2020 MacBook Pro 13吋 Gen 10 Core i5
前陣子苦惱要買哪台筆電做為下個5年用的工具,因此寫了一篇「2020 Java Web程式開發筆電採購指南」分析一下需求,直到今天付諸行動去蘋果直營店買了MacBook Pro。
2020/7/6
2020/7/5
2020/7/3
2020/7/2
2020/7/1
Spring Boot update message properties
Spring Boot ReloadableResourceBundleMessageSource
更新i18n訊息message.properties
範例。
2020/6/30
2020/6/29
2020/6/28
Spring Boot MessageSource 自動配置
Spring Boot自動配置了MessageSource
做i18n多國語言訊息,所以若無特殊需求不用自己配置MessageSource
的bean。
2020/6/26
2020/6/25
2020/6/22
2020/6/21
2020/6/20
Effective Java 3e - Item 4: Enforce noninstantiability with a private constructor 筆記
Effective Java 3e - Item 4: Enforce noninstantiability with a private constructor 使用private建構式使無法實例化。
2020/6/19
Java final 效能較好? add final to improve performance?
幾年前有個同事寫程式會加一堆final
,當時我只知道final
可避免變數值被修改,但不曉得為什麼他幾乎在每個地方都加,他的回答是效能較好,well...。
Java Functional Interface是什麼?
「A functional interface has exactly one abstract method」,也就是「Functional Interface是只有一個抽象方法的Interface」。
2020/6/18
Java OptionalInt 使用時機
讀了「Effective Java 3e - Item 55: Return optionals judiciously」後知道不要用Optional
去包primitive type的boxed type類別,也就是不要用Optional<Integer>
,應改用OptionalInt
。
Effective Java 3e - Item 55: Return optionals judiciously 筆記
Effective Java 3e - Item55: Return optionals judiciously 回傳Optional。
Effective Java 3e - Item 54: Return empty collections or arrays, not nulls 筆記
Effective Java 3e - Item 54: Return empty collections or arrays, not nulls 返回空集合或陣列,不要返回null。
Effective Java 3e - Item 51: Design method signatures carefully 筆記
Effective Java 3e - Item51: Design method signatures carefully 設計方法簽章。
2020/6/17
為什麼網際網路不用Socket直連而要用HTTP協議
最近實作Socket Client與Socket Server互連的範例後,腦中浮現出一個問題,既然Socket連線這麼簡單為什麼網路不用Socket構成而用HTTP呢?
Effective Java 3e - Item 50: Make defensive copies when needed 筆記
Effective Java 3e - Item 50: Make defensive copies when needed 防禦性複製。
2020/6/15
2020/6/14
Effective Java 3e - Item 49: Check parameters for validity 筆記
Effective Java 3e - Item 49: Check parameters for validity 檢查參數的有效性 筆記。
2020/6/13
Spring Web 處理存取資料庫例外錯誤 handle database access exception
在Spring Web專案中,通常在DAO或Repository層存取資料庫,而存取資料庫時拋出例外錯誤該在哪處理?
2020/6/10
2020/6/8
2020/6/6
2020/6/5
Use milliseconds to record date time
In my current working project, our team uses milliseconds to record the moment of DML. The problem is using milliseconds is not intuitive for developers to read. They cannot tell the time through the long number. I have to copy the long number and use online converter to translate milliseconds to readable date time information when debugging, such a pain.
I asked a member about the reason, he told me maybe they wanted to record time directly by Java System.currentTimeMillis()
.
I would use TIMESTAMP
instead.
2020/6/4
JWK (JSON Web Key) 是什麼?
JSON Web Key,簡稱JWK,是以JSON物件表示,用來驗證JWT的signature(簽章)的公開金鑰(cryptographic key)。
2020/6/2
2020/6/1
Spring AOP get method advice annotation and parameters
在Spring AOP透過從annotation advice取得方法的annotation。
2020/5/31
2020/5/30
Spring Security 多角色權限範例
本篇使用Spring Security Basic Authentication驗證,使用者有多種角色(role)權限,搭配JSR-250 @RoleAllowed
做REST API的存取限制。
2020/5/29
Spring Boot 自訂Java Bean驗證失敗回應訊息 custom bean validation fail response
Spring Boot使用bean validation驗證失敗時,預設會返回HTTP Status: 400 Bad Request及訊息。
Java 排序比較兩個可能有null的欄位 sorted by two fields with null
Java排序List
時,若排序元素的屬性可能為null,則可以在Comparator
的實作中處理null。
2020/5/28
Log4j2 API參數驗證錯誤輸出的日誌級別 log level for validating input args fail
在Controller接收外部傳入的參數時通常要驗證參數是否合法(例如金額不得小於0、結束日不能超過起始日、字串長度限制等),若驗證失敗時應該用什麼的log level輸出日誌?
2020/5/27
LeetCode 3 Longest Substring Without Repeating Characters 最長的無重複字符的子字串
本篇為LeetCode上演算法的Medium問題,Longest Substring Without Repeating Characters 最長的無重複字符的子字串。
2020/5/26
Vuex是什麼? What is Vuex?
簡單說就是用來維護Vue組件(Component)的狀態(state)。
由於Vue是透過多個組件(也就是構成頁面的"樣板與程式碼")層層套套所搭建起來的前端應用程式。而當多個元件間的狀態是共享時,靠自己管理組件間的狀態會變得複雜且困難。而有了Vuex狀態管理框架就會讓以上任務變得簡單。
2020/5/25
2020/5/22
Java 陣列與ArrayList差別
Array and ArrayList difference
今天被問到Java的Array(陣列)與ArrayList
的差別。
當下我只回說ArrayList
的元素只能是物件,而ArrayList
實際上是對Array進行包裝提供一些好用的操作方法之類。總之回答得亂七八糟,因此這邊做個整理。
2020/5/21
Java 取得系統當日午夜毫秒時間 get system current day midnight millisecond
Java LocalDateTiem
取得系統所在時區當天及昨天午夜(00:00)的毫秒。
2020/5/20
SourceTree 檢視特定作者的提交紀錄 view log of specific author
SourceTree查看特定人員的提交歷史紀錄(commit log history)的方式如下。
2020/5/18
Spring Professional Michelle Chu
剛有個Spring Professional的Hunter Michelle Chu(典型的*********)打來,蠻沒禮貌,讓我特地po這篇記錄一下,水準夠差,霹哩趴辣講一堆開始身家調查,才剛到公司坐下就被她心情弄的滿肚子大便。這位小姐在找Java工程師。
2020/5/17
2020/5/16
2020/5/15
Spring Boot Java Bean Validation class-level constraint date range 日期區間驗證
在Spring Boot使用Java Bean validator 類別驗證器驗證傳入物件的日期範圍。
Oracle 11g 新增資料ID自動增量 auto increment sequence id when insert
在Oracle 11g新增資料時利用SEQUENCE
自動產生遞增ID的方法如下。
2020/5/14
EMV® 3-D Secure AReq(Authentication Request Message)
EMV® 3-D Secure AReq(Authentication Request Message)簡介。
2020/5/13
EMV® 3-D Secure Three domains
EMV® 3-D Secure的"3-D"是3個Domains的意思(domain翻為域,簡單說就是分成三個區塊)。三個domains構成了3DS安全驗證的交易流程。
2020/5/11
2020/5/10
Windows 7 Docker 安裝Oracle 12c docker container
本篇記錄在Windows 7上建立Oracle 12的docker container環境並使用SQL Developer連線。
2020/5/9
Java 轉原始型別陣列為包裝型別List convert primitive type array to boxed type List
Java 轉換原始型別陣列(primitive array)為List
的方法如下。
Effective Java 3e - Item 22: Use interfaces only to define types 筆記
Effective Java 3e - Item 22: Use interfaces only to define types 介面應該只用來定義型態 筆記。
Effective Java 3e - Item 25: Limit source files to a single top-level class 筆記
Effective Java 3e - Item 25: Limit source files to a single top-level class 限制一個檔案只有一個top-level class 筆記。
2020/5/8
2020/5/6
Java Regex 檢查字串是否只含hex字元 check hex char
Java 使用regex(正則表示式, Regular expression)檢查字串是否只含hex字元,也就是只含0123456789ABCDEF
。
EMV® 3-D Secure ARes(Authentication Response Message)
EMV® 3-D Secure ARes(Authentication Response Message)簡介。
2020/5/5
Spring Boot 自訂Java Bean Validation驗證參數是否為Hex文字格式
Java Bean Validation驗證Spring Boot Controller請求物件屬性是否為Hex表示格式(僅接受數字0-9,英文字母A-F)。
2020/5/3
2020/5/2
Docker Machine Unable to query docker version: Get https://192.168.99.101:2376/v1.15/version: x509: certificate is valid for 192.168.99.100, not 192.168.99.101
今天重新啟動VM的Docker machine後查詢machine列表時,其中一個machine的ERROR
欄位出現無法獲得版本的訊息如下。
Docker Machine 設定Docker Client連線環境變數 set connection environment variable
設定Docker Client連線到machine的環境變數。
Docker 什麼是Docker Machine
Docker Machine是安裝在主機系統的虛擬機Docker hosts管理工具,用來管理VM(e.g.VirtualBox)中給Docker Engine運行的Docker host。
2020/5/1
Windows Docker Toolbox連線到docker nginx
在舊的Windows 7或Windows 10家用版因為沒有Hiper-V,所以必須安裝Docker Toolbox來使用docker。
2020/4/30
Maven WARNING Using platform encoding to copy filtered resources
在maven build時出現下面警告:
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
2020/4/29
I Mean Us - You So
今天老婆放kkbox的什麼放鬆音樂主題之類的無意中聽到開頭20秒,就覺得這肯定是首我愛的歌,趕快叫老婆看歌名。果然,屌炸的歌,到現在快臨晨1點已經聽了20遍了,這首歌接下來應該會連續聽一個月到膩炸為止。
Youtube - I Mean Us - You So (Youth Soul) [Official Music Video]。
2020/4/28
EMV® 3-D Secure 驗證協定的ECI是什麼
3DS驗證協定的Electronic Commerce Indicator (ECI)是信用卡組織(VISA、MasterCard、JCB、American Express等)的目錄伺服器(Directory Servers)回傳的值,用來表示交易時的3DS驗證結果。不同卡組織的定義不同。
2020/4/27
Jaskson 使用 @JsonPropertyOrder 設定物件轉json順序
使用Jackson將Java物件轉為json字串時,可用@JsonPropertyOrder
確保轉出的json字串的順序。
Spring Security 簡單角色權限範例
本篇使用Spring Security搭配Basic Authentication驗證,簡單的使用者角色(role)權限與JSR-250 @RoleAllowed
來做REST API的存取限制。
2020/4/25
2020/4/24
Spring Boot 依環境設定不同的properties檔 Use different application.properties
通常開發、測試及發布環境使用的各種properties參數不同,因此application.properties
需依環境設定不同參數,而Spring Profile能依不同環境切換讀取的application.properties
。
2020/4/23
2020/4/22
2020/4/21
2020/4/19
2020/4/18
Git pull refusing to merge unrelated histories
今天在git pull
時,發生fatal: refusing to merge unrelated histories
,解決方式如下。
2020/4/16
2020/4/15
Spring JDBC SQLException Invalid column name錯誤
今天在Spring Data JPA使用JdbcTemplate
查詢Oracle資料庫時,出現java.sql.SQLException: Invalid column name
錯誤。
2020/4/14
Spring Boot datasource config jdbcUrl is required with driverClassName錯誤
今天在設定Spring Boot JDBC多資料庫的datasource配置時,啟動時發生jdbcUrl is required with driverClassName錯誤如下。
2020/4/13
Oracle 建立遠端資料庫連線 Create Database Links
Oracle 的Database Link讓我們可以在目前的資料庫直接存取遠端資料庫,建立database link方式如下。
2020/4/12
2020/4/11
HTTP Status Code 201 Created
HTTP 回應狀態碼201 Created
用來表示請求成功並已建立新的資源,並在Response Header的Location
欄位放入導向新資源的URL路徑。
2020/4/10
Spring Boot javax.servlet.http.HttpServletRequest ClassNotFoundException
在Spring Boot Web MVC專案中想取得HttpServletRequest
時發現此類別並不存在。
Spring Boot Security CSRF Session timeouts custom AccessDeniedHandler
Spring Boot Security 因Session連線過期(session timeout)而導致CSRF驗證失敗的自訂拒絕存取的處理方法如下。
Floyd Cycle Detection Algorithm 龜兔賽跑算法
Floyd Cycle Detection Algorithm(Floyd判圈算法),又稱Tortoise and Hare Algorithm(龜兔賽跑算法),此演算法可用來判斷LinkedList(鏈接串列)或是否存在cycle(環),並找出環的起始節點及算出cycle的長度。
Spring Boot 自訂Controller請求參數Bean Validation
本篇介紹如何在Spring Boot使用自訂Java Bean Validation驗證器(custom Java Bean validation)對Controller的請求物件欄位(field)進行格式驗證。
Windows Chrome DNS_PROBE_FINISHED_NXDOMAIN 無法上網
今天因為家裡的中華電信網路忘了繳費被停了,所以筆電改用iPhone的手機熱點來上網,但在Windows 7用Chrome瀏覽器上網時除了Google,Youtube的和少部分網站可以正常連線外,多數網站都無法正常連線並提示DNS_PROBE_FINISHED_NXDOMAIN
的錯誤訊息。
Spring Boot server session timeout連線到期時間設定
Spring Boot 設定內置Server Session連線時間到期(Session Timeout)的方法如下。
Spring Boot Test TestRestTemplate測試GET, POST範例
Spring Boot Test使用TestRestTemplate
測試GET
,POST
RESTful API範例如下。
Spring Boot Test @SpringBootTest的作用
在Spring Boot專案撰寫單元測試(Unit Test)時要在測試類別前加上@SpringBootTest
注釋,例如下面是被測試的Controller類別。
WordPress <br> 沒有作用
今天發現就算在WordPress(版本為5.3.2–zh_TW)的HTML編輯器使用<br>
也不會有斷行效果,因為WordPress在渲染原始HTML內容會過濾掉<br>
。
Oracle CURRENT_TIMESTAMP 與 SYSTIMESTAMP 區別
在Oracle PL/SQL 可以用CURRENT_TIMESTAMP
或SYSTIMESTAMP
取得現在日期時間。兩者差別如下。
Spring Boot + JUnit 5 使用 MockMvc 測試 RestController API
Sprinb Boot 使用JUnit 5搭配Spring MockMvc測試RestController API範例。
2020/4/9
2020/4/7
2020/4/6
2020/4/5
Effective Java 3e - Item 19: Design and document for inheritance or else prohibit it 筆記
Effective Java 3e - Item 19: Design and document for inheritance or else prohibit it 繼承的設計與文件說明或禁止繼承 筆記。
2020/4/4
Effective Java 3e - Item 18: Favor composition over inheritance 筆記
Effective Java 3e - Item 18: Favor composition over inheritance 組合優於繼承 筆記。
2020/4/3
2020/4/2
Effective Java 3e - Item 16: In public classes, use accessor methods, not public fields 筆記
Effective Java 3e - Item 16: In public classes, use accessor methods, not public fields 公開類別使用存取方法而非公開成員變數 筆記。
Effective Java 3e - Item 15: Minimize the accessibility of classes and members 筆記
Effective Java 3e - Item 15: Minimize the accessibility of classes and members 最小化類別及成員的存取 筆記。
2020/4/1
Spring JDBC MapSqlParameterSource
當使用Spring JDBC的NamedParameterJdbcTemplate
執行SQL操作時,其提供的方法除了可用Map<String, ?>
帶入參數,也可改用SqlParameterSource
的實作類別MapSqlParameterSource
。
2020/3/31
2020/3/28
Spring JDBC JdbcTemplate 與 NamedParameterJdbcTemplate 差別
Spring JDBC在存取資料庫時除了用典型的JdbcTemplate
存取,也可用NamedParameterJdbcTemplate
存取,兩者的差別如下。
2020/3/27
2020/3/24
Git 移除未追蹤的檔案及目錄 remove untracked files and directories
Git 移除未追蹤的檔案及目錄(untracked files and directoreis)的方法如下。
2020/3/19
2020/3/18
2020/3/10
2020/3/9
2020/3/8
2020/3/7
2020/3/4
2020/3/3
Git 推送本地分支到遠端分支 push local branch to remote
Git 把本地分支(local branch)推送到遠端倉庫並建立新的遠端分支(remote branch)的語法如下。
2020/3/1
2020/2/29
2020/2/28
2020/2/26
2020/2/22
2020/2/20
2020 NIKE BQ4222 運動鞋
昨天去長庚視網膜科回診回來經過市區,想說順便逛逛街順便買雙鞋子,因為我平常上班的鞋子只剩老婆去年幫我買的一雙愛迪達慢跑鞋,材質是透氣的網織布,缺點是下雨天碰到一點水就很容易滲進去弄濕腳,所以我需要一雙比較普通的球鞋/休閒鞋做平日上班穿的鞋子。
2020/2/17
2020/2/8
2020/2/7
2020/2/4
Oracle 單行資料列 轉 垂直欄 工具 one row data to vertical column converter
Oracle SQL Developer 單列資料匯出的 text 轉垂直轉換器。
2020/1/15
2020/1/8
EMV® 3-D Secure 協定規格 Protocol and Core Functions Specification
關於EMV® 3-D Secure 協定規格文件可在EMVCo官方網站的文件庫下載。
2020/1/3
2020/1/1
Angular 使用UpperCasePipe及LowerCasePipe轉插值為大小寫
在Angular template使用插值符{{...}}
顯示component屬性內容時,可利用UpperCasePipe
轉大寫,LowerCasePipe
轉小寫。
Angular 使用ngNonBindable跳脫插值符綁定效果 escape interpolation
在Angular的template如果要跳脫插值符(Interpolation {{...}}
)的綁定效果,在所屬元素加上ngNonBindable
即可。