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

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

Spring Session JDBC デフォルトテーブル名の変更

## 環境
Mac OS Sonoma : 14.6.1
Eclipse IDE : 2024-09 (4.33.0)
Spring Framework : 6.1.13
Spring Boot : 3.3.4
Spring Security : 6.3.3
Spring Session JDBC: 3.3.0
Eclipse Embedded Maven : 3.9.9
JDK (Java Development Kit) : 21
MySQL Server : 8.0.28 MySQL Community Server – GPL(Dockerコンテナ上に構築)

:::note warn
注意
情報が正確かつ明確であるよう努めていますが、間違いや不完全な説明があるかもしれません。
内容を改善するためのフィードバックや修正を歓迎します。 ご理解のほど、よろしくお願いいたします。
:::

## 前提
①なんらかのSpring Bootプロジェクトが作成済みであること。
②セッション管理を必要とする処理が実装されていること。(今回はあらかじめ、ログイン機能が実装されています。)

元記事を表示

ログイン認証について

# はじめに

SpringSecurityを使用したログイン認証については、framework内で処理が行われているため、少々わかりにくいことがあるかと思います。認証プロセスを理解することで認証周りの開発も躓くことなく進められると思いますので、認証プロセスについて解説していきます。

# SpringSecurityを使用した認証プロセス

ログイン認証時のユーザー名とパスワードの検証は、Spring Securityの認証プロセス内で行われています。具体的には、以下の流れになります。

1. ユーザがログインフォームからユーザ名とパスワードを入力して送信します
1. “`UsernamePasswordAuthenticationFilter“`がリクエストを受け取り、ユーザー名とパスワードを抽出します
1. “`AuthenticationManager“`によって認証プロセスが開始されます
1. 取得したユーザー情報のパスワードと、入力されたパスワードを“`PasswordEncoder“`を使用して比較します
1. パスワードが一致すれば認証成功となり、ユーザーの

元記事を表示

【Java】JUnitの基本操作

# 概要
JUnitの基本操作について学習した際の備忘録です。

# JUnitによるテストのメリット
– テストに要する工数の削減。テストケースが体系化されており、一度作成したテストケースは何度も利用可能であるため
– 使用やソースプログラムの機能が明確になる
– コード変更による退行を防ぎ、リファクタリングを促進させる

# 網羅条件
– 命令網羅(statement coverage)(C0)
全ての命令を少なくとも1回は実行するテストを行う
– 分岐網羅(branch coverage)(C1)
分岐のパスを全て少なくとも1回は通るテストを行う
– 条件網羅(condition coverage)(C2)
分岐の際の判定条件が複数ある場合に、それぞれの条件が真あるいは偽になる場合を少なくとも1回は含むテストを行う

# JUnitの設定と基本操作
Eclipseを使用する場合の設定と基本操作です。バージョンはEclipse(pleiades all in one)2023です。
### テストケースの作成
1. テスト対象クラスを右クリック
1. 新規>その他>Java>JUn

元記事を表示

Java SE Gold で勉強したことメモ(Enum編 その2)

JavaのEnum型のクラスにはコンストラクタを定義することができるみたいです。
Enum型の列挙子はEnumを使用するタイミングでJVMが自動であまねくインスタンス化するらしいです。

また、JavaのEnumはほかの言語のEnumとちがってクラスとして定義されていて、Objectを継承、Serializable、Comparableを実現しているため、toString()やhashCode()、compareTo()などのメソッドが用意されています。

それを踏まえたうえで、以下のコードは次のような結果になります。

“`php:EnumSample.java
public enum EnumSample{
Gold(“Gold!”),Silver(“Silver!”),Bronze(“Bronze!”);
private String value;

private EnumSample(String value){
this.value = value;
System.out.println(this.value);

元記事を表示

Java SE Gold で勉強したことメモ(Enum編)

JavaのEnum型のメソッドで以下のようなものがあるみたいです。
“`php:EnumSample.java
public enum EnumSample{
Gold,Silver,Bronze
}
“`
“`php:Main.java
public class Main{
public static void main(String[] args){
//EnumSampleの列挙子を配列型で返すvaluesメソッド
for(EnumSample e: EnumSample.values()){
System.out.println(e);
}
}
}
“`
[Java SEのAPI](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Enum.html)にもvaluesメソッドは載っていないようです。

使いどころあるかもしれなさそうだったのでメモしておきます。
間違っている箇所があれば教えてください。

元記事を表示

Singly linked list (単純連結リスト)

LeetCode で初見の下記の表記にビビって扱いの理解に数時間かかったがどうもしっくりこない。

“`
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
“`

https://leetcode.com/explore/learn/card/the-leetcode-beginners-guide/692/challenge-problems/4426/

このチュートリアルの動画がとても詳しく説明してくれていて初心者にためになる。
10分で理解できるのでこれを見るべし。

元記事を表示

Spring Retryを使用してリトライ処理を簡単に実装する

## はじめに

Webアプリケーションにおいて一時的なネットワーク障害や外部APIの応答遅延といったエラーが発生することがあります。
これらのエラーは再試行(リトライ)によって回避できる場合がありますが、手動でリトライロジックを実装するのはなかなか面倒です。
そこでSpringに備わっている機能のSpring Retryを使うことで、簡単にリトライ機能を実装することができます。

## Spring Retryとは?

Spring Retryは、Springプロジェクトに含まれるライブラリで、例外発生時に処理を再試行するための簡単な方法を提供してくれます。
このライブラリを使うことで、以下のようなケースでリトライロジックを自動的に実装できます。

– ネットワークの一時的な障害
– 外部APIのタイムアウト
– 一時的なデータベースエラー

Spring Retryは、アノテーションベースで簡単に設定でき、リトライ間隔やリトライ回数、特定の例外に対してのみリトライを行う設定が可能です。

## Spring Retryのセットアップ

まず、Spring Retryを使用するために

元記事を表示

カスタムバリデーターを作ってより厳密にチェックをする

## `@Email`アノテーションとは

Springフレームワークの`@Email`アノテーションは、メールアドレスの妥当性を検証するための一般的な手段です。

## `@Email`アノテーションの問題

`@Email`アノテーションは、メールアドレスのフォーマットをチェックしますが、特殊文字や全角スペースのチェックは行いません。
そのため、ユーザーが不正な文字を含むメールアドレスを入力してもエラーが発生せず、登録が完了してしまうケースがあります。
この問題に対処するためにカスタムバリデーターを実装する方法を解説します。

## カスタムバリデーターによる解決策

この問題を解決するために、カスタムアノテーションとカスタムバリデーターを実装し、全角スペースを削除してからバリデーションを行う仕組みを導入します。

カスタムアノテーションの実装は次の通りです。

“`java
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Eleme

元記事を表示

JAVA で 単体テストを自動化するための JUnit についてを解説

## ■ はじめに

JAVAでコーディングしたコードの単体テストを行う際には様々な方法がありますが、
今回紹介する`JUnit`はJavaで単体テストを自動化するためのフレームワークです。

テストを自動化することは人為的なテストの漏れやミスを減らし、プロジェクトの品質向上に繋がります。
この記事ではJUnitの基本的な使い方から実際のテストケースの作成方法を解説していきます。

## ■ 目次

1. [JUnitのインストールとセットアップ](#1-junitのインストールとセットアップ)
2. [JUnitでの基本的なテストの書き方](#2-junitでの基本的なテストの書き方)
3. [アサーションを使ったテストの実施](#3-アサーションを使ったテストの実施)
4. [JUnitのライフサイクルメソッド](#4-junitのライフサイクルメソッド)
5. [まとめ](#5-まとめ)

## 1. JUnitのインストールとセットアップ

まず最初にJUnitを使うための環境をセットアップを行う必要があります。
`Maven`や`Gr

元記事を表示

JavaScript以外でもどんどん変数を定数として宣言しようという話

# はじめに
JavaScriptだとかなり認知が広まりつつある「変数はできるだけ`const`で宣言して、厳しい場合だけ`let`を使おう」という話。
なぜかJavaScript限定で話されがちですが、よく考えたらJava等でも同じようにしたほうが良いのでは?

# 例
Salesforceの文法なので厳密には違うかもしれませんが、まあJavaと似たようなもんのはず。
“`java
public static void testMethod(String inputValue) {

Boolean isXXX = checkValue(inputValue);

// 色んな処理がずらっと何十行

if (isXXX) {
// 色んな処理
}
}
“`

さあこの時、下の`if`分岐のときに`isXXX`が最初の宣言通りかどうかは、きちんとコードを全部見ないといけません。
(検索したら良いというのはもちろんですが、それは一旦置いておいて)

こういうのを避けるためにJavaScriptでは「`const`を使おう

元記事を表示

Native Memory Tracking を使用した Java プロセスのメモリ消費内訳の紹介

# Native Memory Tracking を使用した Java プロセスのメモリ消費内訳の紹介

2024年10月27(日)開催の [JJUG CCC 2023 Fall](https://ccc2024fall.java-users.jp/) にて発表した資料の共有です。

![スライド0.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622281/375970b7-0663-e1e6-245c-77c7d524c8e4.png)

![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622281/ed357ad8-334f-9151-c0c1-11f5db057375.png)

![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622281/0b9ab9d4-081e-073f-47d9-43ab

元記事を表示

【Java】関連記事まとめ

# 概要
私が投稿したJavaに関する記事のまとめです。

# 記事

https://qiita.com/ramgap/items/8d6849133ddc9dbc0be9

https://qiita.com/ramgap/items/d410160094cb7ee31228

https://qiita.com/ramgap/items/f561ab23bfb43f632bd3

https://qiita.com/ramgap/items/5038103af48042539430

https://qiita.com/ramgap/items/989ed1d5992217532e24

https://qiita.com/ramgap/items/0b9234c1b325d6716049

https://qiita.com/ramgap/items/e02ac6f122a138c858bb

https://qiita.com/ramgap/items/5ce9d27256198876d0c5

https://qiita.com/ramgap/items/76793e1ea

元記事を表示

Dev ContainersでJava8 AzureFunctions環境構築時に沼ったのでメモ

今更Java8でAzureFunctionsを構築する人なんていないと思いますが、構築の際に沼ったのでメモとして記載します(試してないですが多分Java11でも発生する)。

VSCodeからだと簡単にdevcontainerの環境を作ることができます。
1. `Dev Containers`の拡張機能をインストール
2. `F1`を押して`開発コンテナー: コンテナー機能の構築(Dev Containers: Configure Container Features)`を選択
3. `Azure Functions (Java)`を選択
4. `8-bullseye`を選択(`8-bookworm`を選択するとコンテナビルド時にエラーで止まる)
5. インストールする追加機能は自由に
6. オプションも自由に
7. `開発コンテナー: コンテナーで再度開く(Dev Containers: Reopen in Container)`

これでコンテナ完成かと思いきや

## バージョン確認
“`
$ java -version
openjdk version “1.8.0_372”

元記事を表示

プログラミングにおける”オブジェクト指向”とは?主要な概念についても解説

## ■ はじめに

`オブジェクト指向`という言葉をご存知でしょうか?
Javaはこの「オブジェクト指向」を採用している言語です。
このオブジェクト指向というのはプログラミングにおいて **データ** と **その操作** を
1つの「**オブジェクト**」として扱うことで、複雑なシステムを整理して理解しやすくするといった考え方です。

今回はそのオブジェクト指向の基本的な概念と、Javaでの実装例を用いて理解を深めていきましょう。

## ■ 目次

1. [オブジェクト指向とは](#1-オブジェクト指向とは)
2. [カプセル化](#2-カプセル化)
3. [継承](#3-継承)
4. [ポリモーフィズム](#4-ポリモーフィズム)
5. [まとめ](#5-まとめ)

## 1. オブジェクト指向とは

オブジェクト指向とはプログラムを「**オブジェクト**」という単位で組み立てていく方法のことです。
オブジェクトはデータ(またはフィールド)とその操作(メソッド)を一つにまとめたもので、
現実世界のモノや概念をプログラム上で表現していま

元記事を表示

TomcatでのDBCPのデフォルト実装を確認してみた

# 概要
JDBCを利用してデータベース関連の処理をする際に、これまではDriverManager を利用してコネクションを取得していたが、一般的には、DataSource と JNDI という仕組みを使ってコネクションを取得する方が良いということを知った。
DataSource を用いれば、リソース情報を外部ファイルに記述することができるほか、コネクションプーリングの機能も使える。
このDataSourceの実装クラスは複数あるが、Tomcatに含まれるデフォルトの実装クラスが何か知りたかったので、プログラムを書いて実験してみたところ、ところ、Tomcatバージョン8、9、10においては`org.apache.tomcat.dbcp.dbcp2.BasicDataSource`がデフォルトで用いられることが分かった。

# DataSourceのデフォルトの実装クラスは?
Tomcat には、Tomcat DBCP Pool という Tomcat に特化した実装がある。Apache common DBCP よりもパフォーマンスが優れているとされている。
実装の切り替えには、DataS

元記事を表示

Java で非同期処理 for Android :CompletableFuture 入門

# はじめに

非同期処理は、モダンなAndroidアプリケーション開発において欠かせない技術の一つです。アプリがユーザーの操作に対して素早く反応し、スムーズな体験を提供するためには、バックグラウンドでの作業(例: ネットワーク通信やファイル操作など)を効率的に行う必要があります。これを同期的に処理してしまうと、操作が完了するまでアプリ全体が固まったり、ユーザーに「フリーズしている」という印象を与えることになります。

非同期処理を正しく使うことで、こうした問題を回避し、ユーザーが操作中でもアプリがスムーズに動作し続けるように設計できます。特にAndroidアプリでは、メインスレッド(UIスレッド)で重たい処理を行うと、アプリが応答しなくなる恐れがあり、最悪の場合、システムから「アプリが応答していません」(ANR: Application Not Responding)エラーを出されてしまいます。

ここで役立つのが、Javaの標準ライブラリで提供されている **`CompletableFuture`** です。`CompletableFuture` は、Java 8 から導入された

元記事を表示

[Java]いまさら語るインスタンス化?変数初期化とインスタンス化するとメモリ上で起きること。

Javaで使うメモリ領域は2つです。
Stack(スタック)とHeap(ヒープ)と呼んでいるものです。

## Javaは型によって使うメモリ領域が異なる。
まずJavaの型によって使うメモリを使う領域が異なることはご存知でしょうか?
一般的にJavaの型には
基本型と言われる数値型(byte, short, int, long, float, double)、文字型(char)、論理型(boolean)と
参照型と言われる文字列型(String)やクラス型などがあります。

### 基本型の変数宣言と初期化

基本型の変数を宣言したとします。
(一番多く使われるのがint型だと思いますので、ここで例としてintを使いました。)

“`Java
int num;
“`

すると、
Stackメモリ領域に numという器が作られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3915991/d66c076e-0df3-32d3-6c52-5615bc26d85d.png)

変数

元記事を表示

Springboot WebSecurityConfigurerAdapterが使用できない件

# はじめに

Spring解体新書 第2版の書籍にて学習を実施していました。
11章のSpringSecurityに関する部分だったのですが、書籍通りにソースを記述しても、エラーが解消されませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1041138/b7dd0d04-034d-1ecd-92b7-8084353b4cfd.png)

***
# 問題点
`WebSecurityConfigurerAdapter`なんて存在しないよと怒られていました。。
サンプルソースとも全く同じなのに、、
“`java
package com.example.demo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import or

元記事を表示

SpringBootでとりあえず業務アプリを自作してみた ~TOP #2~

久しぶりの投稿です。
暫く子供の体調不良が続いたのであまり進められていませんでした。

今回は前回に続いてになりますが
TOPについて、少し手を加えたので記載していきます。

トップ画面

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901612/a1f8909a-5f47-e4fc-a5d5-6621b41a595f.png)

* メニューに権限管理の追加
* 現在日時の追加
* カレンダーの追加

Thymeleaf+jQueryということで、たびたび躓きましたがなんとか実装できました。

例のごとくHTML/cssはきっとだめだめです。

#### メニューに権限管理の追加
ユーザ検索画面をもとに、権限管理用のページを作成しました。
ひとまずは検索結果の表示のみです。また後日詳細に記載します。
メニューはすべてのHTMLにべた書きしているのでメンテナンスが面倒だなと思っており
ゆくゆくは共通化できたらなあと思っています。

#### 現在日時の追加
あまり悩みませんでした

元記事を表示

SQLの実行順序について簡単にまとめてみた

クエリの構文順序(書き方)は必ずしも実行順序と一致しません。データベースがクエリを処理する際の内部的な手順は、次のようなステップで行われます。

### SQLクエリの論理的な実行順序

1. **FROM句**
– まず、どのテーブルやデータソースからデータを取得するかが決定されます。必要なテーブルが結合されるのもこの段階です。

2. **ON句**(結合条件)
– 複数のテーブルが結合されている場合、`ON`句を使って結合条件が評価されます。`JOIN`が行われる際の条件をここで定義します。

3. **JOIN句**
– 複数のテーブルがある場合、それらを結合(`JOIN`)します。`INNER JOIN`や`LEFT JOIN`などの結合がこのステップで処理されます。

4. **WHERE句**
– 結合が行われた後、`WHERE`句の条件で行のフィルタリングが行われます。指定された条件に一致する行だけが残ります。

5. **GROUP BY句**
– データを集計する際に、どの列を基準にグループ化するかが決まります

元記事を表示

OTHERカテゴリの最新記事