JAVA関連のことを調べてみた

JAVA関連のことを調べてみた
目次

【SpringBoot】AmazonS3にファイルをアップロード&ダウンロードする方法

# 概要
Spring Bootを3系にアップデートすると`javax`→`jakarta`に置き換える必要があるため、`javax`が依存関係に含まれる`spring-cloud-starter-aws`[^1]が使えなくなる(と思ったのですが、手元の環境では普通に動きました…)。
念のため依存関係が`jakarta`になっている`io.awspring.cloud.spring-cloud-aws-starter`に変更したのですが、情報が少なかったのでサンプルを公開します。

[^1]: `io.awspring.cloud`と`org.springframework.cloud`がありますがどちらでも一緒です

# 環境
– Java17
– SpringBoot
– spring-boot-starter-parent:3.2.6
– spring-cloud-aws-dependencies:3.1.1
– spring-cloud-aws-starter
– spring-cloud-aws-starter-s3

# サンプル
ストレージクラスに

元記事を表示

Javaで「引数に配列やクラスオブジェクトを渡す」の動作を確認してみた

# 概要

Javaで「引数に配列やクラスオブジェクトを渡す」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/method/index4.html

# 実装

以下のファイルを作成しました。
“`JSample4_1.java
class JSample4_1{
public static void main(String args[]){
int num = 8;
int array[] = {10, 4};

System.out.println(“num = ” + num);
System.out.println(“array[0] = ” + array[0]);

henkou(num, array);

System.out.println(“num = ” + num);
System.out.println(“array[0] = ” + array[0]);
}

private static void henkou(i

元記事を表示

【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑨例外処理の実装-

例外処理について書いています。

# 共通的な例外処理を書いてみよう

まず、例外処理とは、プログラムの実行中に発生する予期しないエラーや問題(例外)を適切に処理するための仕組みです。例外が発生したときにプログラムがクラッシュするのを防ぎ、ユーザーに適切なエラーメッセージを表示したり、エラーの原因をログに記録したりすることができます。これにより、システムの安定性とユーザー体験を向上させることができます。

controllerパッケージの中にGlobalAdviceController.javaという名前のJavaファイルを作成します。

クラスに@ControllerAdviceというアノテーションを付与します。@ControllerAdviceは、アプリケーション全体で共通の例外処理を一箇所にまとめるための仕組みを提供します。

“`java
@ControllerAdvice
public class GlobalAdviceController {

}
“`

今回は、@ExceptionHandlerというアノテーションを使って、「データベースアクセスエラーが発生

元記事を表示

【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑧戻る機能の実装-

戻る機能を作成していきましょう。

# 2.設計で検討した一覧機能をおさらい

>1.画面遷移
一覧画面 ⇔ 登録画面 ⇔ 確認画面 → 完了画面 (→ 一覧画面)
     ⇔ 変更画面 ⇔ 確認画面 → 完了画面 (→ 一覧画面)
     →削除確認画面 → 完了画面(→ 一覧画面)

>URL設計
画面名: タスク確認画面からタスク変更画面
URL: /task/back
HTTPメソッド: GET

画面遷移図にて両矢印(⇔)になっているところは、前の画面に戻ることができます。登録画面、確認画面周りで戻る処理を追加していきましょう。

# controllerクラスを書いてみよう

URL設計で検討したURLをもとにcontrollerクラスのメソッドを書いていきましょう。

確認画面から登録画面に戻る際は、入力した値がクリアされないようにしたいです。そのため、確認画面で表示した値をオブジェクトで引数として受け取り、画面に表示するようにします。

“`java
@GetMapping(“/task/back”)
public String bac

元記事を表示

【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑦削除機能の実装-

削除機能を作成していきましょう。

# 2.設計で検討した一覧機能をおさらい

> 機能一覧
4.タスクの削除
ユーザーが既存タスクを削除できる機能。物理削除。

> 画面遷移
一覧画面 → 削除確認画面 → 完了画面(→ 一覧画面)

>画面一覧
>- 完了画面
>- 削除確認画面

>画面項目
>- 削除確認画面
タイトル 出力
説明 出力
期限 出力 yyyy/mm/dd
ステータス 出力 変更のときのみ
完了 ボタン 削除処理を実行し、完了画面に遷移
もどる ボタン 確認画面に遷移

>- 完了画面
完了メッセージ 出力 
“The data was successfully deleted.”削除したときのみ表示
go to list ボタン 一覧画面に遷移

削除機能は、削除内容を確認して削除を実行します。画面のUIとしては、既存の画面イメージとよく似ているようです。

削除確認画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605915/dcff528b-4670-f

元記事を表示

【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑥変更機能の作成-

変更機能を作成していきましょう。

# 2.設計で検討した一覧機能をおさらい

> 機能一覧
3.タスクの変更:
ユーザーが既存タスクを変更できる機能。タイトル、説明、期日、ステータスの変更が可能。

> 画面遷移
> 一覧画面 ⇔ 変更画面 ⇔ 確認画面 → 完了画面 (→ 一覧画面)

>画面一覧
>- 変更画面
>- 確認画面
>- 完了画面

>画面項目
>- 変更画面
タイトル 入力/出力 100文字まで/必須
説明 入力/出力 200文字まで
期限 入力/出力 必須 yyyy/mm/dd
ステータス 入力/出力 必須 0~3までの範囲
確認 ボタン 確認画面に遷移
もどる ボタン 一覧画面に遷移

>- 確認画面
タイトル 出力
説明 出力
期限 出力 yyyy/mm/dd
ステータス 出力 変更のときのみ
完了 ボタン 登録/変更処理を実行し、完了画面に遷移
もどる ボタン 確認画面に遷移

>- 完了画面
完了メッセージ 出力 
“The data was successfully updated.”変更したときのみ表示
go to list ボタン 一覧画面に遷移

元記事を表示

【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-⑤新規登録機能の作成-

新規登録機能を作成していきましょう。

# 2.設計で検討した一覧機能をおさらい

> 機能一覧
>1.タスクの登録:
ユーザーが新しいタスクを入力し、ToDoリストに追加できる機能。タスクの登録項目としては、タイトル、説明、期日がある。

> 画面遷移
一覧画面 ⇔ 登録画面 ⇔ 確認画面 → 完了画面 (→ 一覧画面)

> 画面一覧
> – 登録画面
> – 確認画面
> – 完了画面

> 3.画面項目
>- 登録画面
タイトル 入力 100文字まで/必須
説明 入力 200文字まで
期限 入力 必須 yyyy/mm/dd
確認 ボタン 確認画面に遷移
もどる ボタン 一覧画面に遷移

>- 確認画面
タイトル 出力
説明 出力
期限 出力 yyyy/mm/dd
ステータス 出力 変更のときのみ
完了 ボタン 登録/変更処理を実行し、完了画面に遷移
もどる ボタン 確認画面に遷移

>- 完了画面
完了メッセージ 出力 
“The data was successfully saved.”登録したときのみ表示
go to list ボタン 一覧画面に遷移

> 4.バリデ

元記事を表示

【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-④一覧機能の作成-

一覧機能を作成していきましょう。

# 2.設計で検討した一覧機能をおさらい
> 機能一覧
2.タスクの一覧表示:
ユーザーがToDoリスト内の全てのタスクを閲覧できる機能。タスクのタイトル、説明、期日、ステータスを表示。
 ステータスは、未着手、作業中、完了

> 画面遷移
一覧画面 ⇔ 登録画面 ⇔ 確認画面 → 完了画面 (→ 一覧画面)
     ⇔ 変更画面 ⇔ 確認画面 → 完了画面 (→ 一覧画面)
     →削除確認画面 → 完了画面(→ 一覧画面)

> 画面一覧
>- 一覧画面

> 画面項目
>- 一覧画面
新規登録 ボタン 新規登録画面に遷移する
タイトル 出力 繰り返しあり
説明 出力 繰り返しあり
期限 出力 繰り返しあり yyyy/mm/dd
変更 ボタン 変更画面に遷移・繰り返しあり

ここまでみていくと、一覧画面が一覧機能をつかさどっていることがわかります。登録済のタスクが一覧で並んでいて、登録画面や変更画面、削除確認画面へも遷移することができます。また、ユーザーが最初に遷移する画面にもなっていますので、今回のTODOアプリケーションの肝になる画面

元記事を表示

【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-③実装方針と環境構築-

本稿では、TODOアプリケーションのファイル構成や環境構築について記載をしていきます。また、実装する上で知っておいた方がよい知識もまとめてみました。
実装は次の投稿からはじまり、本稿は知識を入れるための読み物の位置づけです。

# 今回TODOアプリケーションを実装するファイル構成
今回のTODOアプリケーションのファイル構成は以下の通りです。

“`
ファイル構成
tutorialTodoApplication
|-src/main/java
|-com.example.demo
 |-ServletInitializer.java
 |-TutorialTodoApplication.java
|-com.example.demo.common
 |-Constants.java
|-com.example.demo.controller
 |-TaskController.java
 |-GlobalAdviceController.java
|-com.example.demo.entity
 |-Task.java
|-c

元記事を表示

【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-②設計-

todoアプリケーションの設計をしていきます。

# はじめに

設計とは、アプリケーションの要件に基づいて、アプリケーション全体の構造や動作を計画するプロセスです。良い設計は、アプリケーションの拡張性、保守性を高め、開発プロセス全体の効率性を向上させることを期待されます。

難しく書きましたが、要するに、要件をもとにシステムに実装する機能を明確化、具体化していくプロセスです。エンジニアはこの設計(How)の部分で価値を発揮することを期待されます。

設計では、主に「画面・機能・データ」 を検討します。この単位だとまだ大雑把なので、もう少し検討しやすい形に整えます。設計する単位まで落とし込むと、今回は以下の4つを検討しTODOアプリケーションを設計していきます。実際の案件では、もっとたくさんの仕様書を作成することもあるかもしれませんが、今回では最低限必要なものだけピックアップしてしました。

TODOアプリケーションの作成プロセスを、「仕様を考える」と「仕様をコーディングする」とわけたときに、「仕様を考える」に該当する最低限必要なものを設計として扱うことにします。例えば、コードを書くと

元記事を表示

【Java】Spring Bootを使ったToDoアプリケーションを作成しよう-①イントロダクション-

JavaのフレームワークであるSpring Bootを使ってToDoアプリケーションを作成していきます。ToDoアプリケーションの作成を通じて、Javaアプリケーション全体で使う基本知識を整理していきます。

「Javaやhtml、SQLの基礎学習を1周終え、小規模なアプリケーションを作ってみたい人」や「Javaを扱うエンジニアとして少し経験を積んできたが知識の抜け漏れを確認したい人」が本稿をみたときに基本知識を理解できるような記載を意識し、必要な知識の言語化を図っていきます。

画面が遷移したり、登録してみたり動くものを作成してわくわくした体験をかけたらいいなと思います。さらに、動いたものを作って終わりでなく、例外処理や楽観ロックなどエラーを想定したコードも書いていきます。

# 何をするのか/しないのか
Todoアプリケーションの作成を行い、主にJavaを書くところに注力します。設計から実装までを対象範囲とします。ただしJunitの実装はスキップします。

また、webやJavaの基礎知識は触れません(基礎知識から記述すると膨大な量になってしまうので)。あくまでも、Todoアプリケ

元記事を表示

【Java/Spring Boot 】画面からコントローラに値を渡す方法

Java の Spring Boot を使用して、画面からコントローラ(Controller)に値を渡す方法はいくつかあります。以下に、主な方法を整理しました。

## 1. リクエストパラメータを使用する(@RequestParam)

クエリパラメータとして値を渡し、コントローラで`@RequestParam`アノテーションを使って取得する方法です。

例:
URL: `/users?name=John`

“`java:UserController
@Controller
public class UserController {

@GetMapping(value = “/users”)
public String getUsersByName(@RequestParam(“name”) String name) {
System.out.print(“name:”+name);// Expected output: name:John
return “index”;
}
}

“`

## 2. URL パス変数を使用

元記事を表示

Spring IOCとDIの理解方法

**制御反転(Inversion of Control)** を理解するには、まずソフトウェア設計の重要な思想である**依存性逆転原則(Dependency Inversion Principle)** を理解することが必要だと思います。

**依存性逆転原則(Dependency Inversion Principle)** とは何でしょうか?例えば、車を設計するとします。最初に車輪を設計し、その車輪の大きさに基づいてシャーシを設計します。その後、シャーシに基づいて車体を設計し、最後は車体に基づいて車全体を設計します。ここで「依存関係」が発生しています:車は車体に依存し、車体はシャーシに依存し、シャーシは車輪に依存しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809422/b0d8463a-f67e-c802-bf76-0352e35860f9.png)

このような設計は一見問題なさそうですが、メンテナビリティが非常に低いです。例えば、設計が完了した後、上司が市場の

元記事を表示

No.11 変数・データ型

【動画URL】 https://youtu.be/SKcj2QjdqNI?feature=shared

◆かごの様なイメージ

◆ある手段(後述)を取らないと1つのかごに1つの商品しか入らない

◆かごに名前をつけたものを変数名という
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3680113/72d4b3b7-8b5f-578f-e449-a55fadeaf74d.png)


【動画URL】 https://youtu.be/ur83kCFPnE8?feature=shared

変数(かご)にどの様な値(もの)が入るか指定しないといけない

基本型(プリミティブ型)
boolean true or false
char 1文字を扱う、シングルクォーテーションでくくる(‘あ’)
byte 8ビット整数 -128~127
short 16ビット整数 -32,768~32,767
int 32ビット整数 -2,147,483,648~2,147,483,647
long 64ビ

元記事を表示

Javaにおけるガベージコレクションについて

## はじめに

Java Silverの学習を進めている際、ガベージコレクション(GC)という言葉が出てきました。

基本情報技術者試験の勉強の際、なんかメモリを掃除してくれる機能、というような認識程度で詳しくは知らなかったので、Javaにおけるガーベジコレクションについてまとめてみようと思います。

※誤りありましたら、ご指摘いただけますと幸いです。

## 想定読者
初学者の方
普段Javaを使用している方

## ガベージコレクション(GC)とは
日本語にすると「ゴミ回収」となるように、自動的に不要なメモリ領域を解放するプロセスのことを指します。

Javaプロセスを開始する際、メモリの割り当てが行われるわけですが、主に使われる領域のことを**ヒープ領域**と呼びます。

ちなみに、JavaはGCを自動で行ってくれますが、CやC++といった言語では、プログラムが使用するメモリ領域の割り当てやメモリ領域の解放を、明示的に指示する必要があります。

そのため、普段実装していてこの辺りはそこまで意識することはないかと思います。

元記事を表示

HTMLのaタグを使ってPOST送信する方法。

## はじめに
Spring Securityを用いてログイン・ログアウト機能を実装していた際、POSTリクエストを送りたいところ、aタグではGETリクエストが送られてしまうため、下記実装を行いました。

formタグでpostにしてダイレクトに送ってもいいんですが、aタグを使用して送りたいケースも仕様によっては考えうるケースかと思います。

この辺に疎いので一つひとつ実装解説も併せて、備忘録という形で残したいと思います。

※誤りありましたら、ご指摘いただけますと幸いです。

## 想定読者
初学者の方
フロントも頑張りたい方

## 実装の中身

#### html

“`

脱運用管理システム… xxを使わずに、Azureでアプリのログを監視する

# はじめに
Azureでシステム開発を請け負うことになりそうなのだが、
とっても高価な運用管理システムを使うのはコスト的に見合わないプロジェクトって、監視とかどうするんだっけな?と思って調べ始めたのがきっかけで、「Applicaiton Insights」というものにたどり着きました。

当初は、Spring BootアプリのLoggerからデータを飛ばせたらなと思いつつ、調査を始めたのですが、
この「Applicaiton Insights」を使えば、各種アプリのメトリクスも取得できそうなので、合わせてやってみようと思います。

最終的には、よくあるアプリの監視で、一定レベル以上のログが出力されたら、メールを生成して何か起こっているよと伝えることを目標とします。脱運用管理システムです。

# Azure Monitor
統合モニタリングサービスです。このサービスを使用することで、Azureリソースのパフォーマンス、可用性、セキュリティをリアルタイムで監視することができます。

# Application Insights
Azure上で動作するアプリの、パフォーマンスモニタリングを

Javaで equalsと hashCodeを使ってみた(+ HashMap)

こんにちは。
この記事では、私が勉強した内容を実際に業務にどのように活かしたのかについて説明していきます。

Javaを勉強し、業務で使用していても**equals**と**hashCode**をoverrideして使う場面は、それほど多くはないと思います。
私も、**equals**と**hashCode**について勉強したことはありますが、実際に使ったことは全くありませんでした。
しかし、今回のプロジェクトで使う機会があって、その経験を皆さんに共有したいと思います。

# 問題状況(案件)
病院で診療情報を保存する状況があると想定します。
医師は患者の診療を終え、その診療情報を保存するたびに、以下のような形式でDBに保存されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678234/fde42ef5-e09a-db64-e2fa-e0f063895380.png)

各カラムは
– 患者ID:患者に付与されるID pk
– 作成日:診療記録作成日 pk
– 項目:診療に関す

SpringDIで生成されるオブジェクトを扱う際に注意すること

https://qiita.com/gengen0719/items/65cab20943bf4cce61ca

こちらの記事の続きです。
SpringDIを使って生成されるBeanの取り扱いで注意するべきことを書きました。

# Beanは通常シングルトンである

例えば以下のような実装をします。

“`Java
@Controller
public class DemoController {

private final CaluculationService incrementalService;

public DemoController(IncrementalService incrementalService) {
this.incrementalService = incrementalService;
}

@GetMapping(“incremental”)
public String calc(Model model) {
model.addAttribute(“result”, incr