JAVA関連のことを調べてみた2022年04月26日

JAVA関連のことを調べてみた2022年04月26日

SpringBootTestでのテスト

# はじめに
SpringBootで作ったWebアプリにテストコードを実装しました。

# 実行環境
OS:Mac
JUnit:JUnit5.8.2
Java:Amazon Corretto 8
Spring Boot:2.6.1
Gradle:gradle6.8
IDE:intellij idea community edition 2021.1

# テスト環境を構築
## spring-boot-starter-testを使用する
「spring-boot-starter-test」を使用することで、
SpringBoot上のコードをテストするのに必要なライブラリを使用出来ます。

含まれるライブラリは以下の通り

| ライブラリ | 備考 |
|——-|——-|
| JUnit5 | Javaアプリケーションの単体テストのための事実上の標準ライブラリ。|
| Spring Test
Spring Boot Test| Spring Bootアプリケーションのユーティリティ。
統合テストのための機能をサポートしています。 |
| AssertJ |

元記事を表示

Java SE 11 Programmer II (1Z0-816-JPN) を受験したので、学習プロセスをまとめてみました

# 始めに
 先日、Java SE 11 Programmer II (1Z0-816-JPN) を受験して無事合格できました。
参考の1つになればと思い、自分の学習方法をまとめ、公開してみようと思います。

# 費やした期間(時間)・お金
 「Java SE 8 Programmer I」を取得したのが一昨年の終わりくらいで、若干期間を空けて学習を開始したのですが、正味の期間としては大体1年弱だと思います。
平日朝の出勤前と休日の昼間に学習を進めていて、3~6 時間 / 週 くらい費やしていました。[^05]

 掛かったお金ですが、上記資格に対応した模擬試験付きのテキスト[^10]を2~3冊[^12]と、本試験の受験料なので、テキスト代を4,000円/冊として概算で
  4,000 円 × 3 + 32,340 円 = 44,340 円
くらいです。

 資格を取得された他の方の合格体験記を見ると、3ヶ月~半年でテキスト1冊何度も解いた方が多い気がしたので、自分はどちらかと言えばリソース多めに割いていた方かなと思っています。[^15]

# どんな風に学習を進めていたか?
 購入し

元記事を表示

【Java】1からNを複数行で表示する【標準入力】

python3以外の言語を学ぶべく問題を解くにあたって、標準入力の知識が必要になる。
ループ処理の問題の中でも基本的な

“`
//入力する値
N
“`

“`
//出力する値
1
2

n
“`

という問題に対してどのように対処するか考えた。
原則、出力する値一行目は1から始まるものとする。

このような複数行の表示はpython3でfor構文に世話になったためこちらでもforを使う。

“`java
import java.util.*;

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//標準入力を取得する

int n = sc.nextInt();//取得した標準入力を数値にする
for (int i = 1; i < n + 1; i++) {//出力する値一行目は1から始まるもの System.out.println(i); } sc.close()

元記事を表示

「マイクロサービスパターン」の復習 11章 横断的関心事

## 11章 本番環境に耐えられるサービスの開発

– 機能要件とは別に、サービスを成り立たせる上で必要な横断的関心事の話
– 横断的関心事とは、セキュリティ、設定可能性、可観測性とされている
– 横断的関心事はたくさんあるので、それらをある程度まとめて扱える、マイクロサービスシャシーや、その派生であるサービスメッシュについての説明

## セキュリティ

– セキュリティの主要な4要素:認証、認可、監査、セキュアな通信
– ここでは認証と認可をとりあげる
– モノリシックでの認証
– HttpSessionや、それよりも少し上位のセキュリティコンテキストAPIなどが認証情報の保持に使われる
– どちらも1プロセス限定あるいは、プロセス間で共有しても密結合になる
– マイクロサービスには向かない
– マイクロサービスでの認証
– これは入口となるAPIゲートウェイで行うのがよい
– マイクロサービスでの認可
– これはサービスの詳細が必要なので、各サービスで行うのがよい
– マイクロサービスとOAuth2.0
– ここの部分の説明

元記事を表示

スレッドセーフでないSimpleDateFormatの動き

# はじめに

※別のブログに投稿していた記事をQiitaに投稿し直しています。(元の記事は削除予定)

SimpleDateFormatはAPI仕様にこのような記載がある。

> 日付フォーマットは同期化されません。
スレッドごとに別のフォーマット・インスタンスを作成することをお薦めします。
複数のスレッドがフォーマットに並行してアクセスする場合は、外部的に同期化する必要があります。

スレッドセーフでないことは分かるが、どのような動きになるか分からないので試してみる。

# 結論から

API仕様に記載されている通りスレッドごとにインスタンスを作成するか、
Java 8 以降であればDateTimeFormatterを使用する。

# スレッドセーフでないバージョン

staticなフォーマッタ

“`java
private static SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
“`

複数のスレッドを起動する

“`java
Consumer c = d -> notThreadSa

元記事を表示

Effective Java 第3版まとめ(項目7)

# 項目7.使われなくなったオブジェクト参照を取り除く

## 書かれている内容

* メモリ管理については考える必要がないという印象を持ってしまいがちだが、それは間違い
* オブジェクト参照にnullを設定することは、普通というよりむしろ例外であるべき
* クラスが独自のメモリを管理しているときには、メモリリークに対して注意を払うべき
(要素が解放されるときには、すべてのオブジェクト参照にnullを設定すべき)
* キャッシュもメモリリークのよくある原因
* リスナーやコールバックもメモリリークのよくある原因

元記事を表示

Spring Bootの@GroupSequenceの実行順

Spring Bootの勉強をしていて少し躓いたことがあったので備忘録として記載します

### 前提
数年ぶりにSpringを触っているレベルです
以下の書籍の6章をそのままやっているとハマる問題かと思います
[Spring 解体新書(第2版)Spring Bootが丸分かり](https://www.amazon.co.jp/gp/product/4802092865/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1,”Spring解体新書(第2版SpringBootが丸分かり”)
# 環境
・Spring Boot2.6.6
# ハマったこと
@GroupSequenceに2つのクラスを設定した時、
2つ目に設定したバリデーションの実行タイミングが初見でわからなかった

“`Order.java
@GroupSequence({ValidGroup1.class, ValidGroup2.class})
public interface Order {
}
“`
上記のような定義を行っている場合、
ValidGroup1に定義し

元記事を表示

SpringBoot開発用に、ダミーのメールサーバーを立てる

SpringBootでWebサービスを開発しています。
メール送信を実装したいのですが、メールサーバーはどうするのか迷いました。

Gmailとかでもいいですが、
Webサービスなのでいずれは独自のメールサーバーを立てたい。
しかし、そのやり方もまだよくわからない状態。
とりあえず、メール送信の機能を実装して単体テストだけでもしたい。

# fakeSMTPを使ってダミーのメールサーバーを立てる

ということで調べていたらダミーのメールサーバーを立てるといいと。
ということで今回は**fakeSTMP**を使いました。
Javaで実装されているため、環境を選ばないのがポイントです。
下記からダウンロードします(macです)。

https://macdownload.informer.com/fakesmtp/

zipファイルがダウンロードされます。
解凍するとjarファイルが出てきます。 

fakeSMTP-x.xx.jar

これを任意の場所に配置し(今回は/path/to/fakeSMTP-x.xx.jar)、
jarファイルをダブルクリックするか、
“`
java -j

元記事を表示

毎日頻繁に CI/CDビルドにコードがコミットされている模様

2022 Java Developer Productivity Report で気になった点を memo.

## Java Developer Productivity Report とは

Java のトレンドを紹介する年鑑。

## CI/CD技術のトレンド

CI/CD ビルドの完了にかかる時間

– 0~1分(6%)
– 2~3分(21%)
– 4~5分(22%)
– 6~10分(18%)
– 10分以上(33%)

1日に何回、CI/CD ビルドにコードをコミットしているか

– 1回(22%)
– 2回(16%)
– 3回(18%)
– 4回(9%)
– 5回以上(35%)

## 参考資料

https://www.infoq.com/jp/news/2022/03/jrebel-report-2022/

https://atmarkit.itmedia.co.jp/ait/articles/2204/19/news015.html

https://www.jrebel.com/resources/java-developer-productivity-rep

元記事を表示

Spring Boot でAmazon S3にファイルをアップロードする機能の実装

# はじめに
Spring Bootで作成したアプリケーション(ローカル環境)から、Amazon S3に接続して所定のバケットにファイルをアップロードする機能を実装するまでの流れをまとめました。

# 使用技術
Spring Boot 2.5.6
Spring Security
spring-cloud-starter-aws
Thymeleaf
maven
AWS(IAM,S3)

# AWS側の準備
Spring BootからS3へ接続するために、AWSで設定するのは以下2点です。
1.IAMでS3への権限を持ったユーザを作成し、アクセスキーを確認する
2.パブリックアクセスをオフにしたバケットを作成する

## IAMでS3への権限を持ったユーザを作成し、アクセスキーを確認する
IAMから「ユーザーを追加」を選択します。
![Inkedqiita-aws01._LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448205/007442dd-d074-1672-21b8-b7623a6edd7

元記事を表示

String.splitの罠

# はじめに

わざわざRDBMS等を使うまでもないとき、CSVファイルを使ったりしますが、データとしてカンマがあるとエスケープする必要があります。
そこで、フィールド区切りとしてタブを使うことが多いですが、データとしてタブや改行がない前提ならば、エスケープする必要がないです。

そこで、
“`java
String[] cols = line.split(“\t”);
“`

のようなフィールドを切り出すのですが、読み込む文字列によっては罠があります。

# 想定と異なる部分

※lineのタブ文字は、カンマにしています。

| line | cols[0] | cols[1] | cols[2] | cols.length |
|:-: |:-: |:-: |:-: |:-: |
| a,b,c | a | b | c | 3 |
| a,,c | a | | c | 3 |
| a,, | a | X | X | 1 |
| ,b, | | b | X | 2 |
| ,,c | | | c | 3

元記事を表示

未経験からのJava基礎アウトプット①

## 概要
Javaの基礎の基礎(継承の前まで)を学んだから、アウトプットしていく。
正直まだ全然イメージがわかない。どうやってこのプログラムを実装するのかもよく分からない・・・。
コンパイルして、動いて、それでどうするの?って感じです。でも、せっかく学んだこと忘れたくないし!繰り返し勉強していけば理解できるはず。
初心者の手探りのアウトプットなので、間違っているところがあれば教えていただければと思います。随時修正します。

## クラスの作成

クラスの作り方は
“`Java:
public class HelloWorld{}
“`

– 頭文字は大文字にすること。
– {}これを「クラスブロック」という。
– クラスの中にさらに「mainメソッド」のブロックを作っていく。

“`Java:
public static void main(String[]args)
“`

・・・文字列の意味はまだ分からず。実際使うときはstaticが入っているほうが少数だと聞いた。
– mainメソッドのクラスブロック内に囲われた部分を「スコープ」という。
## 文字の出力
“`J

元記事を表示

【Spring】ローカル環境からAWSを使うときのgradleの設定

# 概要
Eclipse(ローカル環境)で開発しているSpringアプリケーションから、APIを用いてAWSのサービスに接続しようとした際に出てきたエラーへの対処法についてまとめます。

# エラー内容
下記記事を参考にapplication.propertiesを記述してみたところ・・・
– [spring-cloud-starter-awsがローカル環境でエラーになる場合の最低限の対応](https://www.bunkei-programmer.net/entry/2019/01/26/232605)
– [Spring Bootでローカル環境からAWSを利用する際の設定](https://reasonable-code.com/spring-boot-aws-local/)

“`:application.properties
# アクセスキー ID
cloud.aws.credentials.accessKey=${AWS_ACCESS_KEY_ID}
# シークレットアクセスキー
cloud.aws.credentials.secretKey=${AWS_SECRET_A

元記事を表示

Javaの設定がうまくいかない。【javac】

# Javaの学習を昨日始めました

Javaかなるほど。貴様がプログラミング四天王の一人。
ふん。戦闘力三万。まあまあだな。だが!!

#### くらえ!!!!!

### javacしてみたら

~~~
$ javac Ready.java
bash: javac: command not found
~~~

なに?カリキュラム通りのはず。まさか….デマだと!!!(カリキュラム作成してくださった方すいません)

この俺を騙したな!!!!

ゆるさん!!

しかたない。調べるか。

## 環境変数の設定

どうやら環境変数の設定がうまくいっていないみたいです。
javaをインストールしたあとjavaのフォルダが作成されるらしいのですが、作成されているかわからず、フォルダ検索しても見つかりませんでした。

仕方なく、グーグルの検索欄でこう入力してみると

![スクリーンショット (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0

元記事を表示

Javaのfinal修飾子はどこで使用するべきか?

## final修飾子とは?
– クラス
– フィールド
– メソッド
– 変数
につけることができます。
各要素を変更不可にする場合に使用します。
## 必須または可能な限り推奨
– **定数**(必須)
– immutableなクラス(必須)
– ライブラリ内での根幹に関係するメソッド(推奨)
### 定数
“`java
public static final int PI = 3.14;
“`
後から変更するべきでない、または変更してはいけないオブジェクトにfinalをつけることで
定数とすることができます。
定数の宣言時は変数名を`UPPER_SNAKE_CASE`のように表現するという命名規則があります。

### immutableなクラス
“`java
public final class Hoge {
//フィールドの宣言
private final id;
private final name;

//コンストラクタで値を設定
public Hoge(int id, String name) {

元記事を表示

例外処理の実装方法(Java)

今まで例外処理として、try-catch、throws等について、理解されていないままプロジェクトに参画されている方を結構見てきました。
これからプロジェクトへ参画される方や、実は自分もよくわからないまま実装しちゃってる・・・って方向けに例外処理の実装方法を簡単に説明します。

# 目次
[1.例外クラス](#1-例外クラス)
[2.検査例外(checked例外)](#2-検査例外checked例外)
[3.非検査例外(unchecked例外)](#3-非検査例外unchecked例外)
[4.例外処理](#4-例外処理)
[5.まとめ](#5-まとめ)

# 1. 例外クラス
プログラム実行中に例外が発生すると、本来想定しているプログラムがそこで一旦終了され、実装した例外処理が実行されます。

Javaの、[例外クラス(Throwable)](https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/lang/Throwable.html)は、大きく分けて、以下二つの例外に分類されます。
* 検査例外(checked例外

元記事を表示

【オラクル西川です。第4報】Jakarta EE(Java EE)とSEとは、そもそも何か? 違いは?

皆さま、

金曜日の夕方ですね。
Java SE Subscriptionに含まれるGraalVMの機能の事ばかり書いておりますが、Javaの事なら、何でもご相談ください。(SEライセンスの事とかでも、お気軽にお問合せください。)

昨夜、Jakarta EEについて、ご照会を受けました。
「そもそも、Jakarta EEとJava SEとの違いは何なのか?」  とのご照会でした。
ありがとうございます。

Jakarta EE(旧名、Java EE)とJava SEの違いは下記に、よく纏まっていると思います。
(Java EEからJakartaに名前が変わった歴史も、下記サイトに詳しいです。)
https://eh-career.com/engineerhub/entry/2020/07/07/103000#Java%E3%81%AE%E6%A8%99%E6%BA%96%E4%BB%95%E6%A7%98%E3%81%A8Java-SE

>・Java SE
Javaの最も基本となる言語機能とAPI、Java VMなどを含んだプラットフォーム。Java Platform Standa

元記事を表示

Spring Bootで簡単なWebアプリを作ってみたい!【Dockerで環境構築】

# 【経緯】
こちらの記事は前記事の[Spring Bootで簡単なWebアプリを作ってみたい!【CRUD処理を実装】](https://qiita.com/takuch/items/1a29111c97a6929baff1)の続きになります。
前記事で作成したTodoアプリを簡単にデプロイできるように、Dockerで環境を構築してみようと思います。
前記事のコードをもとに進めて行きますが、構成が同じであれば同様に環境構築できるようになっていると思います。

# 【この記事でやること】
DockerでSpring BootとMySQLを使ったアプリケーション環境を構築します。
ビルド環境はmavenですが、gradleの場合の解説も補足として解説しています。

# 【開発環境】
– PC: MacBook Pro(2019)
– プロセッサ: 1.4 GHz クアッドコアIntel Core i5
– OS: macOS 12.2.1
– IDE: IntelliJ IDEA 2021.2.3(Community Edition)
– Java: openjdk 11.0.12 202

元記事を表示

Java備忘録

– [Javaファイルのコンパイル](https://qiita.com/makoto__05/private/d4ed76737d462c1a89b1)

– [Eclipseの基本](https://qiita.com/makoto__05/private/dfeee26e265b3cb0c8a8)

– [Javaのデータ型と算術子](https://qiita.com/makoto__05/private/42a6ab97501fee32547d) 
– [配列とコレクション](https://qiita.com/makoto__05/private/4f24ee53e41822e94de2)
– [制御文](https://qiita.com/makoto__05/private/436de93c91ae6bba8ba6)
– [クラスの基本](https://qiita.com/makoto__05/private/846f188f143b2d2ddf33)
– [クラスの継承](https://qiita.com/makoto__05/private/b283715716

元記事を表示

【Java】10分いないでわかるファイル操作

# はじめに
皆さん、java.io.Fileクラスとjava.nio.file.Filesクラスをご存知でしょうか。この2つを理解する事によって、ファイル操作をすることができるようになります。それでは詳しく見ていきましょう。

# Fileクラスとは?
java.io.Fileはフォルダー/ファイルの情報を管理すると共に、フォルダー/ファイルを操作するための手段を提供するクラスです。具体的にPathを扱う方法はFileクラスのコンストラクタにファイル名やディレクトリ名を渡して、インスタンスを生成するとカレントディレクトリーにあるパスを扱うことができます。

“`
File file = new File(“x.text”);
“`
# 使用方法

## ファイルの存在を確かめ、存在しなければ新しいファイルを作成する方法
まずファイルの存在を確かめる為には**exesitsメソッド**を使用する必要があります。exsitsメソッドは目的のファイルが存在すればtrue、存在しなければ、falseを返します。
そして、新しいファイルを作成する為には**createNewFileメソッド

元記事を表示

OTHERカテゴリの最新記事