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

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

アプリケーションのトラブルシューティング

# 序文
ことの発端はwebアプリケーションのとある画面の応答性能が遅いと言う問題が出た。
環境の構築を任された後輩から色々弄ったらアプリからの応答がなくなったとのヘルプから調査を開始した。
原因は解消したのだが、原因特定までのロジックが知りたいとの依頼を受けた。
この辺は感覚知で解決していたのでまとめる意味を込めてアウトプットしてみます。

# 具体的に何があったのか?
APサーバであるjavaのヒープサイズの最大値を上げた事によってjavaが動作しなくなった。
OSの利用メモリは余裕で空いていたのですが、Javaが起動しない。
JDKが32bitの場合、最大利用メモリ数の上限が少ない事を知っていたので解決に至りました。

エラーログから特定したのですが、エラーログをコピるの忘れました。

# 問題解決までの簡単な思考
1. 相談者を疑う
相談者へ「何をどうしたらこうなった?」を聴取をして再現性を確認する
戻せるのであれば、作業前の状態に戻して作業を再現してもらう
戻せないなら、逆手順で手順のどこで事象が発生したかを確認(デバッグ?)する

1. アプリケーション内部で何が

元記事を表示

org.slf4j.Loggerを使った拡張ロガーを作成するための忘備録

# 概要

org.slf4j.Loggerは汎用的に使用できるが、業務アプリではログ出力レベルの統一が必要。
そのためビジネスルールで定義したトレースレベルのみ出力する拡張ロガーを作成する。

# 拡張ロガークラス

org.slf4j.Loggerをラップした独自ロガークラスを作成する。
出力方法はorg.slf4j.Loggerに任せるだけ
Debugレベルは開発時のみ出力する。

“`SystemLogger.java
/**
*
*/
package jp.co.product.system.common;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* ログ出力共通クラス
*
*/
public class SystemLogger {

private Logger logger;

/**
* コンストラクタ
*
* @param cls
* @see org.slf4j.LoggerFactory#getLogger(Class)
*/
p

元記事を表示

JavaでBufferdImageのRGB誤差が指定割合以内か確認する静的関数

## 背景
* 画像の変換処理がうまくいっているかのテストで、RGB値が多少変わってしまう現象と遭遇した
* 等価判定ができなかったので、どのくらいの誤差を割合で許容するか。という作りにした。
* ニッチなニーズかもしれないが、誰かの一助になることを願ってます。

## 動作確認環境
* Java8
* JUnit4

## Code
“`java
/**
* ピクセルごとのRed,Green,Blueの色の要素値をAssertします。
*
* 要素値の差(±)は 増減 5% まで許容してます。
*/
static void assertImages(BufferedImage actual, BufferedImage expected) {
assertThat(“比較している画像サイズが異なります(縦)”, actual.getHeight(), is(expected.getHeight()));
assertThat(“比較している画像サイズが異なります(横)”, actual.getWidth(), is(expected.getWidth

元記事を表示

javaのjshellとvar がおススメ過ぎます!

最近、Javaのイベントに行ったので、そのメモになります。

# jshell
## なにもの?
何者!かというと、気軽にJavaコマンドを実行できるツールです。
Rubyだと「irb」がありますよね。

Javaだと、、Eclipse を起動して、実行?もしくは、javacでコンパイルして、java で実行?
むっちゃ手間でした。

jshellを使うと、サクッと確認できます。
こんな感じ。タブで自動保管も出来るのがチョー便利です。

“`
D:\Program Files>jshell
| JShellへようこそ — バージョン13
| 概要については、次を入力してください: /help intro

jshell> System
シグネチャ:
java.lang.System

<ドキュメントを表示するにはタブを再度押してください>
jshell> System.out.p
print( printf( println(
jshell> System.out.println(“Hello World!!”);
Hello World!!

jshell>
`

元記事を表示

日本語形態素解析「kuromoji」を使う

kuromoji Home Page
kuromoji GitHub

Gradle

build.gradle

“`text

dependencies {
compile group: ‘com.atilika.kuromoji’, name: ‘kuromoji-ipadic’, version: ‘0.9.0’
}
“`

「-ipadic」は辞書です。

対応している辞書

  • kuromoji-ipadic
  • kuromoji-ipadic-neologd:future version
  • kuromoji-jumandic
  • kuromoji-naist-jdic
  • kuromoji-unidic
  • kuromoji-unid
元記事を表示

SpringBootの例外ハンドリング

# SpringBootの例外ハンドリング

## 概要
SpringBootにおいては、SpringMVCの機能を用いた例外ハンドリングやSpringBootのAutoConfigurationと組み込みサーバーを利用した例外ハンドリングなど複数の方法で例外を取り扱うことができる。
[公式リファレンス](https://docs.spring.io/spring-boot/docs/2.2.0.RELEASE/reference/html/)で述べられているが、ハンドリングが可能な範囲や仕組みが若干わかりにくいので主要な方法をまとめる。

## 例外ハンドリングの方法

### 一覧

|機能名|レイヤ|
|—|—|
|HandlerExceptionResolver|SpringMVC|
|ErrorPage|SpringBoot|
|ErrorController|SpringBoot|

### HandlerExcepitonResolver
“HandlerExceptionResolver“はSpringMVCの機能を利用した例外ハンドリングの方法である。

元記事を表示

Apache POIを使ってJavaからxlsxファイルを読み込み・生成するためのメモ

# この記事について
Apache POIを使ってみたい人が、コピペしながらExcelファイルを操作出来ることを目標としています。
ここで示す実装例は、あくまでも、Apache POIを動かすための最低限の実装であり、別途エラーハンドリングをする必要があります。
コードの動作を確認しているバージョンは4.1.0です。

# Apache POIの用意
こちらから用意できます。
https://poi.apache.org/download.html

# Apache POIにおけるオブジェクト
`org.apache.poi.ss.usermodel.Workbook`がxlsxファイルのブック全体を表します。

読み書き対象のxlsxファイルについて、`Workbook`オブジェクトを生成した後に、まず初めに対象のシートを指定します。これが`org.apache.poi.ss.usermodel.Sheet`です。

`Sheet`オブジェクトを`Workbook`オブジェクトから取得後、読み書き対象の行にを指定します。これが、`org.apache.poi.ss.usermode

元記事を表示

try-with-resourcesのclose時例外

“`java

public class Main {
public static void main(String… args) throws Exception {
try (Closable1 c1 = new Closable1(); Closable2 c2 = new Closable2()) {
// none
}
}

static class Closable1 implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println(“1 close.”);
throw new Exception(“1 failed”);
}
}

static class Closable2 implements AutoCloseable {
@Over

元記事を表示

コンストラクタで失敗してもインスタンスはある?

“`java
public class Main {

public static Main me;

public Main() throws Exception {
this.me = this;
throw new Exception(“constructor error.”);
}

public void method() {
System.out.println(“It’s me”);
}

public static Main main() {
return me;
}

public static void main(String… args) {
try {
Main main = new Main();
} catch (Exception e) {
System.out.println(“constructor failed.”);
}

元記事を表示

Basic Authentication with Java 11 HttpClient

In this article, we will create Java 11 HttpClient that accesses Basic Auth protected REST API resource using sync and async mode. We will use Kotlin for a reference implementation.
Spring Boot 2 based Basic Auth Server
You can directly download the Basic Auth Server from Github Repository and run it locally using the below command.
Starting the server using Gradle
“`$ ./gradlew bootRun
“`

Server will expose http://localhost:8080/api/health endpoint, which can be tested using the below curl

元記事を表示

【Java】キャメルケースやスネークケースといった記法を相互変換する【Jackson】

キャメルケースやスネークケースなどなど、`Java`で命名法則の相互変換といえば`Guava`が有名ですが、`Jackson`でもできるのでまとめます。

# やり方
`com.fasterxml.jackson.databind.PropertyNamingStrategy`に定義されている各種`Strategy`を利用すればできます。

例として、キャメルケースからスネークケースへの変換を示します。

“`java
public static String camelToSnake(String value) {
return new PropertyNamingStrategy.SnakeCaseStrategy().translate(value);
}
“`

その他の変換はソースコードやドキュメントをご覧ください。

# 補足
その他の手法として、`ModelMapper`や`Gson`には同等の機能が有りそうです。

– [Java \- キーがスネークケースになっているMapとBeanの変換|teratail](https://teratail.com/qu

元記事を表示

【Kotlin】リフレクションでコンストラクタの引数名を取得する

# TL;DR
– `Kotlin`のリフレクションで取れる`KClass`からは、コンストラクタの引数名が元の名前で取れる
– `Java`のリフレクションで取れる`Class`からは、コンストラクタの引数名が「`arg0`, `arg1`, `arg2`…」としか取れない
– 元が`Java`のコードから`KClass`を取得しても、コンストラクタの引数名は「`arg0`, `arg1`, `arg2`…」となり、元の引数名は取れない

# やること
以下のクラスから、コンストラクタの引数名を取り出します。

“`kotlin
data class Data(val sampleInt: Int, val sampleString: String)
“`

# やり方
以下2行でできます。

“`kotlin
val clazz: KClass = Data::class
val parameterNames: List = clazz.constructors.first().parameters.map { it.name }

pri

元記事を表示

Java 二つのListを順番無視、null無視、重複無視で等値判定を行う

目次 ⇒ [Javaアルゴリズムライブラリ-Artery-サンプル](https://qiita.com/artery/items/6ae578a6665457db4511)

“`Q01_05.java
package jp.avaj.lib.algo;

import java.util.List;

import jp.avaj.lib.def.ArDuplicate;
import jp.avaj.lib.def.ArNull;
import jp.avaj.lib.def.ArSeq;
import jp.avaj.lib.test.L;

/**
* 二つのListを順番無視、null無視、重複無視で等値判定を行う
*
* ・ArListの以下のメソッドを使用する
* equals(List list0,List list1,ArSeq arSeq,ArNull arNull,ArDuplicate arDup)
*
* ・順番無視はArSeq.IGNOREを指定する.無視しない場合はArSeq.NOT_IGNOREを指定する.

元記事を表示

【Jackson】カスタムシリアライザーで、BigDecimal型の返却値を変換した話

## はじめに
SpringBootを用いたWebAPIの開発において、Jacksonを用いているのですが、BigDecimal型の値をレスポンスとして返却する際に課題に直面しました。

それは、小数点以下の連続した0が残ったまま表示されてしまうということです。

例えばPostgresSQLのnumeric型(10, 5)のカラムに「99.9」と値が登録されているとして、この値を取得してJSONで返す場合、BigDecimal型で扱い返却すると「99.90000」と表示されてしまいます。

今回はこの事象を解決したので、記事にしました。

##解決法
まず、下記のBigDecimalSerializer.javaのようなBigDecimal型に対するシリアライザーを作成します。作成時には`StdSerializer`クラスを継承し、ジェネリクスに値を操作する対象のクラスを指定する必要があります。

“` java:BigDecimalSerializer.java
public class BigDecimalSerializer extends StdSerializer

元記事を表示

Java業務で使えるレベルになるまでにやったこと

## はじめに
エンジニア目指してる友達に「Java業務で使えるレベルになるために何したー?」って聞かれたので、自分がJava学習する際、どういう順序・教材で勉強したのかまとめました。
Javaエンジニア目指している人の参考になれば嬉しいです。

## やったこと①:ProgateのJavaコース

https://prog-8.com/

当時Java初心者・オススメWEB教材とか検索してProgateと初めて出会い、分かりやすさに感動した記憶があります。
道場コースは時間に余裕がある人だけやればいいと思います。
ちなみにボクはやってないです>< ## やったこと②:ドットインストールのJava入門コース https://dotinstall.com/ Progateで学んだ知識を定着させる目的で通勤時間に動画流してました。 動画は見るだけで特に手は動かしてないです。 ## やったこと③:わかりやすいJavaシリーズ 以下の2つの書籍をやりました。 新わかりやすいJava入門編 川場 隆 https://www.amazon.co.jp/dp/4798042773

元記事を表示

Maven学習

# 1.インストール

## 1-1. ダウンロード
以下のサイトから「apache-maven-3.6.2-bin.zip」をダウンロード
https://maven.apache.org/download.cgi

## 1-2.導入
展開し、binにパスを通す。
今回は「D:\apache-maven-3.6.2\bin」とした。

## 1-3.確認

“`
mvn -version
“`
で起動したらOK。今回は以下が表示されたのでJDKをインストールした。

“`
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
“`

ダウンロードしたJDKは「Amazon Corretto 8」

“`
Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bc

元記事を表示

SpringBootをVSCodeで使ってみる

# 1. 導入

## 拡張機能のインストール

以下の拡張機能をインストールします。Javaを使うのでJava系の拡張機能がまとまっている[Java Extension Pack](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack)と、SpringBootの拡張機能がまとまっている[Spring Boot Extension Pack](https://marketplace.visualstudio.com/items?itemName=Pivotal.vscode-boot-dev-pack)を入れます。必要に応じて不要な拡張機能は無効にしてください。

– Java Extension Pack
– Language Support for Java
– Debugger for Java
– Java Test Runner
– Maven for Java
– Java Dependency Viewer
– Visual Studio Intel

元記事を表示

AWSでJavaMailを使用してメール送信する

#AWSでJavaメールを使用してみる

今回は、前回の記事で立ち上げたAWSのEC2を使用してJavaメールをgoogleのSMTP経由で送信してみる

*前回までの記事は下記を参照ください。
https://qiita.com/ktkt11122334/items/36f950670e5952d7d17e

##EC2でJavaを動かす
EC2にJavaが入ってるか確認する
前回立ち上げたEC2にssh
ssh -i [pemファイル] ec2-user@ec2-54-65-248-190.ap-northeast-1.compute.amazonaws.com

Javaが入っていないことを確認
java -version
-bash: java: コマンドが見つかりません
javac -version
-bash: javac: コマンドが見つかりません
yum list installed | grep java
**なにも表示されない

openJDKをyumで落としてくる
sudo yum update
sudo yum -y install java-1.8.0-o

元記事を表示

NLP4J [005-2] NLP4J+Twitter4J(分析1)

[Indexに戻る](https://qiita.com/oyahiroki/items/ba79a759c599d3459d29) : [[005-1] NLP4J+Twitter4J(データ収集)](https://qiita.com/oyahiroki/items/32bd2573138883b46aa4) > this > 次のページ

#結果を眺めてみる

出力結果全文は[こちら](https://github.nlp4j.org/nlp4j/output/output-20191029-001318.txt)に配置しております。

さて、結果を見ていきましょう…。

#処理時間

“`
処理時間[ms]:34586
“`

34秒かかっています。結構遅いです。
合計90件の文書ですが、1文書につき2回YahooのAPIをコールしていて合計180回なのでこんなものだと思います。Yahooの自然言語処理APIはお手軽に使えるものの、回数制限とパフォーマンスを考慮するとローカルでガンガン叩けるライブラリを使うことも検討が必要だと思います。

NLP4Jでは他の自然言語処理

元記事を表示

Javaのインストールは気軽にできるものじゃない!1回で完璧に終わらせるための注意点まとめ

#「Java インストール」で検索してちゃちゃっとやれるでしょ?⇒ドハマりしました#
Javaを勉強したいなーと思ったらまず誰もが最初にやるのがJavaのインストール。
しかし、「なんとなくググればできるだろう」という心構えで臨んだ私は「ちゃんとした順序でインストールしたはずなのになぜかJavaファイルが動かせない」問題でめちゃめちゃ悩みました。具体的に言えばコマンドプロンプトで「**javacは、内部コマンドまたは外部コマンド、(略)として認識されていません。**」と言われ続けました。
Javaのインストールをする前に**2点絶対に頭に入れておかなければいけないこと**を解説します。

#注意点その1:ググってトップに出てくるのは「JRE」だけど、インストールしなきゃいけないのは「JDK」#
「Java インストール」と検索するとトップに出てくるのが
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513594/2eab4c5b-483e-0cf1-6069-47dd851670eb.p

元記事を表示

OTHERカテゴリの最新記事