- 1. org.thymeleaf.exceptions.TemplateInputException: Error resolving template, template might not exist or might not be accessible by any of the configured Template Resolvers
- 2. 【Java】Spring Data JPAでN+1問題が起きないコーディングをしよう。
- 3. アノテーションベースの MyBatis で one-to-one / one-to-many のテーブルを1クエリでとってくる方法
- 4. HottyDB(検索エンジン+レコメンドエンジン+RDB)を個人開発するために読んだ書籍紹介!
- 5. Eclipseで構築したサーバーが起動しないときの対処法
- 6. JUnit5の@BeforeEachと@AfterEachが実行されない
- 7. LDAP再認証
- 8. JavaによるSwingを用いたオセロゲームの作成
- 9. 個人開発で、検索エンジン+レコメンドエンジン機能つきのRDB:「HottyDB(α版)」を開発しました!
- 10. springのRequestBodyにswaggerでexampleを付与
- 11. 現場で役立つシステム設計の原則を読んで
- 12. [Java] コレクション List Map Setについて
- 13. opensource COBOL 4J はじめの一歩
- 14. SpringBootにおけるバッチ処理
- 15. 【Spring Boot+JPA】レコードの作成・更新日時を扱う
- 16. STS環境構築
- 17. Vue.jsで簡単なチャットアプリを作ってみた
- 18. log4j の出力を rsyslog に食わせる
- 19. 【JAVA→Python】JAVAで書いた特定の文字をカウントするコードをPythonに書き換えてもらう【新人教育】
- 20. JUnit未経験者がテストコードを書ききるためにまずやったことと、初心者的悩みポイントを逆引き解説
org.thymeleaf.exceptions.TemplateInputException: Error resolving template, template might not exist or might not be accessible by any of the configured Template Resolvers
Spring bootでプログラムを書いていてハマったメモ。
プログラムを実行し、入り口URLにアクセスしたところ、表題のエラーメッセージが表示された。
コントローラーのソースを見ても、return “uploadForm”;
おかしな値は返していない。
src/main/resources/templatesフォルダを作成し、その中に、ちゃんとHTMLファイルを置いている。ファイル名はuploadForm.htm 。
uploadForm.htm …
**そこだ!**
uploadForm.html
とリネームすると、期待した動作となった。
今時、拡張子をhtmとするやつなどいない。**加齢臭あふれる間違い**だった。
以上。
【Java】Spring Data JPAでN+1問題が起きないコーディングをしよう。
# N+1問題とは
2テーブルの情報を紐づけて取得する際に、必要以上にSQLが実行されてしまうこと。
対象テーブル(School)
関連テーブル(Student)具体的には、対象テーブル(School)に紐づく**関連テーブル(Student)を取得するSQL**が必要以上の回数で実行されてしまう。
# SQLでN+1問題を解説
|Schoolテーブル|
|—-|
|id|
|name||Studentテーブル|
|—-|
|id|
|name|
|school_id ****| JOINを使えば、全Schoolとそれに紐づくStudentを1つのSQLで取得できる?
“`sql
SELECT * FROM School sc JOIN Student st ON sc.id = st.school_id;
“`
これで話は終わり…ではなく、N+1問題の場合はどういうSQLになるかというと、次のようなSQLとなる。
“`sql
— 最初に、全Schoolを取得
SELECT * FROM School;
— 次に、取得したS
アノテーションベースの MyBatis で one-to-one / one-to-many のテーブルを1クエリでとってくる方法
積年の疑問が晴れた。が、だいぶゴツい。
## サマリ
– one-to-many のときは、@One アノテーションに columnPrefix / resultMap を使う
– many-to-many のときは、@Many アノテーションでおなじようにすればできるはず(未検証)## 背景
### 過去、アノテーションベースでは N+1 問題が回避不可だった
https://qiita.com/d-yosh/items/a2bec9718bccfe15a6ae#one-many
> しかし、@Oneや@Manyでは上記と同じことを実現できず、必ず他の select を実行するしかありません。
select を利用する方法は N+1 問題が起きてしまうのが嫌で、個人的にはあまり使っていなかったので、ここはちょっとデメリットかなと思いました。## mybatis-3.5.5 で解消した模様
mybatis-3.5.5 で `@One` `@Many` に columnPrefix を指定できるようになった。
これにより、N + 1 問題を発生させずに、1クエリで on
HottyDB(検索エンジン+レコメンドエンジン+RDB)を個人開発するために読んだ書籍紹介!
# この記事の概要
筆者は、HottyDBという検索エンジンとレコメンドエンジンの機能を搭載したRDB(リレーショナルデータベース)を個人開発しています。
この記事では、HottyDBを開発するにあたって勉強した書籍を紹介したいと思います!ちなみに、HottyDBについて詳しく解説した記事もアップしていますので、こちらもあわせてご覧ください!
https://qiita.com/toru1055/items/0fe400989373823e9c78
# 読んだ本を紹介
## ざっくり分類すると、
読んだ本をざっくりと分類するとこんな感じになります。| 分類 | 説明 |
| — | — |
| データベースの基礎 | データベースの実装方法の大枠を掴む |
| データベースの実装 | データベースの実装方法の詳細 |
| コンパイラ系 | データベースはSQLで操作するので、SQLを解釈するためにコンパイラの知識も必要 |
| Java | Javaによるマルチスレッドプログラミングやネットワークプログラミングの方法を勉強|
| アルゴリズムとデータ構造 | デー
Eclipseで構築したサーバーが起動しないときの対処法
古い環境で需要のある内容ではないですが、かなりハマったので残しておきます。
# 開発環境
macOS Monterey 12.3.1
Eclipse 2019-12 (4.14.0)
Tomcat v8.0# 概要
環境構築中、Eclipseでサーバーを構築し、起動させるとすぐにエラーメッセージがコンソール上に表示されました。
“`text:コンソール
重大: Begin event threw exception [火 7 05 15:48:49 JST 2022]
警告: Catalina.start using conf/server.xml: Error at (21, 76) : org.apache.catalina.startup.VersionLoggerListener [火 7 05 15:48:49 JST 2022]
重大: Begin event threw exception [火 7 05 15:48:49 JST 2022]
警告: Catalina.start using conf/server.xml: Error at (21, 76) :
JUnit5の@BeforeEachと@AfterEachが実行されない
# 問題
JUnit5でテスト実行時に`@BeforeEach`アノテーションと`@AfterEach`アノテーションのついたメソッドが実行されないことがあった。# 解決策
下記リンクの回答で解決。https://stackoverflow.com/questions/49441049/junit-5-does-not-execute-method-annotated-with-beforeeach
>Your init() method is not invoked because you have not instructed Maven Surefire to use the JUnit Platform Surefire Provider.
>Thus, surprisingly your test is not even being run with JUnit. Instead, it is being run with Maven Surefire’s support for what they call POJO Tests.
>Adding the foll
LDAP再認証
概要 : SOS用ユーザのLDAP認証が失敗した際に認証を救済する。
処理概要: 1. LDAP検索用ユーザが認証したユーザの組織情報の検索を行う。
2. 検索結果により、正しい組織情報を用いて再度認証を行う。前提条件: LDAP検索用ユーザがLDAPサーバ側に用意されている事。
※ 戻り値によりエラー内容を識別しているため、当処理は必ず例外処理内に記述してください。
※ LDAPサーバのURI,ポート,ドメイン,組織情報等については各自設定をお願いいたします。
※ FRONT_SGはxmlファイルです。
xmlファイルのタグ参照は必須ではないため、
各プロパティに直接値を設定してください。・ LDAP認証プロパティ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1339882/67759b5d-713b-4f71-10eb-e9501fca71f4.png)・ソース
public static int authenticationLD
JavaによるSwingを用いたオセロゲームの作成
## 環境
Eclipse IDE 2022-03 (4.23.0)
MacBook Pro 2020
macOS Monterey バージョン12.4## 使用技術
Java (11.0.14.1)
Swing## プログラムの概要
ローカルのPC上で動作するオセロゲームアプリケーション。
プログラムで動作するコンピュータが相手となる。## 機能
– オセロゲームの基本的なアクション。(コマの配置、パス)
– 難易度の選択## 工夫した点
#### コンピュータがコマを置く場所を探索する際の動き
##### ①最初に考えたプログラム
自分の駒が置いてあるマスの周りにある敵の駒を探し、敵の駒があればその場所から再度周りの敵のコマ探す
##### ②工夫したプログラム
自分の駒が置いてあるマスの座標を取得し、周囲に敵の駒があった場合にその方向のマスの座標を連続してリストとして取得し最終地点に空きマスがあるか判定する①の場合、コードを見たときに直感的にわかりにくくバグの確認などが難しくなる可能性があったため、工夫をしました。
個人開発で、検索エンジン+レコメンドエンジン機能つきのRDB:「HottyDB(α版)」を開発しました!
# この記事の概要
個人開発で **HottyDB** という検索エンジンとレコメンドエンジンの機能を搭載したRDBを開発し、α版を公開しました!#### [>> HottyDBの公式サイト](https://hottydb.gitlab.io/site/)
https://hottydb.gitlab.io/site/ので、この記事では**HottyDB**の特徴的な機能やその使い方について紹介したいと思います!
# HottyDBとは?
![logo](https://hottydb.gitlab.io/site/facebook_cover_photo_2.png)
HottyDBとは、検索エンジンとレコメンドエンジンの機能を搭載したRDB(リレーショナルデータベース)です。
SQLを用いた通常のデータ操作に加え、文書の全文検索や検索結果の機械学習ランキング(MLR)・アイテムレコメンデーションのロジックなどを全て1つのソフトウェアで担います。
1つのソフトウェアでこれらを実現することで、面倒なデータ伝送システムの構築を一切不要にし、利用者は機械学習などの知識がなく
springのRequestBodyにswaggerでexampleを付与
たとえば、下記のようにStringに “`@RequestBody“` を付与してswagger-uiで参照すると入力例があまりユーザフレンドリーでない画面になる。
“`java
@RestController
public class SampleRestController {
@PostMapping(“/sample”)
public String sample(@RequestBody String body) {
…
“`![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31934/0ef96b17-27c4-dc6a-fecc-7b3328f662eb.png)
なので、サンプルとなる適当なjsonなどをデフォルトで表示したい。
適当に“`build.gradle“`を作る。
“`gradle
plugins {
id ‘org.springframework.boot’ version ‘2.7.1’
id ‘io.spr
現場で役立つシステム設計の原則を読んで
[現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E5%BD%B9%E7%AB%8B%E3%81%A4%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%A8%AD%E8%A8%88%E3%81%AE%E5%8E%9F%E5%89%87-%E3%80%9C%E5%A4%89%E6%9B%B4%E3%82%92%E6%A5%BD%E3%81%A7%E5%AE%89%E5%85%A8%E3%81%AB%E3%81%99%E3%82%8B%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%AE%E5%AE%9F%E8%B7%B5%E6%8A%80%E6%B3%95-%E5%A2%97%E7%94%B0-%E4%BA%A8-ebook/dp/B073GSDBGT/ref=sr_1_1?__mk_ja_JP=%E3%82%A
[Java] コレクション List Map Setについて
### はじめに
Java学習中にでてきたコレクションについてまとめました### コレクションAPI
オブジェクトの集合を管理、操作するJava標準のAPI
オブジェクトの集合 → コレクション
コレクションの集合 → 要素よく使うAPI(予め要素の追加・削除などのメソッドが用意されている)
– List
– Map
– Set### List
配列同様インデックス番号順序に要素を管理するコレクション、要素の重複ok
List自体はインターフェースなのでListを実装している`ArrayList`や`LinkedList`などを使用(import)する必要がある
(`import java.util.ArrayList;`)
##### 配列との違い
配列:要素数の指定が必要
List:要素数の指定が必要なく要素の追加・削除するたびにサイズが増減##### 基本形
“`java
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;// ArrayListを生成
opensource COBOL 4J はじめの一歩
# はじめに
COBOLをお持ちのIT部門の方より、現在のCOBOL資産をJavaに移行したいという相談をよく聞きます。この記事では、そのような検討をしているご担当者様向けに、オープンソースソフトウェア(以下、OSS)の **opensource COBOL 4J** による COBOL to Java 変換を試す手順をご紹介します。https://github.com/opensourcecobol/opensourcecobol4j
# opensource COBOL 4Jとは
[opensource COBOL 4J](https://github.com/opensourcecobol/opensourcecobol4j) は、[OSSコンソーシアム](https://www.osscons.jp/)が開発して Github で公開しているOSSのCOBOLコンパイラです。COBOLコンパイルの過程で、COBOLを中間Javaソースに変換し、Javaコンパイラでバイトコードを生成する仕組みです。処理の流れは下図のとおりです。
![image.png](https://q
SpringBootにおけるバッチ処理
https://qiita.com/kazuki43zoo/items/47ed3b15077773f02448
上記記事を参考にさせていただきましたSpringBootで何らかのバッチ処理を作る際に高機能でジョブを制御する仕組みがあるSpringBatchを使いたくないようなケースがあります(例えばジョブスケジューラーなどを利用していてジョブは実行するだけにしたい場合など)。その場合はJavaコマンド実行してリターンコードで結果を返すようなシンプルな構造にしたい。
## やりたいこと
・SpringBootでコマンド実行して指定した処理を動かす
・機能ごとにクラスを分けてどの機能を動かすか?は引数で指定する
・ジョブの成功/失敗はコマンド実行のリターンコードで判断する### 構成
実行コマンドイメージ
“`sh
java exec:<実行したいクラス名> -jar filename.jar
“`コマンド実行した際の最初にコールするクラス
“`Java:Application.java
package com.example.springboot;imp
【Spring Boot+JPA】レコードの作成・更新日時を扱う
Spring Bootを使ってTODOアプリを作成している際に日付の登録や表示で少し詰まったので記録。
# 環境
* Java 11
* Spring Boot 2.7.0
* Maven 4.0.0
* MySQL 8.0.23# やりたいこと
Spring Data JPAを用いてEntityの保存時に自動で作成、更新日時が入るようにしたい# MySQLの設定確認
* todos table
“`
mysql> desc todos;
+————–+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————–+————–+——+—–+———+—————-+
| id | int | NO | PRI | NULL |
STS環境構築
## 環境
|項目|バージョン|
|—-|—-|
|OS|Windows10|
|STS|4.15.1|## STSをダウンロード~起動
1. 下記から使用しているOSの「Spring Tools 4 for Eclipse」を押下する。
https://spring.io/tools1. ダウンロードしたjarファイルをダブルクリック、あるいはコマンドプロンプトで下記を実行し、STSを展開する。
1. “`sh:commond
java -jar {ダウンロードしたjarファイル}
# ex) java -jar ./spring-tool-suite-4-4.15.1.RELEASE-e4.24.0-win32.win32.x86_64.self-extracting.jar1. 展開したフォルダは適当なフォルダに格納する。
1. 「SpringToolSuite4.exe」を実行する。## STSを日本語化
2. 下記の「Pleiades プラグイン・ダウンロード」から使用しているOSを押下する。
https://
Vue.jsで簡単なチャットアプリを作ってみた
Vue.jsの学習の為、チャットアプリを作成してみました。
Vue.jsの記法を学んだ後に、どのように成果物を作ればいいかの参考に少しでもなればと思い記事を作ってみました。実装はGitHubに上げております。
フロント(Vue.js)
https://github.com/tkNoPrivate/chat-project-front
サーバー(Java)
https://github.com/tkNoPrivate/chat-project-server## 構成
[Vueアプリ構成](#Vueアプリ構成)
[vuetify](#vuetify)
[ルーティング](#ルーティング)
[APIアクセス](#APIアクセス)
[エラー処理](#エラー処理)
[アプリ紹介](#アプリ紹介)
[まとめ](#まとめ)## Vueアプリ構成
![Vueアプリ構成図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590579/16a1a56c-80ce-6c65-dca0-7b16a734a25
log4j の出力を rsyslog に食わせる
プロセス内から別のプロセスを呼ぶような jar があって、それぞれが同じファイルにログを出力する場合にサブプロセスからのログ出力が無視されそうな場合の対処として rsyslog を使いたい。
log4j には最初から syslog に出力するような Appender があるけれども単純にそれだけだとメッセージしか出力されずクラス名メソッド名などが拾えないのでどうにかしたい
## rsyslog を更新する
CentOS7,8では出力した構造化データを解析して云々するためのモジュール mmpstrucdata.so がインストールされないので更新する
https://www.rsyslog.com/rhelcentos-rpms/
“`
cd /etc/yum.repos.d/
wget http://rpms.adiscon.com/v8-stable/rsyslog.repo
yum install rsyslog
“`## rsyslog.conf を編集する
以下
“`
# 以下コメントアウトを解除する
$ModLoad imudp
$UDPServerR
【JAVA→Python】JAVAで書いた特定の文字をカウントするコードをPythonに書き換えてもらう【新人教育】
# JAVA研修を終えた新卒の子にPythonを教える
入社後研修が終わった新卒の子にとりあえず会社としてはわんぱくにもDjangoの本を渡して学習してもらおうという感じだったので(私の入社時もそうだった)Python自体を学んでもらってDjangoに取り組んでもらおうと思い独断で新人教育の機会をいただきました。
私自身が学習で文章題を解いた時にJAVAでコードを作成したので、せっかくなら新卒の子にPythonに変換してみてもらおうと思いコードを渡してみました。# 目次
[1.実際に渡したコード(JAVA)](#1-実際に渡したコード(JAVA))
[2.そう、それはDjango](#2-そう、それはDjango)
[3.あれこれ話しがあとに返ってきた解答](#3-あれこれ話しがあとに返ってきた解答)
[4.おわりに](#4-おわりに)# 1.実際に渡したコード(JAVA)
“`java:JAVA
import java.util.*;public class Main {
public static void main(String[] args) {
JUnit未経験者がテストコードを書ききるためにまずやったことと、初心者的悩みポイントを逆引き解説
# はじめに : ユニットテストを書いたことない頃の私の声
わかっているんです。知っているんです。ユニットテストを書いた方がいいのは。だけどさ何から始めればいいの?
どうやってテストコード追加するの?
なんかアノテーションがやたらあるのは知ってる。ただ使い方がわからん。
ていうか時間がない!書く時間というか、そもそも最初のキャッチアップの時間が!作れない!というのは数か月前までの私の心の声。
その後、ユニットテストを2つほど書いてみたところで、とりあえず上記のような心の声には「大丈夫だよ、これで始められるよ」と寄り添えるようになった気がします。
そこで– ユニットテストナニモワカラナイ・・から、どきどきしつつも挨拶ができるようになるくらいまでに何をしたか
– テストを書くにあたって最初に直面した「これってどうしたらいい・・・?」を逆引き解説※をまとめます。
※解説とか大層なことを言っていますが、初心者です。間違っているところや「もっとこう書いたらいいよ!」ということがあると思うのでぜひご意見お願いします
# 環境
– Windows10
– Eclipse ID