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

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

脱運用管理システム… 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

元記事を表示

Javaで「メソッドの定義」の動作を確認してみた

# 概要

Javaで「メソッドの定義」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

以下のファイルを作成しました。
“`JSample2_1.java
class JSample2_1{
public static void main(String args[]){
hello();
bye();
hellobye();
}

private static void hello(){
System.out.println(“こんにちは。”);
}

private static void bye(){
System.out.println(“さようなら。”);
}

private static void hellobye(){
hello();
bye();
}
}
“`

以下のコマンドを実行しました。
“`
$ javac JSample2_1.java

元記事を表示

Scannerから入力を受け付けたあと、エラー処理が無限に繰り返される(Java超初心)

## 前提
最初の頃に躓いたので、記録も兼ねて記載します。
Scannerで入力を受け付けたあと、仕様外の入力(例:数字の入力を求めているのに文字を入力)などが起こった場合、エラー時の処理が無限に繰り返されてしまう対処法です。
なお、ターミナルやコマンドプロンプトが無限ループを起こしてしまったときは、
Windows:ctrl + C
Mac:Control + C
で終了できますので、「初めて知った」という方は是非ご参考ください^^

## コンテンツ
下記のように年齢の入力をユーザーに求め、入力された数字に応じて
「成人です」
「未成年です」
と表示されるjavaのコードを書きます。

“`
import java.util.Scanner;

public class ScannerBug {
public static void main(String[] args) {
// 入力受取のためのインスタンス生成
Scanner scanner = new Scanner(System.in);

while (true) {
int a

元記事を表示

JUnitの基本的な注釈とアサーションメソッド一覧

JUnitは、Javaで最も一般的に使用されるテストフレームワークです。
JUnitでよく使われる基本的な注釈とアサーションメソッドを一覧にしてまとめました。
使用方法など詳しくは以下のドキュメントをご覧ください。
[JUnit 5 ユーザーガイド](https://junit.org/junit5/docs/current/user-guide/)

# 注釈
| 注釈 | 説明 |
|:-|:-|
| @Test | テストメソッドであることを示します。 |
| @ParameterizedTest | 異なる引数でテストを複数回実行できます。 |
| @BeforeEach | テストメソッドの実行前に毎回実行されます。 |
| @AfterEach | テストメソッドの実行後に毎回実行されます。 |
| @BeforeAll | テストメソッドの実行前に一度だけ実行されます。 |
| @AfterAll | テストメソッドの実行後に一度だけ実行されます。 |
| @DisplayName | テストクラスやテストメソッドにカスタムの表示名を指定します。 |
| @Nested

元記事を表示

JAVA関連理論まとめ編

### JVMの実行方式
JVMはインタープリター方式でバイトコードを実行し、プログラムを迅速に開始し、JITコンパイラを通じて性能を最適化します。

### インタープリター方式
– バイトコードを1行ずつ機械語に変換して実行します。デバッグが速いですが、実行速度はコンパイル方式より遅いです。

### コンパイラ方式
– 実行速度が速いですが、コンパイル過程で時間がかかります。

### 文字列処理
– **String**: 不変オブジェクトで、文字列を操作するたびに新しいStringオブジェクトが生成されます。スレッドセーフです。
– **StringBuffer**: 可変オブジェクトで、文字列操作時に既存のオブジェクトの値を変更します。スレッドセーフですが、同期化による性能低下がある場合があります。
– **StringBuilder**: 可変オブジェクトで、文字列操作時に既存のオブジェクトの値を変更しますが、スレッドセーフではありません。

### スレッドセーフ
– マルチスレッド環境でスレッドが同時にそのコードやデータにアクセスしても、実行結果が同じになります。ミュ

元記事を表示

Spring BootでDAOからデータベースにアクセスしてみた-その2(クライテリア)

# 背景・目的
過去に、Spring Bootについて下記の記事にまとめました。今回は、Criteria APIによるデータベースアクセスを試します。

– [Spring BootでDAOからデータベースにアクセスしてみた-その1(DAOとアノテーション)](https://qiita.com/zumax/items/4dd856cd108d23a15188)
– [Spring Bootでバリデーションを試してみた](https://qiita.com/zumax/items/f09bacf18f3bb96d1331)
– [Spring Bootでデータを保存する-その2](https://qiita.com/zumax/items/06d0465218478840a949)
– [Spring Bootでデータを保存する-その1](https://qiita.com/zumax/items/2e387254c736659bf20c)
– [Spring Bootでデータベースへのアクセスを試してみた](https://qiita.com/zumax/items/7487b86f

元記事を表示

プライベートサブネットにEC2を置いたWebアプリケーションを作成する②

前章: [プライベートサブネットにEC2を置いたWebアプリケーションを作成する①](https://qiita.com/RHIC-0819/items/25bff36c3aacf92af28e)

## アプリケーションを立ち上げる

前回まででウェブアプリケーションの土台を作成したので、ようやく実際にアプリケーション構築に取り組みます。

本章は以下の手順で進めていきます
1. RDSを作成してEC2から接続する
1. EC2にアプリケーションを構築し、アプリケーションを立ち上げる
1. ALBを作成して、ローカルのブラウザから接続する

## 完成図
![alb-rds-ec2-完成図.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821799/d99f4a70-a09e-d1fc-b9df-91e9c347a87b.png)

## RDSの作成
マネジメントコンソールからRDSを開き、データベースの作成を選択します。

作成のポイントは4点です
1. **エンジンタイプの選択

元記事を表示

プライベートサブネットにEC2を置いたWebアプリケーションを作成する③

前章: [プライベートサブネットにEC2を置いたWebアプリケーションを作成する②](https://qiita.com/RHIC-0819/items/f3755e02e16694792c4e)

続いては、セキュリティを高める設定をしていきます。

## 手順

以下の手順で一つずつセキュリティを高めていこうと思います。

1. Route53でドメインを登録する
1. ACMで証明書を発行してHTTPS通信を有効化する
1. WAFを有効化する
1. Secrets Managerを利用して、認証情報のハードコーディングをやめる
1. [おまけ1] Cloud Frontのキャッシュを有効化してレスポンスを早くする
1. [おまけ2] Webサーバーの冗長化

## Route53でドメインを登録する

マネジメントコンソールのRoute53を開いたら、「ドメインを登録」を左のメニューバーから選択します。

取得したいドメイン名を入力しチェックアウトに進み、必要な連絡先情報を入力したら作成してください。
リクエストしたドメイン名でパブリックホストゾーンが自動作成されたら、レコード

元記事を表示

プライベートサブネットにEC2を置いたWebアプリケーションを作成する①

前章: [プライベートサブネットにEC2を置いたWebアプリケーションを作成する ーイントロー](https://qiita.com/RHIC-0819/items/76f14f82c6d6c7aadb68)

## プライベートサブネットにEC2インスタンスを配置してSession Managerで接続する

今回作成するアプリケーションは、組織内部のみでの利用を想定しており、外部からのアクセスをできる限り許可しないような形でEC2インスタンスを配置していきます。

ここで作成するゴールはEC2にSession Managerからアクセスするところまでがゴールとなっています。

![aws-qiita-ec2.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821799/94d4dd69-ddb1-8f39-6c46-76901e79aab8.png)

## VPCの用意
まずマネジメントコンソールにログインし、VPCの作成を行います。

![image.png](https://q

元記事を表示

プライベートサブネットにEC2を置いたWebアプリケーションを作成する ーイントロー

初めての投稿なので、お手柔らかにお願いします。

執筆現在では新卒1年目で、研修においてWebアプリケーション開発を課されたので、その際に作成したインフラ構成図を紹介していこうと思います。

まず、本稿で紹介するAWSの最終的な構成図は以下のようになっています。

![チームJ開発ーAWS最終構成図.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821799/9bf1902a-ce65-4389-f3e0-f1d1d35bcf01.png)

ポイントとしては題名にある通り、プライベートサブネットにアプリケーションサーバーを配置することでEC2への直接のアクセスをブロックし、セキュアなアプリケーションを構築します。

アプリケーションサーバーへのインターネットからのアクセスをブロックする大きな理由は、EC2が持っているIAM認証情報を使って、不正な操作をされる恐れがあるからです。不正なリソース作成によって予想外なコストが発生したり、本番で動いているリソースの勝手な削除を予防します。

元記事を表示

Spring BootでDAOからデータベースにアクセスしてみた-その1(DAOとアノテーション)

# 背景・目的

過去に、Spring Bootについて下記の記事にまとめました。今回は、EntityManagerによるデータベースアクセスを試します。
– [Spring Bootでバリデーションを試してみた](https://qiita.com/zumax/items/f09bacf18f3bb96d1331)
– [Spring Bootでデータを保存する-その2](https://qiita.com/zumax/items/06d0465218478840a949)
– [Spring Bootでデータを保存する-その1](https://qiita.com/zumax/items/2e387254c736659bf20c)
– [Spring Bootでデータベースへのアクセスを試してみた](https://qiita.com/zumax/items/7487b86f56ea12c31d44)
– [Sprint Bootの環境を構築したときのメモ](https://qiita.com/zumax/items/8effa97f338dd0224b22)

# まとめ
下記

元記事を表示

Java(SpringBoot)を基本からまとめたみた【入門】

## コア機能

– IOC : Inversion on Control Container
– AOP : Aspect Oriented Programming
– DAF : Data Access Framework
– MVC : Spring MVC Framework

## Spring Beanとは?

– OBJECT : An object that is managed by the Spring Framework in a Java application.
– FEATURES : Aims to simplify the complex enterprise Java application development.
– CONFUGURATION : Spring Beans can be configured using XML, Java annotations, or Java code.
– OBJECT LIFECYCLE :

## 参考サイト
[The ULTIMATE Spring Boot course | 8 HOURS

元記事を表示

Spring Bootのアノテーション基礎

Spring Bootでは、アノテーションを使用して簡潔にWebアプリケーションを構築することができます。ここでは、よく使用されるアノテーションについて説明します。

# 1. @Controller
@Controller は、Spring MVCにおけるWebコントローラーを示すためのアノテーションです。このアノテーションがクラスに付与されると、そのクラスはHTTPリクエストを処理するためのコントローラーとして認識されます。

“`java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(“/example”)
public class ExampleController {

@GetMapping
public

元記事を表示

Spring Bootでバリデーションを試してみた

# 背景・目的

前回、下記でデータの登録・更新・削除などを試しました。今回はバリデーションを試してみます
– [Spring Bootでデータを保存する-その2](https://qiita.com/zumax/items/06d0465218478840a949)
– [Spring Bootでデータを保存する-その1](https://qiita.com/zumax/items/2e387254c736659bf20c)

# まとめ
下記に特徴をまとめます

|特徴|説明|
|:–|:–|
|バリデーションのパッケージ|spring-boot-starter-validation|
|パッケージは二種類ある|・jakarta.validation
・jakarta.validation.constraints|
|標準バリデーション|以降のものがある|
|入力されているかのバリデーション|“`@Null“`
`@NotNull`
`@NotBlank`
`@NotEmpty`
|数値の範囲のバリデーション|`@Min`
`@Max`

元記事を表示

Javaで「メソッドの使い方」を動作を確認してみた

# 概要

Javaで「メソッドの使い方」を動作を確認してみました。
以下のページを参考にしました。

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

# 実装

以下のファイルを作成しました。
“`JSample1_1.java
class JSample1_1{
public static void main(String args[]){
int eigo = 78;
int suugaku = 90;
int kokugo = 68;

check(“英語”, eigo);
check(“数学”, suugaku);
check(“国語”, kokugo);
}

private static void check(String kyoka, int seiseki){
System.out.print(kyoka + “の試験結果は”);
if (seiseki > 80){
System.out.println(“合格です”);

元記事を表示

Spring Bootでデータを保存する-その2(更新と削除)

# 背景・目的
[Spring Bootでデータを保存する-その1](https://qiita.com/zumax/items/2e387254c736659bf20c)では、H2データベースを使用して、データの登録を試しました。
今回は、保存されたデータの更新や削除を試します。

# 実践
[Spring Boot 3 プログラミング入門](https://www.amazon.co.jp/Spring-Boot-3-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798069167
)の内容を参考に試してみます

## 前提
https://qiita.com/zumax/items/2e387254c736659bf20c#%E5%AE%9F%E8%B7%B5

環境構築やコードは、上記のページの状態から始めます

## データの初期化
1. コントローラークラスに

元記事を表示

Spring Bootでデータを保存する-その1(登録)

# 背景・目的
[Spring Bootでデータベースへのアクセスを試してみた](https://qiita.com/zumax/items/7487b86f56ea12c31d44)では、DBアクセスを試してみました。
今回は、[Accessing JPA Data with REST](https://spring.io/guides/gs/accessing-data-rest)を試してみます。

# まとめ
下記に特徴を整理します

|特徴|説明|
|:–|:–|
|H2|・Java SQL データベース
・高速、OSS、JDBC
・組み込み、サーバ、インメモリDB
・ブラウザベースのコンソール
・スモールフットプリント、2.5MBのJarファイル|
|H2の主な特徴|・非常に高速なデータベースエンジン
・オープンソース
・Javaで書かれている
・標準SQL、JDBC APIをサポート
・組み込みおよびサーバーモード、クラスタリングのサポート
・強力なセキュリティ機能
・PostgreSQL ODBCドライバ

元記事を表示

隙間時間にみる早見表〜OracleJavaSE11 gold | 例外 〜

# この記事について
OracleJavaSE11 goldを勉強していた時になかなか覚えられないな〜っとなっていた内容を毎回見ることができるようにこちらの書籍で勉強していた時のまとめたものです!

おすすめ書籍(勉強開始時点の書籍最新版を購入しましょう)

https://book.impress.co.jp/books/1121101020

各カテゴリごとでまとめていますので隙間時間に見てみてください。

## 例外処理
### マルチキャッチ機能
複数の例外を合わせることができる
継承関係のある例外処理はあわせて記述できない
catch(aexception |bexception e)

例外は最初にスローされたものが表示され、あとのものは内包される

## Throwble
サブクラスにerrorとexceptionクラスを持っている
独自のクラスを定義する時はexceptionを継承する。exceptionであればよくサブクラスでも構わない

**getSuppressed()**
内包された例外をThrowble型の配列で返す

## try-with-resourse

元記事を表示

OTHERカテゴリの最新記事