JAVA関連のことを調べてみた2020年11月03日

JAVA関連のことを調べてみた2020年11月03日

1つのSpring Project内に複数のMainクラスを入れる

# 概要
プロジェクトに複数のバッチ処理がある場合、1つのプロジェクトに複数のバッチを入れる、複数のプロジェクトに分けるなどの選択肢があります。
この記事では、前者の1つのプロジェクトに複数のバッチを入れるのアプローチで、Mainクラスを分ける方法を試しました。

# 前提
“`
>gradle -v

————————————————————
Gradle 6.5
————————————————————

Build time: 2020-06-02 20:46:21 UTC
Revision: a27f41e4ae5e8a41ab9b19f8dd6d86d7b384dad4

Kotlin: 1.3.72
Groovy: 2.5.11
Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM

元記事を表示

Java9から追加されたStreamクラスのiterateメソッドの第三引数でインクリメント

#概要
本記事はJava9から追加されたStreamクラスのiterateメソッドの第三引数でインクリメントした際の挙動についてまとめたものです。
#1.Streamクラスの入力引数を三つ持つiterateメソッドについて
Streamクラスの入力引数を三つ持つiterateメソッドの使い方として、以下のようなコードで紹介されるのをよくお見かけします。

“`java:Stream.iterate使い方のサンプルコード
// 0~9までの数値を出力するコード
Stream.iterate(0, i -> i < 10, i -> i + 1).forEach(System.out::println);
“`
“`:実行結果
0
1
2
3
4
5
6
7
8
9
“`
iterateメソッドの引数はそれぞれ以下の通りです。
**第一引数**:初期値
**第二引数**:次のStreamの要素を返すための条件を返却するクラス(サンプルコード上はラムダ式で記載)
**第三引数**:次のStreamの要素を返却するクラス(サンプルコード上はラムダ式で記載)
従来のfor文に書き直すと以

元記事を表示

Note Book : OpenCV v4.5.0-dev On Ubuntu 20.04 But Didn’t work cmake build for Java

####Conclusion
1. It’s not OpenCV’s fault, It’s Ubuntu fault.
2. If OpenCV with cuda, It’s needed gcc and g++ version 8 under.

I found it. But I can’t found for Apache Ant.
https://bugs.launchpad.net/ubuntu/+source/python3-defaults/+bug/1876957
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1633839

I put it.
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1902570

####Reason
1. Because the Apache Ant symbolic is broken, link installed by apt-get.
2. It’ working. I use export CC and

元記事を表示

Java + SLF4J + Logback によるログ出力のサンプルコード

## 概要

– Java + SLF4J + Logback によるログ出力のサンプルコードを示す
– 今回の環境: SLF4J 1.7.30 + Logback 1.2.3 + Java 15 (AdoptOpenJDK 15.0.1+9) + Gradle 6.7

## SLF4J とは

SLF4J は各種のロギングライブラリのラッパーとして使えるライブラリ。

[SLF4J](http://www.slf4j.org/)

> The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time.

## Logback とは

Logback はロギングライブラリ。SLF4

元記事を表示

Javaの基本的な日付操作

人、時間、物、金を扱うプログラムは難しくなる

そんな中で時間を扱ったのでメモ

まずJavaで日付を使用するには以下をインポートする必要がある。

“`Java
import java.util.Date;
“`
その後はいつものインスタンス化

“`Java
//日付のインスタンス化
Date date = new Date();
“`

で、今回は過去日をエラーとする処理を組むので2つの処理を入れました。
今回は日付のみで時間だけでエラーチェックするようなので以下のファイルもインポートしました。

“`Java
import java.text.ParseException;
import java.text.SimpleDateFormat;
“`

java.text.ParseExceptionは日付型から文字列に変更するヤツです。
java.text.SimpleDateFormatは「YYYY-MM-DD」とかに変更できるヤツです。

“`Java
String nowDate = sdFormat.format(date);
“`

まずは、Simpl

元記事を表示

【Java】コレクション – リスト/セット/マップ/スタック/キュー

# リスト
* 配列のように要素順序があるコレクション
* **ArrayList**
* **LinkedList**
* Vector(ArrayListを優先的に使う)

# **ArrayList**
* 後からでも要素追加削除可能
* cf:配列は不可
* インデックス値による値の読み書き(ランダムアクセス)は、**位置によらず一定時間でアクセス可能**
* **値の頻繁な挿入削除は低速**
* 挿入時に確保していたメモリの領域を超えると自動でメモリ再割り当てが発生する
* →**あらかじめ要素数が想定される場合サイズ宣言しよう**
`var data = new ArrayList(30);`

“`java

import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
var list = new ArrayList(A

元記事を表示

サーブレット/JSPでWebアプリケーションを作るまで(その1)

#はじめに
プログラミング言語(Java)を勉強してきた約1年を振り返っていきたいと思います。
勉強するにあたって、目標にしたのがWebアプリケーションの作成です。
###Webアプリケーションの仕組み
Webアプリケーションの仕組みについて以下にまとめました。
![スクリーンショット 2020-11-02 131507.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/5c093bbc-7808-0c55-d597-b40308dfc90d.png)
厳密にはもっと細かいのですが、大まかにはこういった仕組みで出来ています
上記のアプリケーションサーバを作成するにあたってJavaだけでなく、データベース(SQL)、
サーブレット/JSP、HTML/CSSという技術を学びました。
#学習言語と流れ

Webアプリケーション開発の為に学習してきたプログラミング言語、流れは以下の通りです。
![スクリーンショット 2020-10-30 072205.png](https://qiita-image-

元記事を表示

基本情報設定(gradle)

[戻る](https://qiita.com/Mosaku_Anchu/items/9dbf06c34577dfc7aa9c)

#gradleの設定
アプリの基本的な設定情報はgradleとmanifestsで管理されているらしい。
manifestsにベタ打ちでもいいが、gradleを活用した方が捗りそうだ

#gradle.propertiesに値を設定
流れ的には
1. gradle.properties(プロジェクト・プロパティー)に値を追加
2. build.gradle(モジュール:app)でpropertiesの値を取得するように記述
こうすることで、build時に必要な値を生成してくれる

試しにアプリ自体と内部のDBのバージョン情報追加してみる

“`gradle:gradle.properties
#アプリの基本情報
version_major=1
version_minor=0
db_name=DB_name
db_version=1
“`
こんな感じになる
![image.png](https://qiita-image-st

元記事を表示

テスト from StringBoot

# テスト from StringBoot

元記事を表示

【Java】コレクションフレームワーク

# コレクションとは
* **オブジェクトの集合**
* java.utulパッケージ:コレクション構造を扱うための汎用クラス/インターフェース(**コレクションフレームワーク**)を提供
* オブジェクトの集合を扱う際にまず利用したい

#Collectionインターフェース
* コレクションフレームワークの基本
* 各サブインターフェースの実装クラス
* **List**:順序を持つ、要素は重複可能
* ArrayList:可変長配列
* LinkedList:リンク構造のリスト
* **Set**:要素の重複不可
* HashSet:任意順で格納された要素集合
* LinkedHashSet:追加順で格納された要素集合
* TreeSet:キーで並び替えられる要素集合
* **Queue**:先頭/末尾要素の追加、削除。待ち行列/スタックに使う
* ArrayDeque:両端キュー
* LinkedList:LinkedListと同じ
*

元記事を表示

【Java】HttpCliientでコンテンツ取得

#HTTPでコンテンツ取得
* **HttpClientクラス**(Java11以降)
* HTTP2対応
* 非同期処理
* WebSocket通信(軽量)
* モジュール(パッケージの束)
* HttpClientクラスは`java.net.http`モジュールに属する
* 現プロジェクトからモジュールへのアクセスを有効化するため/src配下に以下記述

“`java:module-info.java
module selflearn{
requires java.net.http;
}
“`

* **HttpClientオブジェクト生成**
* **newHttpClientメソッド**でインスタンス生成
* **newBuilderメソッドで動作パラメータ設定**
* 認証コード(authenticator)、接続タイムアウト時間(connectTimeout)、バージョン指定(version)など
* `var client = HttpClient.newBuilder()
.versi

元記事を表示

【Java】ファイルシステム操作

#ファイルシステム操作
* Filesクラス
* getPathメソッドでPathオブジェクトを生成
* FileSystems.getDefaultメソッドで現在のファイルシステム取得

“`java
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;

public class Main {
public static void main(String[] args) {
try {
//現在のファイルシステム取得
var fs = FileSystems.getDefault();
var path1 = fs.getPath(“./sample.txt”);
//ファイル存在確認
System.out.println(Files.exists(path1)); //tru

元記事を表示

【Java】数学演算のまとめ

#数学演算
##基本演算
* Mathクラス
* 全機能がクラスメソッド化されている
* Mathクラスのインスタンス化は不要(できない)

“`java
public class Main {
public static void main(String[] args) {
//絶対値,最大,最小
System.out.println(Math.abs(-100)); //100
System.out.println(Math.max(6, 3)); //6
System.out.println(Math.min(6, 3)); //3
//切り上げ
System.out.println(Math.ceil(1234.56)); //1235.0
//切り捨て
System.out.println(Math.floor(1234.56)); //1234.0
//四捨五入
System.out.println(Math.round(1234.56)); //1235
//平

元記事を表示

MyBatis で 自動裁判されたキーを取得する際にハマった話

MySQLのAUTO_INCREMENTで自動裁判されたID(主キー)をオブジェクトにセットしようとしたら、1がセットされてしまった。

ドメインクラス

“`java:Hoge.java

@Data
@NoArgsConstructor
public class Hoge{
private Integer id;
private String message;
}
“`

サービスクラス

“`java:HogeService.java
public class HogeService{

@Autowired
private HogeMapper hogeMapper;

public addHoge(){

Hoge hoge = new Hoge();
hoge.setMessage(“Hello”);

hoge.setId(hogeMapper.insert());

System.out.println(hoge.getId());/

元記事を表示

logbackのログがWebアプリ停止時に出力されない問題に対する対処方法について

先日・・・Webアプリケーション停止時にログが出力されないという事象に遭遇しました 😥
その原因と解決方法をメモっておこうかと思います。

# アプリケーションの構成要素

本事象が発生したアプリケーションの構成要素(ざっくりな構成要素)は以下の通りです。

* Tomcat (warデプロイ)
* Spring Framework(Spring MVC) ※諸事情により「Spring Boot」は使ってない・・・
* Logback

# なぜログが出力されなかったのか?

Webアプリケーション停止時に行う処理(破棄処理)にて、「Logbackのログ出力機能を停止する処理」が一番最初に呼び出されていることが原因でした。

ざっくりいうと以下のような流れで処理が実行されていました。

* サーブレットコンテナの停止開始
* Logbackのログ出力機能の停止
* Springのアプリケーションコンテキストの破棄処理 → **ここで出力しているログが出ない・・・**
* サーブレットコンテナの停止完了

# 誰がLogbackのログ出力機能を停止しているのか?

Logbac

元記事を表示

Javaで湯婆婆を実装してみる

##はじめに
この記事は僕が電車の中で思いついたものを元にした**ネタ投稿**です。
何か技術を書き記したものではありませんのでご容赦ください。
それから、この記事は映画「千と千尋の神隠し」のネタバレになる可能性があります。
「大丈夫!」って人だけ下に進んでください。

##コード

“`java:Yubaba.java
import java.util.Scanner;
import java.util.Random;

public class Yubaba {
public static void main(String[] arts){
System.out.println(“契約書だよ。そこに名前を書きな。”);

Scanner keiyakusho = new Scanner(System.in);
String name = keiyakusho.nextLine();

System.out.println(“フン。”+name +”というのかい。贅沢な名だねぇ。”);

Random random = new Random();

元記事を表示

【Java】Fileクラスの使い方

#プログラミング勉強日記
2020年11月1日
前回はMathクラスを扱ったが、今回はFileクラスの使い方を簡単に説明する。

#Fileクラスとは
 Javaでファイルを扱うために使うクラス。Fileはファイルまたはディレクトリを表すクラスで、ファイルの読み書きやフォルダの中のファイルの一覧取得といったファイルシステム全般で使用する。

#書き方
 取り扱いたいファイルに対して1つのFileクラスのオブジェクトを対応させる。作成したFileクラスのfileオブジェクトを使って、ファイルの内容を読み込んだり書き込んだりすることができる。なので、Fileクラスを使うことでローカルにあるファイルをJavaで扱える。

“`java:基本的な書き方
File オブジェクト名 = new File(ファイル名);

// 具体例
File file = new File(“c:\\test\\test.txt”);
“`
 具体例でも示しているのように、ファイル名を指定するときは`c:\test\test.txt`ではなく`c:\\test\\test.txt`のように`\`を2つ

【Java】プログラムの実行時間の計測方法

Javaで処理時間を計測するにはミリ秒で計測するcurrentTimeMillisメソッドと、ナノ秒で計測するnanoTimeメソッドがあります。
今回はナノ秒で計測し、秒で出力する方法です。

“`java
double start = System.nanoTime();

//計測したい処理を記述

double end = System.nanoTime();
System.out.println(“処理時間:” + ((end – start) / Math.pow(10, 9)) + “s”);
“`

Azure App Service for Java の Configuration は System.getEnv() で取得する

Azure Web App のサービスで Javaベースのアプリを実行する際、Settings – Configuration から Application settings として Name – Value の組み合わせで値を保存することができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110265/2ec8c815-4e88-a4ff-1769-62133fa66d91.png)

この値をアプリから取得するには System.getEnv() を利用する。

“`java
String serviceName = System.getenv(“KEY_NAME”);
“`

システムプロパティではなくて環境変数としてセットされるのがポイント。

以上です。

【Java】ストリーム処理

#ストリームとは
* データの流れ
* **入出力先にかかわらずデータの連なりとして同じように操作することができる**
* 入力(受け取り)/ 出力(書き出し)ストリーム
* 文字ストリーム / バイナリストリーム

|基本クラス|入力ストリーム|出力ストリーム|
|:-:|:-:|:-:|
|文字ストリーム|Reader|Writer|
|バイナリストリーム|InputStream|OutputStream|

* 基本クラスをもとに操作対象に応じ操作クラスを提供している

#ファイル書き込み
* **ファイルオープン**
* **BufferedWriterクラス**のnewBufferedWriterメソッドを使う(Bufferは文字列データを一時的に保存するメモリ領域)
* 引数に`StandardOpenOption.APPEND`指定で追記モード

* **ファイル出力**
* **writeメソッド**
* データをBufferに保存して溜まったらまとめてファイル出力
* **newLineメソッド**で改行区切り