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

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

[エラー]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`を指定することで

元記事を表示

さまざまな場面で使う三項演算子

## 目次
 [1.基本構文](#1-基本構文)
 [2.条件によって出力の内容が異なる場合](#2-条件によって出力の内容が異なる場合)
 [3.条件によって代入する値が異なる場合](#3-条件によって代入する値が異なる場合)
 [4.return文に記載する場合](#4-return文に記載する場合)
 [5.応用編](#5-応用編)

## 1. 基本構文
“`java
条件 ? trueの場合 : falseの場合
“`
三項演算子を使用することで、コードの記述量を減らし実装を簡潔にすることができます。
また、if文のネストが深くなりすぎるのを防ぐこともできます。

では実際の実装例を見ていきましょう。
※実装例に記載の魚リストの要素数はさいごまで2のままです。

## 2. 条件によって出力の内容が異なる場合
### if文ver.
“`java
// 魚リスト
List fishList = new ArrayList();
fishList.add(“まぐろ”);
fishList.add(“かつお”);

// if文ver.

元記事を表示

e.printStackTrace()とSystem.out.println(e)とSystem.out.println(e.getMessage())の違い

e.printStackTrace()

System.out.println(e)

System.out.println(e.getMessage())
の違い。

“`java
public class App {
public static void main(String[] args) throws Exception {

String aaa = “aaa”;

try{
aaa.substring(1000);
}catch(Exception e){
e.printStackTrace();
System.out.println(e);
System.out.println(e.getMessage());
}
}
}

“`

## e.printStackTrace()の場合

“`
java.lang.StringIndexOutOfBoundsException: begin

元記事を表示

新人SEが効率的に成長するために必要なこと

# 新人SEが効率的に成長するために必要なこと

**軽く挨拶**
記事を閲覧していただきありがとうございます。当記事は、SIerで働く新人SEの葛藤と日々のアウトプットを行うための記事です。技術的な話もしますが今回は「新人がいち早く戦力になる」ためにどういうステップを踏めばいいのかという観点で話していこうと思います。

1. [結局アプトプットを出せるかだと思う](#anchor1)
1. [エンジニアとして成長するために必要なこと](#anchor3)
1. [まとめ](#anchor4)


## 結局アプトプットを出せるかだと思う

1. エンジニアにおけるvalueとは
いきなりですが、私の思う価値のあるエンジニアとは、「生産性の向上にに貢献できる」エンジニアだと思います。これはベテランであっても新人であっても共通にしてチームに貢献することが大切だと思います。
「生産性」という言葉が抽象的なので一つ階層を下げてみましょう。例えば以下のようなものがありますね
– プロ

元記事を表示

JavaGold受かりました。

JavaGoldに受かりました。

自分は、どうやらJavaGold受かったそうです。

勉強時間は一か月です。

覚えたところもありましたが、読むのなら大丈夫という感じです。

元記事を表示

迷路作成

proになるJava読書中、難しくなってきたのでメモがわりに。

– Sample Code

projava/Maze.java

package projava;

import java.io.IOException;

public class Maze {
public static void main(String[] args) throws IOException {
record Position (int x, int y){}
int[][] map = {
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 1, 0, 1, 0, 0, 1},
{1, 0, 1, 0, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 0,

元記事を表示

Optional class

Optionalはnullかnull以外かのどちらの値も格納できるclass
Optional.ofNullable(xxx)はnullならemptyに読み替えて格納する。
array refer時のArrayIndexOutOfBoundsExceptionやNullpointerExceptionを回避してくれるようなものではないので注意

“`java
public class Outer {
public static void main(String[] args) {
String strArray[] = {“1a”,”2a”,null};
System.out.println(get(strArray,3));
System.out.println(get(strArray,2));
System.out.println(get(strArray,1));
System.out.println(get(null,1));
}
static O

元記事を表示

複数methodをまとめて排他

first,second,thirdをまとめて排他にするときは
別class化(Test)してReentranLockを持たせる。
lockするとunlockするまでlockできない。
Reentrantを共有ため、threadは単一のTestを共有

“`java
class Test {
final ReentrantLock re = new ReentrantLock();
void lock() {
this.re.lock();
}
void unlock() {
this.re.unlock();
}
void first() {
System.out.println(Thread.currentThread().getId() + “:1”);
}
void second() {
System.out.println(Thread.currentThread().getId() + “:2”);
}
void third()

元記事を表示

ArrayListを更新中に参照する

forでlistを読み込み中に、別スレッドでlist addすると
exceptionが発生する
“`java
class ReadTask implements Runnable {
List l;
ReadTask(List l) {
this.l = l;
}
@Override
public void run() {
try {
for (String str:this.l) {
System.out.println(str);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
} catch (Exception ex) {
ex.pr

元記事を表示

OTHERカテゴリの最新記事