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

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

Gradle 7.5.1でSpring Boot 2.7.5 のプロジェクトを作ってみた

# はじめに

Gradle でSpring Boot プロジェクトを作ってみたので手順を記載します。ライブラリは現在の最新バージョンを利用します。SpringBootのバージョン指定はGradleプラグインとBOMを使う方法の2パターンを試します。version catalog のtomlファイルでの設定もやってみました。

# 対象読者

* Gradle, Spring Boot で開発経験のある方

# 環境

* Gradle 7.5.1
* Java 18.0.2
* OS Windows11

# プロジェクト作成

`gradle init` でたたき台となるプロジェクトを作成します。

“`bash
$ gradle init –type java-application –test-framework junit-jupiter –dsl groovy –project-name SpringBootExample –package example

Generate build using new APIs and behavior (some fe

元記事を表示

【未経験】【中途】プログラマー1年目の実務内容と感想

 僕は2021年の9月から中途のエンジニア採用枠でIT企業に就職しました。ところが僕には社会人経験も実務経験も情報系の資格も学歴もありませんでした。そこで、情報系の学部卒の新卒1年目とは異なる目線から、プログラマー1年目の実務内容をお伝えしたいと思います。

|期間 |業務内容 |
|—-|—|
|1ヶ月目~ |研修(Python) |
|2ヶ月目~ |シナリオテストの実行(テスター) |
|6ヶ月目~ |バッチ・画面の設計書修正・機能改修・テスト(Java,C#,Angular) |
|8ヶ月目~ |画面・実行機能の詳細設計・新規開発・テスト(Python,Django) |
|10ヶ月目~ |バッチ・画面の設計書修正・機能改修・テスト・保守運用(Java,C#,Angular) |

 業務内容はざっくりとこんな感じです。1ヶ月ほど研修を受け、2ヶ月目から4ヶ月間ほどテスターとして現場で働きました。そして6ヶ月目から本格的に開発現場に配属され、主にJavaでのバッチ開発に携わっています。また間で2ヶ月ほどPython、Djangoでの新規開発プロジェク

元記事を表示

【デザインパターン】Builder

# Builderとは
Builderはデザインパターンのうち、生成のパターンに分類される一つであり、複雑なオブジェクトを段階的に生成します。今パターンでは異なる型や様々な表現を持つオブジェクトを一つのBuilderで生成できます。

# 問題点
フィールドが多数になると、コンストラクタのパラメータが増えてきます。また、必須でないフィールドが多くあると、冗長的なコンストラクタとなります。

“` java
public class House{
public int roof;
public int wall;
public int floor;
public int door;
public int window;
public int stair;

public House(int roof, int wall, int floor, int door, int window, int stair){
this.roof = roof;
this.wall = wall;
this.floor = floor;
this.door = doo

元記事を表示

Databricks ( Spark ) にて Windows 機種依存文字 を保持しているソースを読み込む場合にはエンコーディングを `ms932` とするのがよさそうという話

## 概要
Databricks ( Spark ) にて Windows 機種依存文字 を保持しているソースを読み込む場合には、エンコーディングを `shift_jis` ではなく、 `ms932` にするのがよさそうと教えていただいた内容を共有します。

機種依存文字 とは、CP932 という Shift_JIS を独自に拡張した文字コードなどで定義されている文字であり、Macなどの他の機種では適切に表示ができない文字のことです。 Windows の 機種依存文字としては次のような文字があるようです。

> ① ② ③ ④ ⑤ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ ㍉ ㌔ ㌢ ㍍ ㌘ ㌧

Windows 機種依存文字が含まれるファイルを参照する場合には、`shift_jis`で読みこむと文字化けしていしまうため、`ms932` で読むことで適切に読むことができそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c0dd2dbc-647a-1356-14b2-4eea49b61

元記事を表示

学校の課題「10倍整数型:IntegerX10」について真剣に実装してみた

# 課題内容

僕が通っている学校のある授業でこんな課題が出されました。

## 10倍整数型
Javaの`int`型の上限・下限を1桁増やし、-21474836489〜21474836479 の範囲の整数を扱う `IntegerX10` クラスを作成せよ。

なお、以下のひな型に沿って実装すること。(`…`の部分を自分で実装する)

“`java:IntegerX10.java
public class IntegerX10 {
// 1の位の値
public int value1;
// 10以上の位の値
public int value10;

public IntegerX10(…) {

}

public IntegerX10 add(IntegerX10 v) {

}

public String toString() {

}
}
“`

通常、`int`型は4バイトで表されるため、最大値`Integer.MAX_VALUE`は2147483647になりますが、それを1桁増や

元記事を表示

Java For Data Science

Events continuously happen all around the world. Often, we create a record of a unique event at a specific time and space. These recorded events collectively represent what we know as data. In contrast, data science uses scientific processes, systems, methods, and algorithms to abstract knowledge and insights from these structured and unstructured data.

Moreover, Data Science is an interdisciplinary approach that b

元記事を表示

【logic】銘柄コード取得APIのキャッシュ管理

# はじめに

過去記事は「[auカブコム証券のkabuステーションREST APIに関する記事一覧](https://qiita.com/hiuchida/items/611ba237dc1d1f6e3dca)」。

銘柄コード取得API(symbolnameFutureGet,symbolnameOptionGet)は、取得したコードと名称は変わらないため、キャッシュを保存して、後から参照する。

# 設計

現時点では、PUSH API受信ツールのみが銘柄コード取得APIを使用している。
テストするのに、WebSocket環境を用意する必要があり、モックサーバーでは開発できないので、銘柄コード取得部分を切り出した単体のツールToolSymbolNameを作成する。

キャッシュ管理クラス(SymbolNameLogic)はMapでキャッシュ管理するが、AutoCloseableを実装し、コンストラクタでファイルから読み込み、close()でファイルに保存する。
ファイルロックでの排他制御は行わない。
なお、キャッシュが変化していない場合は、保存しない。

キャッシュのキーは、複合

元記事を表示

Open LibertyとMicroProfile Reactive MessagingでKafkaのイベントを読み取る

Javaのアプリケーションサーバである [Open Liberty](https://openliberty.io/) では、MicroProfile Reactive Messagingと呼ばれる仕様のAPIを使うことでイベント処理することが可能です。

この記事ではMicroProfile Reactive MessagingでApache Kafkaのイベントを読み取って処理するConsumerを実装してみます。イベントの送信については別の記事で紹介する予定です。

![スクリーンショット 2022-11-06 21.54.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137947/9c45c24e-f10a-88e9-365f-d921de83f121.png)

## 本記事で使用するコンポーネント

本記事では以下のコンポーネント・バージョンを使用します。
今後のバージョンアップで動作しない可能性がありますので、本番投入する際には事前に手元で動作確認することをお勧めします。

|コン

元記事を表示

Box SDKでBox APIを使ってみる

# 概要
Boxに対して別のシステムからファイルのアップロード、削除やコラボレータの追加、削除などの操作をしたい場合に、BoxのAPIを利用しやすい形で提供しているBox SDKの使い方について記載したいと思います。

# Box SDKの準備
Box SDKは公式に各種言語向けに提供されています。今回はJavaSDKを使用しましたので、記事中のコードもJavaで記載しています。基本的には各操作に関して考え方は同じになると思います。
[SDKとツール \- Box開発者向けドキュメントポータル](https://ja.developer.box.com/sdks-and-tools/)

## インストール
SDKはMavenやGradleから入手することができます。[Box Java SDK](http://opensource.box.com/box-java-sdk/)
以下はMavenの例。
“`XML

com.box
box-java-sdk

元記事を表示

Service と Dao(DB処理) と Entity ざっくりまとめ

Java のDB処理で `Service` , `Dao` (Data Accesss Object) を使ったときのはなし
`Service` と `DAO` と `Entity` の関係をざっくりまとめる
細かいことは気にしない!!いったんは流れが分かればOK!!!!
説明で使ってるサンプルプロジェクトのおおもとは GitHub [java-webapp-clump](https://github.com/sueasen/java-webapp-clump) にあります
ここでは DB接続 の方法として以下の2つでやってみる
– JDBC (Java Database Connectivity)
昔から使われてるDB接続方法(DB処理を実行するための 標準仕様)
– JPA (Java Persistence API) :
開発でよく使われるDB接続方法(DB処理を実行するための ORM (Object-Relational Mapping) の仕様)
# DB接続のORM の FW (フレームワーク) はいろいろある...ここではJPA標準の Eclip

元記事を表示

【eclipse】Springスタータープロジェクトの名前をリファクタリング(変更)した際に出現するエラーの解消方法

## 前置き
プロジェクト名を変更しようと、以下キャプチャから修正したところ
多数のファイルで見慣れないコンパイルエラーが出現。
ググっても中々解決策を見つけられず意外と手こずったので、もし同じような事象で
困っている方がいたら、解決手段の一つとして参考にしていただけたらと思います。
![20221106-223259.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659821/dd9f8921-7cb1-e77a-06f2-e01fa5d7c527.png)

## 結論
自動生成されるsettings.gradleファイルの内容を修正する事で解決できる。
![20221106-233406.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659821/d966f8eb-ef99-15a3-332b-dd78b59444f5.png)
以下キャプチャの”(シングルクォーテーション)内の値が古いプロジェクト名のままに

元記事を表示

【Java】コレクションの要素を削除するArrayListのremoveメソッドとIterator(イテレータ)のremoveメソッドの違い

**概要**
ArrayListの要素を削除するときの、下記2種類のremove()メソッドの挙動の違いを理解することを目的とし、Java API等の言語仕様説明を交えながらサンプルコードを動かします。
– ArrayListクラスのremove()メソッド
– ArrayListクラスのiterator()メソッドから取得したイテレータのremove()メソッド

実用性よりは知識を深めることに重点を置いた内容となっています。

**対象**
Java初級〜中級レベルの方に伝わる説明を心掛けています。

より具体的には…
– オブジェクト指向の入門レベルを一通り学び終えている人
– ArrayListの要素をループ内で思った通りに削除できなかった人
– 拡張for文でコレクションの要素を削除しようとしたら謎のエラーが出た人
– イテレータをあまり使ったことがない人
– 何となくでも「イテレータとは、ポインタとかカーソルとか矢印みたいに、コレクションの要素を指し示す何かそういうやつ」と分かっている人

## 1. コレクションの要素を削除するメソッドremove

ArrayList\

元記事を表示

JdbcTemplateはSQLインジェクション対策できているのか

## これは何?
SpringBatchプロジェクトにおいて、JdbcTemplateを使ってDBアクセス処理を書いていた際、「これってちゃんとSQLインジェクション対策できてるの?」という問いが生まれました。

公式を読んでみても「されてるよ!」という明言が見つからなかったため、ライブラリの中身まで確認し、調査してみました。

## 想定読者
* JdbcTemplateってSQLインジェクションされてるのか不安な人
* SpringBatch実装したことがある人
* 検証にはSpringBatchプロジェクトを利用しています。ステップやジョブの概念など、細かいものは省きます。

## 結論
**出来てる**と思って問題ないと思います。検証に利用したバージョンとメソッドは以下。
※調査内容が膨大になるので、今回一つのメソッドのみで検証しました。
※鵜呑みにはせず、ご自身のプロジェクト内で議論/検討/判断のうえ利用するようにしてくださいね。

### Version

spring-boot-starter-batch:2.7.0
内部的にはspring-jdbc:5.3.23が呼

元記事を表示

ABC276A~Eの解答[Java]

## はじめに
今回はコンテスト中にA~Eが解けたので、それをそのまま説明しようかと思います。

では、見ていきましょう。

## A – Rightmost
問題文は[こちら](https://atcoder.jp/contests/abc276/tasks/abc276_a)

StringのlastIndexOfを使いました。
“`A.java
class Main{

static final boolean autoFlush = false;
static final Library System = new Library(java.lang.System.in,java.lang.System.out,java.lang.System.err,autoFlush);

public static void main(String[] args){

//Sの受け取り
String S = System.in.next();
//aのindexを調べる
int ans = S.lastIndexOf(“a”);
//見つからなかったら-1

元記事を表示

Java Gold SE 11を受けての感想

# Java Gold SE 11の概要
## Java Gold SE 11(以下Java Gold)とは
Java Gold SE 11とは、オラクル認定資格の一つで、
* Java Bronze
* Java Silver
* Java Gold
の3つの試験の一番難しい資格のことです。
受けるにはJava Silverに合格していることが必要です。

## Java Goldの試験範囲
Java Goldの試験範囲は、以下の項目です。
細かい説明は[こちらのURL](https://www.oracle.com/jp/education/certification/1z0-816-jpn-31705-ja.html “Java SE 11 Programmer II (1Z0-816-JPN) 試験”)を参照してください。
* Javaの基礎
* 例外処理とアサーション
* Javaのインタフェース
* 汎用とコレクション
* 関数型インタフェースとラムダ式
* JavaストリームAPI
* 組込み関数型インタフェース
* ストリームに対するラムダ演算
* モジュール型アプリケ

元記事を表示

SpringBoot2.7以降のAutoConfigurationについて検証

# 概要

SpringBoot2.7にて、auto configuration されるライブラリ作成方法について、公式が推奨する方法が変わった。
– [SpringBoot2.7のリリースノート](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes#building-jars-with-maven-shade-plugin-and-gradle-shadow-plugin)
– [公式ドキュメント](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.developing-auto-configuration)

ここでは、推奨方法に従って auto configuration されるライブラリを作成し、それを実際に使ってみる。
ライブラリの機能としては、`/ping`エンドポイントにGETリクエストしたら `hello world`を返却するものを作る。

# ライブ

元記事を表示

SpringBootServletInitializerがTomcatで実行される仕組み

# 概要
Spring BootアプリをTomcatにデプロイして実行する場合、SpringBootServletInitializerを継承したクラスを作成することで実現するが、Servlet仕様でもないSpringBootServletInitializerを継承したクラスがなぜTomcatで実行されるのかについて述べる。

# Servlet仕様との紐づけ
ずばりSpring Webに含まれるServletContainerInitializerを実装したSpringServletContainerInitializerの仕業だ。以下がそのクラスだ。
“`java:SpringServletContainerInitializer.java
package org.springframework.web;

import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Serv

元記事を表示

IntelliJ IDEA (Windows, Java) & WSL2 開発環境構築(2022.11)

# なぜ IntelliJ IDEA & WSL2 なのか

1. VS Code や Eclipse ではなく IntelliJ IDEA で開発したいため
– Java の開発体験が良いと複数人から聞いている
2. Windows 上ではなく使い慣れた WSL2 上で開発したいため
– PowerShell? Git BASH? ご冗談でしょう?

少し検索したんですが絶妙に参考になる記事が存在しなかったため書き起こします。なお、現状 Windows 側の IntelliJ IDEA と JDK (WSL2) の組み合わせでの開発は発展途上感覚があり、他の選択肢の可能性も排除しない方が良さそうです。

## 既知の不具合

:::note warn
動作が極端に重い現象が発生しており、原因調査中です。Indexing が重いような気がしています。NFS でマウントされていて I/O が遅いんですかね。 **現状(最新版の?)IntelliJ IDEA & WSL2 は選択肢に入らない可能性があります。** 以下に記載する対策のいずれかを取る必要があります。公式サイト

元記事を表示

HTTPURLConnection で Jenkins を shutdown する

https://qiita.com/nururuv/items/b269af6ac5ac472ceab1
https://qiita.com/satosystems/items/ad49cefa837e80c5083b
https://qiita.com/naginx/items/21e77c67f02a1ae65a29
HttpURLConnection timeout settings
https://stackoverflow.com/questions/2799938/httpurlconnection-timeout-settings

“`java
URL url = new URL(“http://example.com”);
URLConnection conn = url.openConnection();
conn.setRequestProperty(“Authorization”, “Basic ” + Base64.encodeToString(“username:password”.getBytes(), Base64.NO_WRAP));
// conn

元記事を表示

Junit4 の framework で 複数テストを行う

## Junit4 の framework で遊んでみた

[このレポジトリ](https://github.com/junit-team/junit4/tree/main/src/main/java/junit/framework) に、Junit3 ライクなテストライブラリが入っている。しかし、このライブラリでは複数テストの実行は行えなさそうなので、それを実現してみた(tearDown や setUp関数のような関数を見れば、カスタマイズ向けなライブラリな感じもしなくはないが・・・)。

ここでは、test から始まるメソッドでテストを複数個行えるようにコードの改造を行なった。以下のコードが動くようになるのが目標。

“`diff_java
import junit.framework.Assert;
import junit.framework.TestCase;
import junit.framework.TestResult;

public class Sample {

public static class MathTest extends TestCase {

元記事を表示

OTHERカテゴリの最新記事