- 1. 【Java】ファイルクローズ漏れ発生時の挙動確認とクローズ漏れ対策
- 2. 【Docker】eclipse-temurin:19-jdk-alpineのイメージを-dオプションありでコンテナ起動するとIOException: Unable to parse columnsが発生する
- 3. Javaの実行方法について迷っていませんか?
- 4. 【make it easy】Javetを利用して、pdf-libとpdfmakeをefwに使ってみる
- 5. Javaで「区切り文字を別の値に設定する」の動作を確認してみた
- 6. デザインパターン Factoryパターン
- 7. Javaで「スキャナの入力ストリームにまだ値が残っているか確認する」の動作を確認してみた
- 8. Spring Thymeleaf css/js No mapping for GET 404 対策メモ
- 9. [Java] コンストラクタって?
- 10. PDF管理:Javaを使ってPDF文書を比較し、内容の違いを見つける
- 11. スッキリわかるJava入門 実践編 第3版 まとめ -part11-単体テストとアサーション
- 12. スッキリわかるJava入門 実践編 第3版 まとめ -part10-基本的な開発ツール
- 13. java勉強:J2V8とJavetの比較
- 14. RESTクライアントはこんなに簡単に作れる
- 15. Javaで「文字列からの入力を行うスキャナを作成する」の動作を確認してみた
- 16. Spring Security5.8で非推奨になったantMatchersがrequestMatchersで置き換えられない件
- 17. AWS CDK で Infrastructure as Code する: SpringBoot編2
- 18. 【Java・学習ログ14】日付と時刻について
- 19. Javaで「ファイルからの入力を行うスキャナを作成する」の動作を確認してみた
- 20. ModelMapperでenumマッピングのデモ
【Java】ファイルクローズ漏れ発生時の挙動確認とクローズ漏れ対策
### 【概要】
`close`メソッドの実装忘れや`try-with-resources`で実装していない場合、ファイルクローズ漏れとなります。
ファイルクローズ漏れを放置するとファイルディスクリプタの上限を超えてしまい、それ以上ファイルが作成できないエラーが発生することを確認します。Spring BootでファイルアップロードできるWebAPIを起動し、実際にファイルアップロードして確認していきます。
### 【環境】
Windows11
Docker version 20.10.21, build baeda1f
Java 19
Spring Boot 3.1.4### 【コード】
https://github.com/nobu12/file-close-leak
DemoController.java
“`java:DemoController.java
package com.example.demo.controller;import org.springframework.web.bind.an
【Docker】eclipse-temurin:19-jdk-alpineのイメージを-dオプションありでコンテナ起動するとIOException: Unable to parse columnsが発生する
### 【概要】
eclipse-temurin:19-jdk-alpineのイメージを-dオプションありでコンテナ起動すると`IOException: Unable to parse columns`が発生します。
-dオプションなしだと問題なく起動します。### 【環境】
“`terminal
C:\work>docker –version
Docker version 20.10.21, build baeda1f
“`### 【準備】
下記Dockerfileを作成します。
本記事ではC:\workに配置しています。“`docker:Dockerfile
FROM eclipse-temurin:19-jdk-alpine
“`### 【コマンド実行結果】
#### Dockerイメージ作成
“`terminal
C:\work>docker build -t sample-image .
[+] Building 2.3s (5/5) FINISHED
=> [internal] load build definition from Dock
Javaの実行方法について迷っていませんか?
# Javaを実行するには?
javaをやっていて、「実行方法がわからない~!」と挫折しかけたことはありませんか?そこで、今回は、javaを実行する方法について解説していこうと思います。
## まず、正しいプログラムを書こう
Javaは一般に、オブジェクト指向だ(クラスで成り立っている)といわれています。なので、まずクラスを書かなければなりません(まあ、クラス無しで書く方法もありますが、ここでは割愛)
例えば、”Hello World!”を出力するプログラムを書くとします。
“`java
//期待する出力=>Hello World!public class SayHello {
public static void main(String[] args) {
System.out.println(“Hello World!”);
}
}
“`
コードを解説します。まず、クラスを設定します。クラス名は”SayHello”としておきます。実際のコードは以下の通りです。
“`java
public clas
【make it easy】Javetを利用して、pdf-libとpdfmakeをefwに使ってみる
今回の記事は、以下の記事の続きです。
https://qiita.com/changkejun/items/bbb3c094c4c2e4a7a120
Javetについて、先日の記事をみてください。
https://qiita.com/changkejun/items/f08b1959fc7fd3f24a8f
# loadWithGlobalPool関数の改造
パラメータにengineとreturnVarを追加します。以下はサンプルです。
“`js
var pdfDataUri=loadWithGlobalPool({
name:”pdf-lib-javet”,
max:10,
initializer:initscript,
script:runscript,
context:{bytesIPAexgothic:bytesIPAexgothic,createdate:new Date().format(“mm:ss SSS”)},
engine:”javet”,
returnVar:”pdfDataUri”,
});
“
Javaで「区切り文字を別の値に設定する」の動作を確認してみた
# 概要
Javaで「区切り文字を別の値に設定する」の動作を確認してみました。以下のページを参考にしました。
https://www.javadrive.jp/start/scanner/index3.html
# 実装
以下のファイルを作成しました。
“`JSample3_2.java
import java.util.Scanner;
import java.util.regex.Pattern;class JSample3_2{
public static void main(String[] args){
String regex = “:|;”;
var p = Pattern.compile(regex);Scanner scanner = new Scanner(“Melon:Peach;Grapes:Orange”);
scanner.useDelimiter(p);while (scanner.hasNext()){
String fruit = scanner.next();
デザインパターン Factoryパターン
# Factoryパターン
**Creational Design Pattern** の一つで、クライアントに対してインスタンスの生成を隠蔽するためのパターン。具象クラスのインスタンス化を隠蔽またはカプセル化することで、クライアントは直接クラスを`new`演算子によってインスタンス化するのではなく、ファクトリーに生成を依頼するようになる。
これにより、クライアントコードから具象クラスがなくなり、「**変更に対しては閉じられているが、拡張に対しては開かれている**」状態となる。
Factoryパターンには以下の3種類が存在する。
+ Simple Factory
+ Factory Method
+ Abstract Factory## Simple Factory
厳密にはGoF(Gang of Four)によって定義されるデザインパターンではないが、クライアントから具象クラスを分離させるための一つのスタイルである。インスタンスを返却するメソッドがコンストラクタの役割を果たすことにより、具象クラスのインスタンス化をカプセル化する。
どの具象クラスをインスタンス化する
Javaで「スキャナの入力ストリームにまだ値が残っているか確認する」の動作を確認してみた
# 概要
Javaで「スキャナの入力ストリームにまだ値が残っているか確認する」の動作を確認してみました。以下のページを参考にしました。
https://www.javadrive.jp/start/scanner/index6.html
# 実装
以下のファイルを作成しました。
“`JSample6_5.java
import java.util.Scanner;
import java.util.regex.Pattern;class JSample6_5{
public static void main(String[] args){
String regex = “[A-Z0-9]{2}”;
var p = Pattern.compile(regex);Scanner scanner = new Scanner(“AB 7B DEB A5”);
while (scanner.hasNext(p)){
System.out.println(scanner.next());
}
}
}
“`以下のコ
Spring Thymeleaf css/js No mapping for GET 404 対策メモ
## Spring Thymeleafでstatic以下のcss/jsが読めない場合
resouces/static など固定のパスを読めるようにする
例
“`java
@Configuration
public class CustomWebMvcConfigurationSupport extends WebMvcConfigurationSupport {private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
“classpath:/META-INF/resources/”, “classpath:/resources/”,
“classpath:/static/”, “classpath:/public/” };@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern(“/webjars/*
[Java] コンストラクタって?
まず初めに、私はJava初心者であり、テキストなどで勉強をしたことをアウトプットするためにこの記事を書きました。
## コンストラクタってなに?
#### クラス名と同一名称で、インスタンス生成直後に自動的に実行されるメソッドのことである。インスタンスを生成後、以下のように初期値をセットしている。
(newで生み出されたばかりのインスタンスフィールド(nameやhp)には何も入っていないため)
“`java:初期値セット
public class Main {
public static void main(String[] args) {
Hero h1 = new Hero();
h1.name = “タロウ”;
h1.hp = 100;
…
}
}
“`実際の開発現場では複数人で開発することがほとんどであるため、1人ですべての開発を行うことはまずありえない。
そのためクラスを作るにあたっては、自分以外の開発者がこのクラスを利用することも考えておかなければいけない。
そして、それぞれ
PDF管理:Javaを使ってPDF文書を比較し、内容の違いを見つける
チームでの執筆でも、個人作業でも、PDF文書は何度も修正・更新されることが多い。 PDF文書の内容の変化をマスターすることは、文書の管理に非常に役立ちます。 PDF文書を比較することで、ユーザーはすぐに文書の追加、削除、内容の変更を見つけることができ、文書のプロセスの進化をよりよく理解し、簡単に文書を管理することができます。 この記事では、Javaプログラムを通じて[Spire.PDF for Java](https://jp.e-iceblue.com/introduce/spire-pdf-for-java.html)を使用し、**PDF文書を比較**し、文書間のコンテンツの違いを見つける方法を紹介します。
– **[JavaプログラムによるPDF文書全体の比較](#javaプログラムによるpdf文書全体の比較)**
– **[JavaプログラムによるPDF文書の指定ページの比較](#javaプログラムによるpdf文書の指定ページの比較)**この記事で使用する方法は、Spire.PDF for Javaを必要とします。Spire.PDF for Javaは、[公式ウェブサイト
スッキリわかるJava入門 実践編 第3版 まとめ -part11-単体テストとアサーション
# はじめ
こんにちは ◤●ㅅ●◥ノ今回は品質を意識しながら効率的に開発を行う手法、機能、ツールについて学びました!
## 第11章 単体テストとアサーション
### 1.不具合に対するアプローチ
開発の進み具合のこと __進捗__
開発すべき機能の範囲 __スコープ_:star: 「完成」の基準
期待される「スコープ」と「品質」の両方を満たして、初めて完成
期待される「時間」内に完成して、初めて成功品質のおおまかな段階
1.起動不能
2.強制終了
3.仕様非準拠
4.完成何で品質を確認するか
→テストを行う#### テストの種類
__単体テスト__
ある1つの部品について詳細なテストを行い、その部品単体では完成していることを検証する
1つのクラスのメソッドを呼び出し動作が正常であることを確認する
クラスの開発者が担当することも多く、ほとんどの不具合はこの段階で修正される__結合テスト__
単体テストが完了している完成部品をいくつかつないで動作させ、
うまく連携して動作するかを確認する__総合テスト(システムテスト)__
すべての部品を結合して行う最後
スッキリわかるJava入門 実践編 第3版 まとめ -part10-基本的な開発ツール
# はじめに
こんにちは ◤●ㅅ●◥ノ今回はJDKに標準で添付されているツールとそれに関連する機能について学びました!
## 第10章 基本的な開発ツール
### 1.Javaが備える基本的なツール
実務…「限られた制約の中で、最高のソフトウェアを作る」
→実践的な開発で求められるのは開発効率効率を上げるには3つの方法
1.個人の知識と技能を上げる
2.道具を使う
3.複数人で手分けをする2,3を10章以降の所で学んでいく
10章では道具を使い効率を上げる方法を学ぶ### 2.JDK
リリースされたJava標準使用を元に、さまざまな企業がその仕様に沿って動作する
JVMやコンパイラ、APIクラスなどを開発する
→それらを詰め合わせた開発者向け提供パッケージのことをJDKと呼ぶ開発用途のツールを除き、実行専用のツールのみを含んだものをJREという
※昔から存在するが、近年ではJDKのみの提供も増えている### 3.javadoc-仕様書の自動生成
複数人が協力してプログラムを作る一般的なプロジェクトでは、
プログラムに関する設計情報などを記述した __仕様
java勉強:J2V8とJavetの比較
V8はGoogleが開発するオープンソースのJavaScriptエンジンです。高速、最新ES適用など、いろいろほめられています。V8はC++のものですが、javaからV8から利用する場合、ラッパーが必要です。
– 一番有名なのは、J2V8です。だが更新が止まっているみたいで、windows向けのバージョンは2016年の4.6.0まで、async/awaitはサポートしていないです。詳細は以下のリンクから確認してください。
https://github.com/eclipsesource/J2V8
https://repo1.maven.org/maven2/com/eclipsesource/j2v8/j2v8_win32_x86_64/
– 2番めは、javetです。V8の2023年10月のv11.8.172.15、node.jsも9月v20.8.0を利用されています。認知度がJ2V8よりちょっと低いかもしれません。後発ですからJ2V8より使い勝手がいいです。
https://github.com/caoccao/Javet
“`xml
RESTクライアントはこんなに簡単に作れる
以下のライブラリが便利。
* google-http-client
* google-http-client-gsonMaven Repositoryを見て最新版を持ってくること。
# RESTクライアントを実装する上で必要な機能
* REST APIにHTTPでリクエストを送る
* レスポンスが返ってくるので受け取る
* 受け取ったレスポンスをJSONパーサで展開する# ここまでの機能がこれだけで実現できる
“`java:Main.java (一部)
HttpTransport transport = new NetHttpTransport();
Response response = transport.createRequestFactory()
.buildGetRequest(url)
.setParser(new JsonObjectParser(new GsonFactory()))
.execute()
.parseAs(Response.class);
“`“`java:Res
Javaで「文字列からの入力を行うスキャナを作成する」の動作を確認してみた
# 概要
Javaで「文字列からの入力を行うスキャナを作成する」の動作を確認してみました。以下のページを参考にしました。
https://www.javadrive.jp/start/scanner/index5.html
# 実装
以下のファイルを作成しました。
“`JSample5_1.java
import java.util.Scanner;class JSample5_1{
public static void main(String[] args){
Scanner scanner = new Scanner(“120 78 92 46”);while (scanner.hasNextInt()){
int num = scanner.nextInt();
System.out.println(num);
}
}
}
“`以下のコマンドを実行しました。
“`
$ javac JSample5_1.java
$ java JSample5_1
120
78
92
46
“`# まとめ
Spring Security5.8で非推奨になったantMatchersがrequestMatchersで置き換えられない件
# 最近結構書き方の変わったSpring Security
Spring Security5.4~あたりで、いろんなものが非推奨になったり、6.0以降では削除されたり、いろいろ変わりましたね。
WebSecurityConfigurerAdapterが使えなくなって、configureメソッド各種を`@Bean`アノテーションを付与し、Beanとして公開するように変更するのが一番大きな変更かな…と思ってます。
それで5.8~非推奨になったメソッドで、`antMatchers`と`mvcMatcher`があります。
Spring公式から出ているドキュメントでも、`requestMatchers`に置き換えられると記載してあります。https://docs.spring.io/spring-security/reference/5.8/migration/servlet/config.html#use-new-requestmatchers
でも、確かにコンパイルエラーにはならないけど、起動するとエラーで画面表示できないんですよね…
いやもしかしたら`configure(HttpS
AWS CDK で Infrastructure as Code する: SpringBoot編2
こんにちは。ただいまAWS CDK絶賛勉強中です。
https://qiita.com/masatomix/items/445335b5c216f10485c5
のつづきです。前回まででDockerイメージが作成できたので、そのイメージを使ってECSを起動していきます。
ちなみに、[前回](https://qiita.com/masatomix/items/445335b5c216f10485c5)作ったDockerイメージはこれでした。
“`console
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myorg/spring-boot-sample-tomcat 0.1.1-SNAPSHOT cdcd3af69190 3 days ago 363MB
$
“`## 前提条件
– [AWS CDK で Infrastructure as Code する: ECS編](https://qiita.co
【Java・学習ログ14】日付と時刻について
教本に沿ってやってみたシリーズ、『第15章』その2。
≪使用教材≫スッキリわかるJava入門 第3版 スッキリわかるシリーズ## ■日付と時刻
**基準日付(エポック)**…1970年1月1日0時0分0秒
日時情報を扱うには下記のような形式がある。– long型
基準日時(エポック)から経過したミリ秒で記述する方法。
現在日時を得られるSystem.currenTimeMillisメソッドを用いて処理時間の計測を行う。
“`java
public class Main {
public static void main(String[] args) {
long start = System.currentTimeMillis();long end = System.currentTimeMillis();
System.out.println(“処理に掛かった時間は” + (end – start) + “ミリ秒”);
}
“`
– date型
Javaで「ファイルからの入力を行うスキャナを作成する」の動作を確認してみた
# 概要
Javaで「ファイルからの入力を行うスキャナを作成する」の動作を確認してみました。以下のページを参考にしました。
https://www.javadrive.jp/start/scanner/index4.html
# 実装
以下のファイルを作成しました。
“`JSample4_3.java
import java.util.Scanner;
import java.io.FileNotFoundException;
import java.io.File;class JSample4_3{
public static void main(String[] args){
try{
File file = new File(“sample2.txt”);
Scanner scanner = new Scanner(file, “UTF-8”);while (scanner.hasNextLine()){
String dat = scanner.nextLine();
System
ModelMapperでenumマッピングのデモ
まず、enum Color定義します。
“`java:Color
enum Color {
WHITE(“白”, “color is white”),
BLACK(“黒”, “color is black”);private String value;
private String description;Color(String value, String description) {
this.value = value;
this.description = description;
}public String getValue() {
return value;
}public String getDescription() {
return description;
}
}
“`Catを定義します。カラー属性がある。
“`java:Cat
class Cat {
private Color color;public Cat() {
}public Cat(Color color) {
thi