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

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

Spring Boot + Docker の Java 開発環境構築

# 概要
Spring Boot での Java 開発環境を Docker で構築します。
Java 11 と gradle を使います。

Hello World! を表示させるところまで。

# 完成品
https://github.com/tomoyuki-mikami/spring-boot-docker

実行方法

“`
$ cd docker
$ docker-compose up -d
“`

# 環境
MacOS Catalina 10.15.2
Docker for Mac 2.1.0.5
IntelliJ IDEA Ultimate 2019.3.1
OpenJDK 11(homebrew でインストール済み)

# ローカルでの手順
### プロジェクトの作成

##### IntelliJ がない場合
https://start.spring.io/
こちらで同様の選択をして Generate すると zip でダウンロードされるので、それを使います。

##### IntelliJ がある場合
※ 最近の IntelliJ から spring initi

元記事を表示

Springのプロファイル機能、そしてSpring Bootのapplication.properties

# Springのプロファイル機能
プロファイルとは、DIコンテナ内のBeanのグループです。任意のグループ名を指定できます。

Beanにプロファイルを指定するには、 `@Profile` アノテーションを利用します。

“`java:DevBean.java
@Profile(“dev”)
@Component
public class DevBean {
}
“`

“`java:ProductionBean.java
@Profile(“production”)
@Component
public class ProductionBean {
}
“`

`@Profile` が付加されていないBeanは、特定のプロファイルに所属しません(デフォルトプロファイルとも呼ばれます)。**プロファイル無しのBeanは、実行時にどんなプロファイルを指定しても常に有効化されます。**

“`java:DefaultBean.java
@Component
public class DefaultBean {
}
“`

## 複数プロファイルの指定
`@Profile` の

元記事を表示

VSCodeでJavaの開発環境構築する方法

# 意外と簡単VSCodeでサクッと環境構築♪と思いきや少しハマった点。でも結果簡単だった件
ハマった点と対処法については最後に少しまとめています。

###開発環境
OS : Windows10
VSCode : Version 1.41.1

###手順
– JDKインストール
– Java Extension Packインストール
– Java.homeでJDKへパスを通す

##まずはJDK(Java SE Development Kit)をインストール
[JDKダウンロードページ](https://www.oracle.com/technetwork/java/javaee/downloads/jdk8-downloads-2133151.html) へアクセス

Java SE Development Kit ~
○ Accept License Agreement をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/cff2a9fd-5457-f4

元記事を表示

Androidによる加速度センサの値を用いた制御とUDP通信のアプリケーション

#前回との変更点
前回まではLEDを模した画像の表示で加速度センサの制御をしていましたが、今回はラジオボタンとスピナーを用いて加速度センサの制御を行えるように変更しました。

#アプリケーションのGUI
このアプリケーションでは、三軸(X,Y,Z)の加速度センサの値をUDP通信で送る。端末内で加速度センサを用いた制御をラジオボタンとスピナーを用いて行えるようにしました。なお、ラジオボタンで制御項目を設定しているので、軸を一つずつしか制御できません。

#アプリケーションのGUI
ASUSTab K013の場合

#ソースコード

ソケット通信を行うので、Androidmanifest.xmlに下記を追加する。

“`xml:Androidmanifest.xml
javaでにおけるcharの扱い方まとめ

## 記事の目的

javaで競技プログラミングをする時に、char型の扱い方がややこしいと感じたので、まとめようと思った。

### char型はint型にキャストできる
char型には16進数のUnicode文字が格納されている。
このとき、char型はそのUnicode文字を10進数に直した際の数値を持つ。
例えば、int型の変数にchar型の’1’を代入すれば、49という数値としてとして扱うことができる。

“`java
int c = ‘a’;
System.out.println(c);
//49が出力される
“`

### 対応する数値からcharに変換する
(char)(数値)でその数値に対応するcharになる。

“`java
char c = (char)97;
System.out.println(c);
//’a’が出力される
“`

### char型の数字をint型に変換する
数字を羅列した文字列からString.charAt(index)で数字をchar型として取得した時など、char型の数字をint型に変換したい場合がある。
前述のように、cha

元記事を表示

さくらのVPSにTomcatをインストール

#前提
筆者自身よくわからないまま2日粘ってやっと動いただけのレベル。難しい。
レンタルサーバーでphpを動かせる程度のLinuxとvimの操作ができる。
さくらでVPSの契約は完了している。
さくらのwebコンソールでCentOS7をインストール済み
apacheをインストール済み
ここまでがまだの場合、
[ネコでもわかる!さくらのVPS講座 ~第二回「サーバーをさわってみよう!](https://knowledge.sakura.ad.jp/8218/)
を読んでその通りにする。ここまでは簡単。

そのあとは主に
[Apache Tomcat 9 を CentOS 7 にインストールする手順](https://weblabo.oscasierra.net/installing-tomcat9-centos7-1/)
を参考に進めていく
ここでは筆者が詰まったことしか追記しないので上記できなかった場合のみ戻ってきてください。

#大きくやること(依存関係があるので上から順番にやらないと失敗するかも)
Javaをインストール
TomCatをインストール
ターミナルからfirewallを

元記事を表示

Excelファイルの内容をJUnitでテスト

POIライブラリを用いてHttpServletResponseに出力したExcelファイルの内容をJUnitでテストする方法。
responseからの読込にハマったので備忘として残します。

testクラスではMockHttpServletResponseを用いてresponseを生成する。

“`
//テスト対象クラスへ渡すresponse
MockHttpServletResponse response = new MockHttpServletResponse();

//テスト対象クラスで処理したresponseから出力するExcelファイルをInputStreamで読込
InputStream inputStream = new ByteArrayInputStream(response.getContentAsByteArray());
“`

xlsx形式はバイナリファイルなので、
`HttpServletResponse`の`getContentAsByteArray()`を用いて`InputStream`で読み込む事ができる。

後は

“`
Workbook

元記事を表示

スペースあるパスのJAVA_HOMEの設定

#はじめに
JAVAは広く使っており、JAVA_HOMEの設定も開発者としてよくある作業です。
Windows上の設定手順はいっぱい記事があります。今回はスペースあるパスの設定を説明します。

#JAVA_HOMEの設定手順
##コントロールパネルを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346425/f51551b0-96ab-1297-2d9e-9771dc4ac4a4.png)

##システムとセキュリティを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346425/db62419b-ddcb-374c-1295-1888b1b97080.png)

##システムを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346425/ffe49ae7-5947-6874

元記事を表示

【Teeda】do~() メソッド→自画面遷移時のinitialize処理で変数の値を保持させる

業務でTeedaを使うことになりまして、タイトルの件で少し詰まったので、今後のための覚え書きです。

## やりたいこと
前画面から引き継いだ特定の変数の値をdo~() メソッドによる処理時、その後の自画面遷移時のinitialize処理でも保持させる(使用できるようにする)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356958/817c95e6-e15f-1f7e-fc7c-7331bfc8c1c9.png)

## 環境
* Java:バージョン1.8.0
* Teeda:バージョンXX(後ほど確認して記載)
* OS:Windows10

## Teedaの仕様
公式サイトより、関連のありそうなTeedaの仕様は以下の通り。
### ページスコープ
* ポストバック (自画面表示) や ポストバック (リダイレクト) ~ リダイレクト表示 で同じページを表示している間維持されるスコープ
* 初期表示 や リダイレクト表示 で開始され、他のページがリクエストされると破棄さ

元記事を表示

Minecraft Forge 1.15.1でModdingをしてみる① 【開発環境の構築】【複数バージョン対応】【IntelliJ IDEA】

#はじめに
最近はバニラのアップデートが頻繁で、それに伴い仕様変更も多いですが、
環境の構築は今までとさほどやり方は変わりませんのでそんなに難しくはありません。
1.15のForgeは解説がめちゃくちゃ少ない上、まだベータ版で安定した動作が保証されていないので自己責任でお願いします。

なお、この記事の内容のほとんどは、**多くのバージョン、環境で共通です。**違うことはIDEやバージョンによって、叩くコマンドが違うだとかそんなくらいです。

とりあえず、この記事は1.15.1がメインなのでその解説から始めます。

#開発環境
– Windows 10
– JDK 8u161
– Minecraft 1.15.1
– Minecraft Forge 1.15.1-30.0.16
– IntelliJ IDEA 2019.2.4

#JDKをインストールしよう

[こちら](https://www.oracle.com/technetwork/java/javase/downloads/index.html)からJDKをダウンロードしましょう。
Oracleプロファイルにログインする必要

元記事を表示

Javaからの監視入門 Prometheusに触れる

### Prometheusって何?

Pull型の監視システム。OSS。
メモリ、CPUの使用量などが監視できるシステム。

### プル型の監視システムって何?

通常の監視システム(Meckerel,Sensuなど)は、
監視する側にエージェントをインストールして、監視サーバーへ情報を送る。

反対にPull型は、監視サーバーが監視する側から情報を取得する。

#### メリット・デメリット

Push型

[メリット]
・監視対象にアプリをインストールだけで簡単
・監視対象が増えてもサーバーの設定変更が少ない

[デメリット]
・監視量が増えると、監視サーバーの負荷が多い

Pull型

[メリット]
・監視対象がダウンしていることがPush型より簡単に分かる
・監視サーバーの負荷がPushより低負荷

[デメリット]
・監視対象のエンドポイントを設定しないといけない。単純インストールだけではない。
・監視対象が増えると、都度設定が必要

#### 今回のゴール

Springのアプリケーションで、Promethusにデータを連携して、
Grafana(グラファナ)でいい感じに

元記事を表示

乱数の作成(Math.random();)

# 乱数の作成

Javaの勉強の一環として「Hit & Blow」を作成するにあたって答えを作成するのに乱数が必要になったのでその時得た知識を少々アウトプットします。

### 【とりあえずの乱数が必要な時】

私が作成した「Hit & Blow」は、0〜9までの数が必要だったので以下の**「Mathクラス」**を使用しました。

“` java:qiita.java

Math.random();
“`

このように**「Mathクラス」**を使用することで0.0〜1.0未満のdouble型の乱数を取得できます。

例えば、

“`java:qiita.java

(int)(Math.random() * 10);
“`
といったようにすれば0〜9の乱数が得られる。(ちなみに最初の(int)でintにキャストしています)

##まとめ

いかがでしたでしょうか。

今回の記事では**「Mathクラス」**の使用でとりあえず乱数を取得するというものを紹介いたしました。

もちろん乱数の取得には他にもあるのでもっと詳しく知りたい方は調べてみてください。

またまだまだ初心者な

元記事を表示

GraphQLでMutation

本記事では「[Spring BootでGraphQLを実装する](https://qiita.com/NagaokaKenichi/items/2770b151e86fb65ea11d)」で使ったサンプルアプリを例に記述します。

## Mutationのスキーマ定義
まずMutationの命名はアプリケーションと紐づく動詞が望ましいです。今回は、id、name、pageCountの3つを引数に取り戻り値はBook型のスキーマを定義してみます。
※この後の説明の都合上、nameフィールドは必須、それ以外は非必須となる引数としています。
※「!」の詳細は「[GraphQLのスキーマと型定義のエクスクラメーションマークの意味](https://qiita.com/NagaokaKenichi/items/d341dc092012e05d6606#%E3%82%A8%E3%82%AF%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%

元記事を表示

kotlinのシンプルなmain関数内でHello Worldを出力する

## Homebrewを用いてKotlinをMacにインストールする。

“`bash
$ brew install kotlin
$ kotlin -version
=> Kotlin version 1.3.61-release-180 (JRE 11.0.1+13-LTS)
“`

## KotlinでシンプルなHello Worldを記述する

“`kotlin:helloWorld.kt
fun main(args: Array) {
println(“Hello, World!”)
}
“`

## Kotlin Compilerで上記ktファイルをコンパイルする

“`bash
$ kotlinc helloWorld.kt -include-runtime -d helloWorld.jar
$ hello_world ll
-rw-r–r– 1 user staff 1.3M Dec 27 22:34 helloWorld.jar
-rw-r–r– 1 user staff 62B Dec 27 22:33 hel

元記事を表示

API呼ぶ【コール編】

##API呼ぶ

以下4つのパートに分かれています。(〇〇編は適当につけましたゆるして)
[API呼ぶ【準備編】](https://qiita.com/RO018/private/0335375a22ba51d15661)
[API呼ぶ【コア編】](https://qiita.com/RO018/private/19a9f1740e0dffbb7844)
[API呼ぶ【ハンドリング編】](https://qiita.com/RO018/private/609ce3dcb3079d44b69a)
API呼ぶ【コール編】

##コール編
前回までで、Facadeを呼べばAPI関連の処理まとめてやってくれるように作れました
じゃあFacade呼ぼう

“`service.java
package service;

import exception.NantokaApiBadResultException;
import exception.NantokaApiUnknownException;
import facade.Facade;
import model.RequestBody;

元記事を表示

API呼ぶ【ハンドリング編】

##API呼ぶ

以下4つのパートに分かれています。(〇〇編は適当につけましたゆるして)
[API呼ぶ【準備編】](https://qiita.com/RO018/private/0335375a22ba51d15661)
[API呼ぶ【コア編】](https://qiita.com/RO018/private/19a9f1740e0dffbb7844)
API呼ぶ【ハンドリング編】
[API呼ぶ【コール編】](https://qiita.com/RO018/private/1c9f4e603cd15b95acea)

##ハンドリング編
コア層で実際にAPIをたたいたので、
今回の階層では出てきたエラーをハンドリングします

ここでいうエラーとは、Exceptionだけでなく
処理結果が不正である場合も含まれます

“`Facade.java
package facade;

import client.Client;
import exception.NantokaApiBadResultException;
import exception.NantokaApiUnknown

元記事を表示

API呼ぶ【コア編】

##API呼ぶ

以下4つのパートに分かれています。(〇〇編は適当につけましたゆるして)
[API呼ぶ【準備編】](https://qiita.com/RO018/private/0335375a22ba51d15661)
API呼ぶ【コア編】
[API呼ぶ【ハンドリング編】](https://qiita.com/RO018/private/609ce3dcb3079d44b69a)
[API呼ぶ【コール編】](https://qiita.com/RO018/private/1c9f4e603cd15b95acea)

##コア編
実際にAPIにPOST送信をなげる、コアとなる部分を実装します

“`client.java
package client;

import javax.xml.ws.http.HTTPException;

import json.JsonUtil;
import model.RequestDto;
import model.ResponseDto;

public class Client {

/**
* APIを実行する
*
*

元記事を表示

【JUnit】前日まで正常に動いてたJUnitテストで急にinitializationErrorが出た;経緯と解決策覚書き

JUnitで単体テストを行っていたところ、前日まで正常に動いてたメソッドで急にinitializationErrorが出てしまいました。
以下、経緯と解決策の覚書きです。

## 発生事象
Eclipseを使用し、JUnitテストを実行したところ、一部のテストメソッドでinitializationErrorが発生。
前日までは正常に動作していた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356958/4ec37b00-2cd8-6e31-9f15-4062677c29a0.png)

## 環境
– Java:バージョン1.8.0
– Junit:バージョン4.12.0
– OS:Windows10

## 経緯と調査
追加開発内容のカバレッジに漏れがないか確認するため、
開発前のコミットに戻して、テストを実施。
その後、最新のコミットに変更してテストを実施したところ、上記キャプチャのようなinitializationErrorが発生。
・・開発期限まで間もなかったため、頭が真っ白

元記事を表示

SpringBootアプリ開発中に「NotReadablePropertyException」が発生して悔しい思いをした話。

表題の通りエラーにはまってしまって、コードを何度見返してもあってるようにしか思えかった。んで試行錯誤して何とか解決したけど非常に腑に落ちなく、でも他の人でもありえそうだなぁと思ったので備忘録として残します。

## エラー内容

“`java:コンソール

2019-12-27 09:13:27.304 ERROR 21044 — [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: “class path resource [templat

元記事を表示

JUnit5 使い方メモ

# JUnit5 とは
言わずと知れた Java のテスティングフレームワークの、2019年現在最新のメジャーバージョン。

# 環境
“`console
> gradle –version
————————————————————
Gradle 5.6.2
————————————————————

Build time: 2019-09-05 16:13:54 UTC
Revision: 55a5e53d855db8fc7b0e494412fc624051a8e781

Kotlin: 1.3.41
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.14 compiled on March 12 2019
JVM: 11.0.4 (AdoptOpenJDK 11.0.4+11)
OS: W

元記事を表示

OTHERカテゴリの最新記事