- 1. 説明
- 2. 説明
- 3.
- 3.1. MVCモデル JSP サーブレット Beans メモ
- 3.2. アクションタグ メモ
- 3.3. ApplicationRunnerはいつ実行されるのか
- 3.4. JavaBeans
- 3.5. 【Spring WebFlux】WebClientでリトライする時はfilterを忘れずに!
- 3.6. サーブレット JSP メモ
- 3.7. #34 例外処理の共通化
- 3.8. #33 エラー処理 [共通エラー、HTTPエラー毎のエラー]
- 3.9. JavaとgRPCで2Dバーチャルオフィスっぽい何かを作る ③音声をストリーミング
- 3.10. 【Reactor】特定の条件の時だけRetryする
- 3.11. Javaのメソッド参照で注意べきすること
- 3.12. Struts2のValueStackの構造
- 3.13. Basic認証有りProxy環境でDBeaverを使用する時にハマったのでメモ
- 3.14. JavaでExcelのセルに目盛線(グリッド線)またはボーダーを適用する方法
discord botでminecraft serverを操作する【総集編】
# 初めに
この記事は[discord botからminecraft serverを動かすことが目標のアドベントカレンダー](https://qiita.com/advent-calendar/2022/itohal)最終日です.必要な環境は
– Python 3.8以降
– discord.py 2以上
– java 17以上です.私の環境は
– WSL, Ubuntu22.04.1
– Python 3.10.6
– discord.py 2.1.0となっています.
# discord botを作成する
まず,botを作成するためにアカウントを取得します.
[こちらの記事](https://qiita.com/halglobe0108/items/dc056cc48256eeff5526)で説明しています.[discord developer portal](https://discord.com/developers/docs/intro)にてアカウントを作成しましょう.このとき,トークンをコピーしておいてください.# トークンを環境変数に設定
先程コピーしたト
ポリモーフィズム
説明
実際に動作しているインスタンスを、インスタンスの元となった型とは異なる型で扱える仕組みのことを指す。条件は、継承、あるいは実現の関係にあるかである。
“`java
public interface A {
public void start();
}
public class B implements A {
public void start(){
System.out.println(“B”)
}
}
public class C extends B {
public void start(){
System.out.println(“C”);
}
}
public class Main {
public static void main(String[] args) {
A b = new B();
A c = new C();
ArrayList
### 配列とのコード比較
“`java:配列を使ったコード
// 配列を準備
String[] names = new String(4)//4人追加
names[0] = “はたけやま”;
names[1] = “さいとう”;
names[2] = “とよかわ”;
names[3] = “わたなべ”;System.out.println(names[1]);
“`
“`java:ArrayListを使ったコード
import java.util.ArrayList;//ArrayListを準備
ArrayListnames = new ArrayList (); //4人追加
names.add(“はたけやま”);
names.add(“さいとう”);
names.add(“とよかわ”);
names.add(“わたなべ”);System.out.println(names.get(1));
“`### ArrayListの特徴
1.import文を記述する。
`import java.util.ArrayList;
初心者だけどGradleをEclipseで使いたい!
[^1]:自分は画像と異なり`C:\Gradle\gradle-7.6`にPATHを通して、Pathに`%GRADLE_HOME%\bin`を設定しています。
[^2]:https://www.web-dev-qa-db-ja.com/ja/groovy/gradle%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%82%92%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AE%E9%81%95%E3%81%84/1056004156/
[^3]:https://qiita.com/tenten0213/items/41cd8eb0a3fce121095c初めまして、堀井です。
ブログは色々書いてきたもののQiitaは初めてなのでお手柔らかにお願いします。
さて、プログラムを色々書いているとビルドツールにも手を出したくなりますよね。
Javaのビルドツールと言えば[Ant](https://ant.apache.org/), [Maven](https://
Spring AOPの学習
# きっかけ
Spring bootを使用する開発をするにあたって従来通りのコーディングで進めるだけではなく、フレームワークを活用することを意識したいので学習した。
## AOPとは
Aspect Oriented Programming、アスペクト指向プログラミングの略。
アスペクトとは日本語では「外観、様相」という意味だが、この言葉から仕組みを理解するのは難しい。
ここでは本来の処理の間に、別の場所に記載した処理を割り込ませて実行するような方法と理解した。### 例
たとえば、メソッドの開始に共通のデバッグログを出力したい場合、従来の方法ではすべてのメソッドにlog出力の処理を記載するかもしくはlog出力のためのメソッドをコールする必要がある。
#### AOPを使用しない場合
“`java
public class ClassA {
public void method1(){
//ログの出力処理がコード内に存在する。
log.info(“method1() enter”);//ビジネス
インクリメント演算子(++)・デクリメント演算子(–)
説明
変数の値に「1」を加算・減算するための演算子である。前置「++a」と後置「a++」がある。前置は、演算結果が代入されることに対し、後置は、元の値のコピーが戻されてから、変数の値が加算される。
“`java
public class Main {
public static void main(String[] args) {//前置と後置の違い
int a = 10;
int b = ++a;//b = 1 + 10
int c = a++;//c = 11 → a = 12int d = 10;
int e = d++ + d + d– – d– + ++d;//10 + 11 + 11 -10 + 10
}
}
“`
MVCモデル JSP サーブレット Beans メモ
## MVCモデルとは
webアプリの設計モデル
Beansが処理ロジックを担当
JSPが画面表示担当
サーブレットが全体のコントロールを担当## 流れ
リクエストがサーブレットに届く。その後、BeansやJSPと連携し、レスポンスする。
また、データベースを組み込む場合、beansに入力する。
アクションタグ メモ
## タグ
### jsp:useBean
指定したスコープ内のインスタンスを取得。なければ新規のインスタンスを生成
スコープ:オブジェクトの利用可能期間を決めることができる“`java
“`
### setProperty
Beansが持つsetterメソッドを呼び出す### getProperty
Beansが持つgetterメソッドを呼び出す参考資料
ApplicationRunnerはいつ実行されるのか
# 初めに
Spring BootでApplicationRunnerインターフェースを用いてバッチ処理を実装する機会があった。
Application Runnerがいつ実行されるのかパッとわからなかったので調査を行った。
(動かしてみればなんとなく理解できるもののもうちょっと理解度を上げたい)
ここではApplicationRunnerインターフェースを実装したbeanをApplicationRunnerと呼ぶこととする。# 前提
本稿は以下のバージョンをベースに記述している。
* Spring Boot V3.0.1# 結論
ApplicationRunnerはSpring Bootアプリケーション起動時の最後の処理として実行される。
もし複数存在すれば全てを実行する。(アノテーション(@Order)などで順番を明示していればその順番で実行される)# Application Runnerとは
Application Runnerとは、以下のインターフェースを実装したbeanである。>Interface used to indicate that a bean sh
JavaBeans
## JavaBeansとは
インスタンスの内容をまるごとファイルに保存するメソッド## 設計ルール
クラスをpublicにする
引数なしのコンストラクタを作成
java.io.serializableを実装
パッケージ化
getter/setterを追加参考資料
【Spring WebFlux】WebClientでリトライする時はfilterを忘れずに!
この記事は`Spring Advent Calendar 2022`の24日目の記事になりました。
https://qiita.com/advent-calendar/2022/spring
# TL;DR
– `WebClient`のリトライ処理で、頻出のサンプルはそのまま使うとリクエスト失敗以外の理由でもリトライされる場合が有る
– 特に取得した`JSON`のデシリアライズに失敗した場合
– 冪等性の無い`API`に対してこの問題を踏むと、データ不整合が発生しうる
– `Retry`に`filter`を付けることでこの問題は回避できる# 本文
## 共通で利用するコードについて
以降の解説では、以下の`WebClient`及び`DTO`を利用します。
諸事情から`Kotlin`で書いていますが、`Java`で書いた場合と大差有るような内容は有りません。“`kotlin
import com.fasterxml.jackson.databind.DeserializationFeature
import com.fasterxml.jackson.databind.
サーブレット JSP メモ
## サーブレットとは
サーバー側で動くjavaプログラム
HttpSevletクラスを継承することで、
webブラウザからのリクエストを受け取ることができるようになります。
addressとサーブレットの関連付けしているのが、@(アノテーション)
doGet/doPostは、webブラウザ側からどのようにして、呼ばれるのかを指定する方法。## JSPとは
HTMLの中にjavaプログラムを組み込める技術
画面のデザインを担当する。## 連携
### リクエストオブジェクトの利用
req.setAttribute(“rock”, rock)というコードを書くことで、
リクエストオブジェクトに格納可能。### JSPにリクエストオブジェクトに格納したデータを転送する
RequestDispatcher rd = request.getRequestDispatcher(URL);
rd.forward(request, response);### JSPから出力
request.GetAttribute(“rock”);参考資料
https://www.you
#34 例外処理の共通化
# #34 例外処理の共通化
Springでは例外処理を共通化できる仕組みがいくつかあります。例外処理を共通化することで開発者は本質的な処理の実装に集中することができます。# 前提条件
この記事はSpringの最低限の知識が必要になります。
また、なるべく分かりやすく書くつもりですが、この記事の目的は自分の勉強のアウトプットであるため所々説明は省略します。# 構築環境
1. 各バージョン
Spring Boot ver 2.7.5
mybatis-spring-boot-starter ver 2.2.2
Model Mapper ver 3.1.0
jquery ver 3.6.1
bootstrap ver 5.2.2
webjars-locator ver 0.46
thymeleaf-layout-dialect ver 3.0.02. 依存関係
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884987/58b53ccd-7cf2-2d82-4214-9f0c08
#33 エラー処理 [共通エラー、HTTPエラー毎のエラー]
# #33 エラー処理 [共通エラー、HTTPエラー毎のエラー]
今回はエラー処理に関して学んでいきます。# 前提条件
この記事はSpringの最低限の知識が必要になります。
また、なるべく分かりやすく書くつもりですが、この記事の目的は自分の勉強のアウトプットであるため所々説明は省略します。# 構築環境
1. 各バージョン
Spring Boot ver 2.7.5
mybatis-spring-boot-starter ver 2.2.2
Model Mapper ver 3.1.0
jquery ver 3.6.1
bootstrap ver 5.2.2
webjars-locator ver 0.46
thymeleaf-layout-dialect ver 3.0.02. 依存関係
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884987/58b53ccd-7cf2-2d82-4214-9f0c08fced2e.png)# 成果物
共通エラー画面
![imag
JavaとgRPCで2Dバーチャルオフィスっぽい何かを作る ③音声をストリーミング
:::note info
この記事は [TLB Enjoy Developers Advent Calendar 2022](https://qiita.com/advent-calendar/2022/tlb-enjoy) の24日目の記事です。
:::## 概要
前回に引き続き、2Dバーチャルオフィスっぽいツールを作っていきます。
[JavaとgRPCで2Dバーチャルオフィスっぽい何かを作る ②gRPC bidirectional streaming](https://qiita.com/kdr250/items/7eae0cfd31f24ccc0569)ちなみに出来上がったものは↓になります。それっぽいものができたのではないでしょうか。
![スクリーンショット 2022-12-23 17.47.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710108/4697e565-1cf9-4bd6-4e01-3c84ee6d8efd.png)## 今回の目的
今回はマイクで拾った音声を
【Reactor】特定の条件の時だけRetryする
# やり方
`Retry`にはリトライの条件を指定する`filter`を付けることができます。
これによって特定条件の時だけ`Retry`する処理が書けます。例えば、`MyException`の時だけリトライしたい場合は以下のように書くことができます。
“`java
/* 略 */
.retryWhen(Retry.fixedDelay(3, Duration.ofSeconds(1)).filter((it) -> it instanceof MyException));
“`https://projectreactor.io/docs/core/release/api/reactor/util/retry/RetryBackoffSpec.html#filter-java.util.function.Predicate-
# 参考にさせて頂いたページ
https://stackoverflow.com/a/58521980/13709749
Javaのメソッド参照で注意べきすること
java 8 では様々な機能が追加され、その中でも「ラムダ式」はかなり注目され、話題にもなりました。
同じバージョンで「メソッド参照」という機能も追加されましたが、注目度はイマイチのようです。
ラムダ式に比べると、できることも限られるし、そもそもラムダ式で代用できるため、致し方ないかもしれません。
ただ、メソッド参照で記述するとコード量が減り、かなりスッキリします。
そして、自分が好むか好まざるかに関わらず、既存のコードに含まれていれば、嫌でも理解しなければならないでしょう。
ということで、今回はメソッド参照についての記事となります。
メソッド参照を使うとスマートに記述できますが、結構わかりにくいところや落とし穴があるように感じました。
そのあたりを見ていこうと思います。
まずはテストで使用するコードです。“`java:Greeter.java
package test01;public class Greeter {
private String greet;public Greeter(String greet) {
this.greet = greet;
Struts2のValueStackの構造
# 概要
Struts2ではView-Model間のデータ受け渡しやOGNL式の適用対象としてValueStackを利用している。ValueStackはインターフェースでありStruts2におけるデフォルトの実装はOgnlValueStackである。
ここではOgnlValueStackの構造と利用方法について説明する。# ValueStackの構造
ValueStackはrootとcontextの2つの領域で構成される。|名称|型|説明|
|-|-|-|
|root|CompoundRoot|OGNL式に指定したプロパティやメソッド呼び出しの対象となるオブジェクトが格納されるスタック。Actionクラスのインスタンスなどが格納される。スタックなので後から格納された項目から取り出される。|
|context|OgnlContext|HTTPリクエストやセッションなどが格納されるMap。OGNL式からそれらにアクセスする際に使用される。|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com
Basic認証有りProxy環境でDBeaverを使用する時にハマったのでメモ
# この記事で説明すること
DBeaverをProxy環境(Basic認証有り)で使用できるようにする方法## DBeaverの説明
DBeaverとはJavaで開発されたマルチプラットフォーム(Mac,Windows,Linux全てで使える)のGUIデータベースクライアントアプリケーションです。
OS問わず使えるし、MySQL、PostgreSQL、SQLite、Oracle……等主要なDBMS製品は大体サポートしているのが素敵…☺️## 発生した問題
Proxy環境(Basic認証有り)にDBeaverをインストールして使用したところ、下記2つの機能が使えなくなっている
– 各DBMSのドライバダウンロード
– DBeaverのバージョン更新
エラーメッセージを確認すると
“`
Proxy returns “HTTP/1.1 407 Proxy Authentication Required”
“`
と、Proxyが407認証エラーを返していた## 解消方法
dbeaver.exe をインストールしたフォルダに
dbeave
JavaでExcelのセルに目盛線(グリッド線)またはボーダーを適用する方法
罫線と目盛線は同じではありません。目盛線は、ワークシート全体を貫く1画素単位の灰色の線です。主な目的は、ワークシート上で作業する際に、セルの境界を確認できるようにすることです。目盛線は、セルや枠線に色を付けると見えなくなります。罫線は、さまざまな幅や2重の線を持つことができ、色をつけることもできます。罫線は常に通常の印刷と一緒に印刷されます。
今回は、無料の[Free Spire.XLS for Java](https://jp.e-iceblue.com/introduce/free-spire-excel-for-java.html)を使って、Javaで**Excelのセルに目盛線や罫線を適用する方法**を紹介します。
– **[ワークシートに目盛線を表示する](#ワークシートに目盛線を表示する)**
– **[データを含むセル範囲に罫線を適用する](#データを含むセル範囲に罫線を適用する)**
– **[選択されたセル範囲に罫線を適用する](#選択されたセル範囲に罫線を適用する)**
## 【依存関係の追加】
この方法は、無料のFree Spire.XLS for Javaが必要