JAVA関連のことを調べてみた2023年01月27日

JAVA関連のことを調べてみた2023年01月27日

SpringBootでストップウォッチアプリを作ってみる

# はじめに
SpringBootで簡単なアプリ作成としてストップウォッチアプリを作ってみます。
自分の手で自分の作りたいものを手を動かしながらしたほうが、
習得早いのかなって思い始めました。
(ずっとインプットばかりだと、細かいところばっかり気になるし、
 インプットしたらしたで結局どう作るの?って感じなので…)

イメージとしては、スタートボタンとストップボタン、その時間何するか入力欄を
おいて、自分用の記録を取っていく感じです。
少しずつこの記事も更新していきます。(目標:2/3完成)

# 画面イメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118881/4b6a0438-6b65-cc3c-978d-43086dabadfc.png)

元記事を表示

【Java】Spring Bootで作るRESTAPIサンプル

実務でREST APIのソースを読む機会があり、自分でも簡単なものを作成してみたので備忘録として残しておく。

# 作成するアプリの概要

リクエストを投げるクライアント側とレスポンスを返すホスト側の2つを用意する。

クライアント側がブラウザで入力した文字列をホスト側にリクエストを投げる。

受け取った文字列をホスト側でコンソールに出力するというシンプルすぎるもの。

コンソールへの出力が成功した場合は「0」を、失敗した場合は「1」の処理結果コードをクライアントに返却する。

クライアントもホストのどちらもSpring Bootで実装し、どちらもローカルに存在しているものとする。

使用ライブラリはJackson、lombook。テンプレートエンジンはthymeleafを使用している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935552/da49798b-b03b-7d55-98b4-fe13b716e7a3.png)

# クライアントの実装

プロジェクト

元記事を表示

Intellij IDEA をアップデート(2021.1 → 2022.3)したら起動しなくなった

## 起きたこと
Intellij IDEA CE 2021.1 → 2022.3にアップデートしたところ起動できなくなりました。
アイコンをタップしてもピコピコ上下に少し動くだけで全く起動しない・・・。

## とりあえずログを見てみる
以下パスまで移動
“`
cd /Applications/IntelliJ\ IDEA.app/Contents/MacOS
“`
idea バイナリーを実行
“`
./idea
“`

するとこのようなログが
“`
IntelliJ IDEA CE.app/Contents/MacOS
❯ ./idea
2023-01-26 21:43:55.570 idea[2219:29511] allVms required 1.8*,1.8+
2023-01-26 21:43:55.573 idea[2219:29515] Current Directory: /Applications/IntelliJ IDEA CE.app/Contents/MacOS
2023-01-26 21:43:55.573 idea[2219:29515] par

元記事を表示

BitbucketPipelinesでCI/CDに挑戦する その1:手動でテストを起動する

## 概要
既にある程度の開発が進んでいるBitbucket上のプロジェクトにPipelinesを使って継続的あれこれする機能を追加しようという、解説というよりも私の挑戦の記録です。

PipelinesはDockerのコンテナを利用して作業を行いますので、Dockerの知識があると理解が少し楽になります。
**主題は[bitbucket-pipelines.yml](https://support.atlassian.com/ja/bitbucket-cloud/docs/configure-bitbucket-pipelinesyml/)の記述方法**となりますので、ファイル内で使用している変数などはご自分の環境に置き換えてお読みください。

その1では既存のリポジトリにPipelinesを導入して手動でテストを起動させるまでを扱います。後続のシリーズの記事で、実行可能Jarを配布するところまで持っていきたいと思います。

## 記事内で使用している開発環境
– Bitbucket上にリポジトリを持つJava17のプロジェクト
– ビルドにGradle7.6を使用したJavaライ

元記事を表示

Stream#distinct

distinct method 重複削除される
hashcode, equalsで判断されるためcustom classの場合は
overrideする
下記のサンプルはValue#equals()が常にtrueのために
同一値と判断され、すべて重複みなされる
“`java
class Value {

String str;
public Value(String str) {
this.str = str;
}

@Override
public int hashCode() {
return 1;
}

@Override
public boolean equals(Object obj) {
return true;
}

}
public class Outer {
public static void main(String[] args) {
List l = Arrays.asList(

元記事を表示

hashCode, equals method

equals methodは same valueを判定
multi field classは、自分でequals methodをoverrideする。
また、hashcodeは、
equals method is trueの場合、same hashcodeというルールがあるため
equals method override のタイミングで hashcode() method overrideする

下記はnetbeansでgenerateしたequals, hashcode。

“`java
class Value {

String str;
int i;

public Value(String str, int i) {
this.str = str;
this.i = i;
}

@Override
public int hashCode() {
int hash = 7;
hash = 83 * hash + Objects.hashCode(this.str)

元記事を表示

stream

ListやArrayの各要素を委譲処理する仕組み
Stream interfaceに用意されたmethodを使用して処理する
Collection#stream()でfactoryする。
sorted, filter is intermidiate operation
forEach is terminal operation
primitive type は、IntStream, LongStream etc を使用

“`java
public class Outer {
public static void main(String[] args) {
List l = List.of(4,2,3);
Stream s = l.stream();
s.sorted().forEach(x -> System.out.println(x));
s = l.stream();
s.filter(x -> x % 2 == 0).forEach(x -> S

元記事を表示

javaのメソッド

# メソッドとは
+ コードを分割&整理、共通で利用できる機能
+ 使用する場面:大規模なプログラムを開発する時
+ コード名付けることが可能
+ 何度でもコードを呼び出し可能
+ コードは組み合わせ可能
+ public static voidでメソッドを作ることが可能。
これをmainメソッド内で呼び出し可能。
 `public static void メソッド名(){処理内容}`

## 使用例
“`java
import java.util.*;
public class Main{
public static void main(String[] args){
int a=(int)(Math.random()*10+1);
System.out.println(“リンゴを”+a+”個買った”);
//メソッドはMath.random()とSystem.out.println()
}
}
“`

System.out.println(引数)
メソッド内で処理した結果は戻り値として変数aに使える。

元記事を表示

[エラー]SpringBoot Repository UPDATE文の単体テストが成功しない 原因@Modifyingの引数が不足していため。

# 症状
RepositoryにおけるUPDATE処理の単体テストでエラーが出たので症状と対処法を投稿します。

## プロダクトコード
“`CustomerRepository.java
@Repository
public interface CustomerRepository extends CrudRepository {

@Modifying
@Query(“UPDATE Customer c SET c.enabled= true WHERE c.id = ?1”)
public void enabled(Integer id);
}

“`

“`Customer.java
@Entity
@Table(name = “customers”)
@Data
public class Customer {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = “id”, nullable = f

元記事を表示

Luceneの転置インデックスの仕組み part1

## 概要

Luceneのインデックスの構成などを理解を深めるためにLuceneのコードを読んだのでそのメモ

## アジェンダ

– インデックス作成されるまで
– Luceneの転置インデックスとは ←次回
– タームリストとポスティングリストの実現方法(コード) ←次回

## インデックス作成までの順番として
### インメモリバッファ
ドキュメントデータセグメント単位でインメモリバッファに保持

### マージ
設定されたポリシーに沿ってセグメント同士を結合する

### フラッシュ
フラッシュによってインメモリバッファのデータをdiskにセグメントとして永続化する
セグメントファイルとして永続化されるが、次のコミットされるまでは検索では使えない

### コミット
これによって強制的にデータがフラッシュされる
これによってdiskに永続化されたセグメントファイルが検索可能になる
だたdisk同期が発生するのでコストがかかる処理になっている

![image.png](https://qiita-image-store.s3.ap-northeast-

元記事を表示

Java ~配列~

・配列とは

 配列とは、値をまとめて管理するオブジェクトのこと。

 配列の種類は`データ型[]`、`ArrayList`、`LinkedList`、`HashMap`の4種類ある。

・データ型[]

・多次元配列の作り方

  多次元配列とは、配列の中に配列を作ることである。

  `データ型[][] 配列名 = new データ型[要素数][]`で作成することができる。

  `配列名[0] = new データ型[要素数]`で2次元目の配列の個数を入れられる。

![多次元配列図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850098/69c86168-f67a-51e2-9c39-66ce5d94544e.png)

・メソッド

・fillメソッド

  `Arrays.fill(配列名, 入れたい要素)` これを使うとすべての要素を“入れたい要素”にできる。すでにある要素も上書きされる。

・配

元記事を表示

最新版SpringSecurity 6.0.1におけるConfigの書き方

## はじめに
久々に個人開発をしようと思い SpringSecurity で認証機能を実装しようとしたところ、`SpringSecurity5.7以降` Configクラスの記述方法に大きな変更が加えられていることを知りました。そこで今回は 最新版である`6.0.1`で認証機能を実装することとしましたが、作業中にいくつか躓く場面があったため、復習を兼ねて記事として投稿してみます。

ちなみに私は [公式ドキュメント](https://spring.pleiades.io/spring-security/reference/) を参考にしながら実装しました。

今回は時間がないためConfigクラスの変更点についてのみ触れ、メソッドチェーンそれぞれがどういった役割をしているか等は割愛させていただきます。時間がある際に実際にDBから取得したユーザ情報でログインといった通しの実装について記事を書きたいと思っています。
## 開発環境
– Java17
– postgreSQL 14.3
– SpringBoot 3.0.2
– SpringSecurity 6.0.1
– Gradle

元記事を表示

Optional class ifPresent, map method

ifPresent() is given Consumer interface
ifPresentOrElse() is given Consumer interface and Runnable interface
map() is given Function interface, and Function#apply method return
map returns Optional
flatMap() is given Function interface, and Function#apply method return Optional
flatMap returns Optional

“`java
public class Outer {
public static void main(String[] args) {
Optional o = Optional.of(“abc”);
o.ifPresent((str) -> { System.out.println(“optional

元記事を表示

Streamとは

– 値の集合に対する処理を使い回す仕組みが「Stream」らしいです。

SampleCode
projava/StreamSample2.java

package projava;

import java.util.List;

public class StreamSample2 {
public static void main(String[] args) {
var data = List.of(“yamamoto”, “kis”, “sugiyama”);

var result = 0;
for (var s : data){
if (s.length() >= 5){
result++;
}
}
System.out.println(result);
}
}

こち

元記事を表示

Excelファイルの差分をとるExcelCompare

テキストファイルの差分を取りたいのであれば、diffやgit-deltaが便利であるが、人類は時としてExcelファイルの差分を取らなければならない場合がある。

そんなときに便利なツールが

https://github.com/na-ka-na/ExcelCompare

である。Githubのリリースページからファイルをダウンロードして、`excel_cmp` とすれば動く。

macOSでは `brew install excel-compare` すれば動くみたい。

この記事は以上です。

元記事を表示

[Java]使いそうな部分まとめ

# はじめに
学内でJavaの競技会があるらしいので、競技プログラミングで使えそうな記述をまとめておきました

# 参考

[Java 標準入力 – Qiita](https://qiita.com/mat827/items/4fdd334498c05e942c63)

[Javaの文字列操作【プログラミング初心者向け教材】](https://tokitsubaki.com/java-string-manipulation/147/#:~:text=Java%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E6%93%8D%E4%BD%9C%201%20%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E7%B5%90%E5%90%88%E3%81%97%E3%81%9F%E3%81%84%20%E6%9C%80%E3%82%82%E5%8D%98%E7%B4%94%E3%81%AA%E3%81%AE%E3%81%AF%E3%80%81%20%EF%BC%8B%E6%BC%94%E7%AE%97%E5%AD%90%20%E3%81%A7%

元記事を表示

orElse, orElseGet, orElseThrow of Optional class

orElseは、isEmpty() = trueの場合に別の値にすり替える
orElseGet()はSupplier
orElseThrow()は Supplier

“`java
class SampleException extends Exception {
}
public class Outer {
public static void main(String[] args) {
System.out.println(Optional.of(“A”).orElse(“X”));
System.out.println(Optional.empty().orElse(“X”));
System.out.println(Optional.empty().orElseGet(() -> “Y”));
try {
System.out.println(Optional.empty().o

元記事を表示

SpringBoot Repository層の単体テスト H2データベースを使うときの設定

# 概要
久しぶりにJavaを触ったところRepository層の単体テストの設定で詰まったので投稿します。
Repositoryの単体テストをするときはH2データベースを使います。
H2データベースを使うことでデータベースにアクセスしないで、単体テストができます。

以下エラー時の画像
Failed to load Application Contextというエラーが出てテストが失敗します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/a4e8a6f5-2aaa-cec3-bbd1-82bbd2a83931.png)

# 開発環境
OS:windows10
IDE:IntelliJ Community
spring-boot-starter-parent 2.75
java : 11

# 実装方法
## pom.xmlにH2データベースを追加する
“`pom.xml

com.h2database<

元記事を表示

unchecked exception

NullPointerExceptionのようなRuntimeException系のexceptionは
uncheckedExceptionで、try,catch不要
“`java
public class Outer {
public static void main(String[] args) {
NullPointerException npe = new NullPointerException();
System.out.println(npe instanceof RuntimeException);
String[] str = null;
String s = str[0];
}
}
“`
“`
Exception in thread “main” true
java.lang.NullPointerException
at com.mycompany.mavenproject1.Outer.main(Outer.java:13)
“`
Inte

元記事を表示

【Spring Boot】@ConfigurationPropertiesの『Prefix must be in canonical form』を解決する

# 前提
SpringBootにて`@ConfigurationProperties`を使って`application.yml`の値を読み取る際に以下の警告が出た。
“`
Prefix must be in canonical form {行数}
“`
# 問題点

読み取り元の`yml`ファイルは以下。
“`application.yml
sampleData:
data1: hoge
data2: fuga
“`
読み取りをするにあたり、下記のように記述していた。

“`SampleDataConfig.java
@Component
@Setter
@Getter
@ConfigurationProperties(prefix = “sampleData”)
public class SampleDataConfig {
String data1;
String data2;
}

“`
# 解決策

`prefix`に指定する値がキャメルケースであることが問題だった。
そのため以下のようにケバブケースで`prefix`を指定することで

元記事を表示

OTHERカテゴリの最新記事