JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

GradleでJDKを自動インストールしてくれるToolchainを触ってみる

## 最近のGradleはビルドの際のJDKを自動でダウンロード&インストールする機能がついている

みなさんこんにちは! Gradle 初心者です!

Gradle は 7.6 から [Toolchain](https://docs.gradle.org/current/userguide/toolchains.html) という機能があり、ビルドに使うJDKを自動インストールすることができます。

具体的には以下のように書くと、Javaのビルド時にGradleが事前インストール無しで自動的にJDK 22をダウンロードしてビルドに使ってくれます。[^1]

[^1]: 本記事で利用するGradleのバージョンは 8.7, 実行環境のJavaは 11 以降を利用しています。OSはIntel Macです。この記事ではJDKの自動インストールに触れていますが、Gradleを実行するJVMはそれはそれで別途必要です。

“`groovy:settings.gradle
plugins { id ‘org.gradle.toolchains.foojay-resolver-conventio

元記事を表示

Keycloakのコンポーネント設計の基礎

# 本記事の概要、目的

本記事は、OSSのIDプロバイダであるKeycloakを、ソースコード上から機能カスタマイズする際に重要となるポイントを押さえた解説を行います。
Keycloakの特徴として、OSSであり、拡張性高く設計されている点が挙げられるため、認証サーバを選定する際、拡張性を重視する際には有力な候補となるかと思います。

実際にKeycloakで安全に機能拡張する際、基礎的な構造を理解した上でコーディングを行う必要があります。
しかし、コンポーネント設計に関してKeycloakは独自のアーキテクチャを採用しており、若干取っ付きづらい面があります。

本記事は

* これからKeycloakのカスタマイズを行う
* Keycloakのカスタマイズを行ってみたものの、イマイチ仕組みがよくわからない

という人向けに、土台を理解した上で納得のいくコーディングが行えることを目標としています。

# 本記事で扱わないもの
以下は、前述した趣旨に沿わないため割愛させて頂きます。

* IDプロバイダとしてのKeycloakの基本的な理解
* Javaコード以外のKeycloakカス

元記事を表示

SpringBootでログ出力の基礎

# この記事はこれの続きです

https://qiita.com/waokitsune/items/098fbfa874175faad474

# 概要

**SpringBootでログ出力をやったことないから、まず何をどうしたらいいか分からない** という状態向けです。

* SpringBootの標準的な機能を使う。
* 最小限のコード。

という基礎的な内容です。

# logback-spring.xml作成

logback-spring.xmlとは『ログ出力先』『ログフォーマット』などが書かれた **ログ設定ファイル** です。
これを **特定の場所に置くと** SpringBootが勝手にログ機能を用意してくれます。

下記のように作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/2299c111-9b64-4aae-f790-551664f3c94b.png)

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

元記事を表示

JAVAで現在時刻を文字列にフォーマット(変換)

# やり方

“`java:
String now_1_ = DateTimeFormatter.ofPattern(“yyyy/MM/dd_HH:mm:ss.SSS”).format(LocalDateTime.now());
System.out.println(now_1_);

String now_2_ = DateTimeFormatter.ofPattern(“yyyy年MM月dd日(E曜日) HH時mm分ss秒SSS”).format(LocalDateTime.now());
System.out.println(now_2_);
“`

# 参考サイトさん

https://qiita.com/t_t238/items/5db1c6ca131a61ebd6ae

# 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/ef9f034b-f65c-0075-6e44-2c8f9366a64b.png)

# バージョン

Microsoft Wi

元記事を表示

JAVAのコードでJAVAのバージョン取得

# やり方

“`java:
String java_version_ = System.getProperty(“java.version”);
System.out.println(java_version_);
“`

# 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/f7a0fc4e-f92e-549e-fae5-3caa82e5ecdf.png)

# バージョン

Microsoft Windows [Version 10.0.19045.4170]
JAVA 17.0.8.1

元記事を表示

waterfallを使ってマイクラサーバーをゲートとゲートで繋ぐ方法

今回はマイクラサーバーをゲートとゲートで繋ぐ方法を自宅サーバーとレンタルサーバーの2つに分けて解説します。
![無題 2023-04-25 21-19-43.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3044030/b3d32298-5037-ce47-9473-f35ff94663d5.jpeg)
# 今回の調理道具
waterfall.jar waterfall以外のマインクラフトサーバー waterfall用のサーバー
※どのサーバーもレンタルでも自鯖でもよい

# 注意書き
この記事は普通のマインクラフト(プラグインサーバー)が立てれていることを前提にして解説しております。
**最低でもwaterfallとマインクラフトをするためのサーバーの二つが必要です。**
立てていない方は申し訳ございませんが違う記事を参考にしてサーバーを立ててください
今回はサーバーを二つつなぐのでwaterfallサーバーとマインクラフトサーバーを二つ用意していますが、マインクラフトサーバーが一つしかない方も問題

元記事を表示

Stringのnull、空文字チェックにはStringUtilsのメソッドを使おう!

# はじめに
こんにちは。なっしーです!
前回に引き続き、Java(Apache、Spring環境)のtipsを紹介しようと思います!

前回はこちら↓
https://qiita.com/nashi-nashi/items/e1b0b7cf6d8934857950

# 想定読者層
前回と同じく若手向けの記事です。
Javaでの業務ロジックや個人開発などでコードを書き始めた人を想定しています。

# 忙しい人向け結論
– Stringのnull、空文字チェックにはStringUtilsのメソッド(isEmpty()、isBlank())を使おう!
– StringUtilsには他にも便利なString用のメソッドがあるよ!
– Apache版とSpring版で同じメソッドとかがあるけど機能が違うよ!
– Spring版StringUtils.isEmpty()は非推奨になったよ!

# 本編
今回は主に**Apache**版の`StringUtils.isEmpty()`と`StringUtils.isBlank()`について解説します。

皆さんはString型の文字列のn

元記事を表示

SpringとMyBatisを使ったアプリケーション開発のメモ -その3 RESTEasy編-

# この記事について
この記事は 2011年に自分のブログに書いていた記事を発掘したものです。10年以上の文章なので、表現が稚拙だったり、時代が古いところもありますが、何かの役に立つかもしれないと考え、Qiitaに持ってくることにしました。

本連載の [「SpringとMyBatisを使ったアプリケーション開発のメモ -その1-」](https://qiita.com/kunichiko/items/3c06fc480a2eff522945) と [「SpringとMyBatisを使ったアプリケーション開発のメモ -その2-」](https://qiita.com/kunichiko/items/b7987750364ae8820ae3) で、SpringとMyBatisを使ったアプリケーション開発について調べ、Springを使うとDI (Dependency Injection) という技法使ってサーバサイドアプリケーションをすっきりと記述できるのがわかりました。

ただ、前回までに作成したアプリケーションはmain()メソッドからサービス層を呼び出すだけのもので、きちん

元記事を表示

SpringとMyBatisを使ったアプリケーション開発のメモ -その2-

# この記事について
この記事は 2011年に自分のブログに書いていた記事を発掘したものです。10年以上の文章なので、表現が稚拙だったり、時代が古いところもありますが、何かの役に立つかもしれないと考え、Qiitaに持ってくることにしました。


# DIコンテナによるトランザクション管理
## MyBatis単体で書いた場合と比較してみる
DIコンテナが何をしていたのか説明する前に、「もしSpringが無かったらどうやって書いていたはずだったのか」というのを示したいと思います。両者を対比をする事でDIコンテナの存在意義やDIという考え方の面白さがわかってくるかもしれません。

ではさっそく、前回作ったCard管理アプリケーションを、SpringなどのDIコンテナを使わないように直してみます。

コード中でSpringが明示的に顔を出しているのは、mainメソッドでCardServiceインスタンスを取得しているところです。ここを次のようにnewするコードに書き換える事になります。

“`java
CardService service = new CardService

元記事を表示

SpringとMyBatisを使ったアプリケーション開発のメモ -その1-

# この記事について

この記事は 2011年に自分のブログに書いていた記事を発掘したものです。10年以上の文章なので、表現が稚拙だったり、時代が古いところもありますが、何かの役に立つかもしれないと考え、Qiitaに持ってくることにしました。

—-

# はじめに

Javaの開発をしている人は大概サーバサイドで何か作ってるんじゃないかと思いますが、このサーバサイドJavaを取り巻く環境は日々めまぐるしく進歩していて、ちょっと気を抜くとすぐに置いて行かれてしまいます。

特にサーバサイドJavaを取り巻く技術として「DI (Dependency Injection)」という単語は良く聞くと思いますが、正直僕はあまり突っ込んで使っていませんでした。DIの思想自体は理解しているつもりで、メリットも分かっているつもりではいましたが、「DIを積極的に導入した場合にどういうものが出来上がるのか」について、自分の中でもやもやとした状態が続いていたからです。

そのもやもやを晴らそうとドキュメントベースで知識は入れていたものの、DIコンテナの一つである Spring3 のマニュアルとか700ペ

元記事を表示

SpringBootでEntityを使ってMySQLのレコード更新(アップサート)

# この記事はこれの続きです

https://qiita.com/waokitsune/items/4f73350f54b0474c99b1

# Repositoryクラス

変更無しです。

# Serviceクラス

Repositoryクラスの “`save()“` で1レコード分、 “`saveAll()“` で複数件。

“`java:UnkoService.java
package com.example.demo;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class UnkoService {

@Autowired
Unko

元記事を表示

[Google Forms API(V1)] JavaでGoolgeフォームの変更監視を登録・更新・停止する

Gmail API v1(Java)を使用して、
Goolgeフォームの変更監視を登録・更新・停止する方法
についてご紹介します。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Forms API(V1)] JavaでForms APIを使う](https://qiita.com/doran/items/6a25c15309f442c4d679)
を参照ください。
:::

|No||目次|
|—|—|—|
|1||[プッシュ通知を登録](#1-プッシュ通知を登録)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[プッシュ通知を更新](#2-プッシュ通知を更新)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|
|3||[プッシュ通知を停止](#3-プッシュ通知を停止)|
||1|[スコープ](#31-スコープ)

元記事を表示

今更JavaでGUI

# JavaでWindow制御ってどうやってんの?
ふと疑問に思ったので調べてみました。
仮説としてはWindow制御はOS領域になるので、どこかでnativeメソッドなりを呼び出して管理を任せているはず。
今回はWindowsを対象にしてます。

## とりあえず何はともあれ表示
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48666/a71b008a-0aed-6997-91b5-f114e20dfb1c.png)
はい。
白背景のWindowを作成して表示することができました。
簡単なんですが、このキャプチャを取る時に予想外の挙動が。
Windows標準のSnipping Toolを使ったところ、表示されていたWindowがどこかへ行ってしまいます。
これもOS側での挙動でしょうか。

## APIコールを探して
Win32APIあたりを呼んでそうなnativeメソッドを探してソースコードを読み進めていきます。
![2.PNG](https://qiita-image-store.s3.

元記事を表示

webアプリを公開 HelloWorld!

## やったこと
最小限の作業で完成させた。
手順ゼロについては以下参照
https://qiita.com/isekaigk/items/ab2809a4305d46adbe68

1. コントローラー作成
2. Dockerfile作成
3. Github登録
4. RenderとGithub連携

## 1.コントローラー作成
コントローラー(受け渡し部品)の作成をした
リンク(リクエスト)と動作をマッピングする。今回の動作は「Hello Wlorld」を出力する

“`java:HelloApplicationController.java
package com.example.hello;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloApplicationController {
@Req

元記事を表示

SpringBootでEntityを使ってMySQLのレコード削除(1件、全件)

# この記事はこれの続きです

https://qiita.com/waokitsune/items/de1ae587d335cb7a6464

# Repositoryクラス

変更無しです。

# Serviceクラス

Repositoryクラスの “`delete()“` で1レコード分、 “`deleteAll()“` で全件。

“`java:UnkoService
package com.example.demo;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class UnkoService {

@Autowired
UnkoRe

元記事を表示

Spring Boot 2.6.6 から 3.1.2 へのバージョンアップ対応

# 背景
BIPROGY では Spring Boot ベースのサンプルアプリケーション「Dressca」を作成し、様々な案件で雛形として使っています。
この Doressca は Spring Boot のバージョン 2.6 系で作られていたのですが、サポート期限が 2022/11/24 、有償サポートも 2024/02/24 となっていることから、 3.1 系へとバージョンアップする必要がありました。
最近の OSS は破壊的な変更は少なくなりつつあるものの、 Spring Boot 2 系から 3 系へのメジャーバージョンアップであることや Jakarta EE9 への対応などがあるため、それなりの非互換が予想されました。
本記事は、バージョンアップ作業で(予想通り)様々な非互換、非推奨に直面し、試行錯誤しながら対応した記録です。
これから Spring Boot 3 系にバージョンアップしようとしている誰かの支えになれると幸いです。

# バージョンアップの詳細
Spring Bootのバージョン 2.6 系から 3.1 系へとバージョンアップすることで、 Java や Gr

元記事を表示

Javeとシェルスクリプトでセルフメディケーション税制合計額を算出する。

# はじめに

皆さんは確定申告をされたことはあるでしょうか?

今回はセルフメディケーション税制の合計額をいくら使ったかを見ていきたいと思います。

確定申告されている方なら知っていると思いますが、セルフメディケーション税制とは年間12000円以上第2類医薬品を買うと、確定申告の時に控除されるというものです。

ドラッグストアで該当医薬品(風邪薬や頭痛薬など対象)を買うとレシートの商品名の横辺りに◆マークがついていると思います。

レシートをファイルに見立てて、購入日付、商品名、税抜き額をJavaでファイルを作成し、軽減税率を加味して、税率と税込額をシェルスクリプトで算出します。
そして最後にセルフメディケーション税制の合計額を算出したいと思います。

セルフメディケーション税制対象は商品名の頭に◆、軽減税率では消費税8%対象が商品名の頭に*を付けます。

因みに、今回の購入商品はあくまでも一例であり、設定はフィクションです。

## Javaのプログラムから見ていきましょう。
“`Java:Medicine.java

import java.io.*;

class Recei

元記事を表示

eclipse で Tomcat始動時に「ポートが無効」と表示されたら

# もし以下のような事象に遭遇したら…
~~~
1つ以上のポートが無効なため、サーバーを始動できません。
サーバー・エディタを開き、無効なポートを訂正してください。
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3658170/560f851e-001f-25a4-4151-05a64e616cfd.png)

# Tomcat管理ポートを設定しよう
こんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3658170/6de7a9d7-583e-ce44-a54d-f152ba604888.png)

以上

元記事を表示

なんとなくで触れてきた「pom,maven,jar」について

## やること
Javaのアプリを作るにあたってなんとなくで触れてきたファイルについて整理する。

## 選ばれし、ものたち
– pomファイル
– maven
– jarファイル

### chatgptに聞いてみた
MavenはPOMを使用してJavaプロジェクトを管理し、プロジェクトのビルドと依存関係の解決を自動化します。そして、その結果としてJARファイルが生成され、他のプロジェクトで利用できるようになります。

### それぞれ
・pomファイル
プロジェクトのメタデータ(名前、Ver、依存関係、プラグイン)を記述
・maven
Javaプロジェクトのビルドを実行する。このとき、pomファイルから情報を得る
・jarファイル
Javaのプログラムやリソースをまとめたもの。pomをmavenでビルドした時に生成される。デプロイの時に使用される*

*Webアプリの時にはWARファイルも必要となる

### まとめ
pomファイルに依存関係やプラグインを記載し、 mavenでpomをインプットにして、ビルドし、jarファイルを生成する。jarファイルにはプログラムやリソースをまと

元記事を表示

[Google Forms API(V1)] JavaでGoolgeフォームの変更監視中リストを取得する

Gmail API v1(Java)を使用して、
Goolgeフォームの変更監視中のリストを取得する方法
についてご紹介します。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Forms API(V1)] JavaでForms APIを使う](https://qiita.com/doran/items/6a25c15309f442c4d679)
を参照ください。
:::

|No||目次|
|—|—|—|
|1||[監視中リストの取得](#1-監視中リストの取得)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|

## 1. 監視中リストの取得
監視中のリストを取得します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
“`
FormsScopes.DRIVE
FormsScopes.DRIVE_FILE
FormsScopes.DRIVE_READONL

元記事を表示

OTHERカテゴリの最新記事