- 1. SpringBootで静的なcssやJavaScriptのファイルを扱う
- 2. Javaのソースファイルモードを使って最も浅いJDBCのサンプルを作ってみた
- 3. TestcontainersでOracle XE起動時にXEPDB1に初期化SQLを実行
- 4. Javaで「continue文の使い方」の動作を確認してみた
- 5. Pathの拡張子をチェックしたい
- 6. Nablarch 6のRESTfulウェブサービスのExampleをOpen Liberty+PostgreSQLを使うように変更してみる
- 7. SpringBootでよくあるエラー
- 8. Javaで「break文の使い方」の動作を確認してみた
- 9. [備忘録]forとwhileの使い分け(Java)
- 10. 備忘-プロパティ & コンストラクタ
- 11. Javaで「拡張for文(for-each文)を使って要素を順に取得する」の動作を確認してみた
- 12. SpringAIのきほんのき
- 13. 【SpringSecurity】5.4.6から5.4.7に上げた時に発生したFilter順序不正について
- 14. 備忘-直列化 & static
- 15. Javaで「do..while文を使った繰り返し処理」の動作を確認してみた
- 16. javaとtypescriptの開発3日目
- 17. 【JavaGold SE8】ラムダ式とは何ぞや
- 18. 【Java】継承とオーバーライドを覚える
- 19. javaとtypescriptでの環境構築
- 20. 【JavaEE】CDIのDI
SpringBootで静的なcssやJavaScriptのファイルを扱う
# この記事はこれの続きです
https://qiita.com/waokitsune/items/25e7712c5bcd96c8bae7
# 静的なファイルを置いておくフォルダー作成
**パッケージではなくフォルダー** というのがポイント。
『src/main/resources』直下にフォルダー作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/80337334-1d39-a97e-fd9b-dea7ea41b313.png)フォルダー名は『static』。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/59428758-002a-49e0-ef16-c9faa337112e.png)# 静的なファイル作成後はこちら
staticより下の階層については、フォルダー名やファイル名に特別な縛りはありません。
本記事ではこのようにcs
Javaのソースファイルモードを使って最も浅いJDBCのサンプルを作ってみた
### サンプルコード
“`jdbc.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class SqlConnect {
public static void main(String[] args) throws Exception {
Class.forName(“com.mysql.cj.jdbc.Driver”);
final String jdbcId = “root”;
final String jdbcPass = “”;
final String jdbcUrl = “jdbc:mysql://127.0.0.1:3306/”;
Connection cn = DriverManager.getConne
TestcontainersでOracle XE起動時にXEPDB1に初期化SQLを実行
# 背景
Testcontainersで“`gvenzl/oracle-xe“`を使用してdockerにOracle XEを起動する際、“`SYS“`としてデフォルトPDBの“`XEPDB1“`に初期化SQLを実行したい。# やり方など
詳細は公式ドキュメント https://hub.docker.com/r/gvenzl/oracle-xe の Initialization scripts に解説がある。まず、コンテナの機能で“`/container-entrypoint-initdb.d“` ディレクトリ下へ “`*.sql“` を配置するとDB初期化時にこれらを実行する。次に、testcontainersの“`withCopyFileToContainer“`でホストのファイルをコンテナにコピーできる。なので、これらを組み合わせて使用する。またポイントとして“`SYS“` ユーザでこれらSQLを実行する。なので、権限が必要な初期化処理はこれを利用する。
サンプルのソースコードは以下の通り。
“`java
import org.testco
Javaで「continue文の使い方」の動作を確認してみた
# 概要
Javaで「continue文の使い方」の動作を確認してみました。
以下のページを参考にしました。https://www.javadrive.jp/start/for/index10.html
# 実装
以下のファイルを作成しました。
“`JSample10_1.java
class JSample10_1{
public static void main(String[] args){
for (int i = 1; i < 10; i++){ if (i % 3 == 0){ continue; } System.out.println("i = " + i); } System.out.println("End"); } } ``` ```JSample10_2.java class JSample10_2{ public static void main(String[] args){ Outer: for (int i = 1; i < 6;
Pathの拡張子をチェックしたい
Pathの拡張子をチェックしたい場合、PathMatcherクラスのmatchesメソッドを利用します。
例) Pathの拡張子がcsvかどうかをチェックする
“`java
Path path = Path.of(“Path/To/Target.csv”);
PathMatcher matcher = FileSystems.getDefault().getPathMatcher(“glob:**.csv”);
if (matcher.matches(path)) {
System.out.println(“This file is csv.”);
} else {
System.out.println(“This file is not csv.”);
}
“`**環境情報**
“`
C:\>javac -version
javac 21-betaC:\>java -version
openjdk version “21-beta” 2023-09-19
OpenJDK Runtime Environment Temurin-21+35-20230904213
Nablarch 6のRESTfulウェブサービスのExampleをOpen Liberty+PostgreSQLを使うように変更してみる
# What’s?
前にNablarchのRESTfulウェブサービスのExampleをPostgreSQLに変更して動かしてみました。
https://qiita.com/charon/items/095a89b19421010160aa
今回は、Nablarch 6を使ってRESTfulウェブサービスのExampleをOpen Liberty+PostgreSQLで動かしてみたいと思います。
Nablarch 6をOpen Libertyで動かすことが主題、とも言えます。
# Nablarch 6
Nablarch 6は2023年12月にリリースされており、現在のバージョンは6u1です。
https://nablarch.github.io/docs/6u1/doc/releases/index.html
Nablarch 6はJakarta EE 10に対応しています。
https://nablarch.github.io/docs/6u1/doc/migration/index.html
NablarchのRESTfulウェブサービスのExampleはこちら
SpringBootでよくあるエラー
# エラー内容
“`
Error starting ApplicationContext. To display the condition evaluation report re-run your application with ‘debug’ enabled.
“`このエラーは、ポート番号がすでに使用中となっているときによく出てしまいます。
# 対処法
ターミナルで
“`
lsof -i:8080
“`
と入力した後、
“`
kill 番号
“`
と入力してください。
番号には一個目を実行した後に出てくるものです。そしてもう一度Eclipseでプログラムを起動してみてください。
# 終わりに
これでも直らなかった場合は、application.propertiesやpom.xmlを見直してみてください。
Javaで「break文の使い方」の動作を確認してみた
# 概要
Javaで「break文の使い方」の動作を確認してみました。
以下のページを参考にしました。https://www.javadrive.jp/start/for/index9.html
# 実装
以下のファイルを作成しました。
“`JSample9_1.java
class JSample9_1{
public static void main(String[] args){
int num = 1;for (int i = 0; i < 30; i++){ num *= 5; System.out.println("num = " + num); if (num > 10000){
System.out.println(“Over 10000”);
break;
}
}
}
}
“`以下のファイルを作成しました。
“`JSample9_2.java
class JSample9_2{
public static void main(S
[備忘録]forとwhileの使い分け(Java)
プログラミングを初めて3日目。
そろそろ処理を繰り返したいぞとなった私は2つの処理を学習しました。**for** と **while**
(do~whileはおそらくしばらく登場しないので次の機会に)いつ、どちらを使えばいいの???
ということでまとめてみました。**・forとは**
“`
import java.util.*;public class Main {
public static void main(String[] args) throws Exception {for (初期値; 条件式; 増減式) {
繰り返し処理
}
}
“`
for 文は冒頭で初期値、条件式、増減式の3つを設定する。
ここで**繰り返しを何回行うか**について設定するのがよくある方法。**・whileとは**
“`
import java.util.*;public class Main {
public static void main(String[] args) throws Exception {
while (条件式)
備忘-プロパティ & コンストラクタ
## プロパティとは
呼び出す側は直接フィールドを変更しているように見えますが、実際はgetterやsetterを通して行われる仕組みを指します。“`java
public class Product{
private String name;
private String id;
private int price;public String getName(){
return this.name;
}public void setName(String name){
this.name = name;
}
}
“`
上記の仕組みにより、フィールドを自由にいじることができ、修正が発生しても簡単に実行できるようになります。## インスタンスとは
コンストラクタを説明する前にインスタンスについて整理することにより、コンストラクタとの違いがわかり、理解しやすいと考えインスタンスをまず書いていきたいです。インスタンスとは、データを格納できる箱のような存在です。名前や価格を箱に詰めていくことで、独自
Javaで「拡張for文(for-each文)を使って要素を順に取得する」の動作を確認してみた
# 概要
Javaで「拡張for文(for-each文)を使って要素を順に取得する」の動作を確認してみました。
以下のページを参考にしました。https://www.javadrive.jp/start/for/index8.html
# 実装
以下のファイルを作成しました。
“`JSample8_1.java
class JSample8_1{
public static void main(String[] args){
String pref[] = {“北海道”, “東京都”, “神奈川県”};for (String str: pref){
System.out.println(str);
}
}
}
“`以下のコマンドを実行しました。
“`
$ javac JSample8_1.java
$ java JSample8_1
北海道
東京都
神奈川県
“`# まとめ
何かの役に立てばと。
SpringAIのきほんのき
## Hello SpringAI
[SpringAI](https://spring.pleiades.io/spring-ai/reference/)はSpringの**AIアプリケーションフレームワーク**です。テキスト生成に限らず画像生成AIや音声生成AIにもサポートを広げています。
テキスト生成においては他のLangChain4jと同じように、さまざまな開発補助をしてくれます。![スクリーンショット 2024-05-31 11.18.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801871/970357ce-291e-cec6-9c4a-3775c06134d6.png)
GPTなどの主要なLLMサービスには対応しており、簡単なコードの実装でLLMが動作するアプリを開発することができます。
ローカルLLMに対しては[Ollama](https://ollama.com/)経由で対応しています。Ollamaやllama.cppについては、以下のとおりになります。
|名前|説
【SpringSecurity】5.4.6から5.4.7に上げた時に発生したFilter順序不正について
# 背景
SpringFrameworkのバージョンを上げたことでエラー画面からログイン画面に戻れなくなったため、確認したのがきっかけです。
Controllerを通過せずにエラーになっていたため、SpringSecurityのTRACEログを確認したところ、SessionManagementFilter通過後の挙動が異なっていることがわかりました。# 【前提】SpringSecurityとは?
> Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.
Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spr
備忘-直列化 & static
## 直列化
インスタンスをバイト列に変換したり、その反対をしたりすることができる仕組みのことです。直列化することにより、ファイルを保存したり、ネットワークで送ったりすることができる様になります。直列化対象のクラスは、java.io.Serializableを実装することが必要になります。“`java
public class Product implements Seralizable {
private String name;
private Deals id;
private int price;
}
“`ProductsクラスとDealsクラスが直列化を実装していた場合、Productsインスタンスを直列化したときにDealsインスタンスも直列化されます。一方でDealsクラスが直列化を実装していなかった場合はバイト列に変換されたとき、Dealsインスタンスの情報は含まれません。また、復元した場合、idフィールドがnullの状態で復元されます。
加えて、直列化した後に資産が更新された場合、直前で直列化してしまったファイルは矛盾が生
Javaで「do..while文を使った繰り返し処理」の動作を確認してみた
# 概要
Javaで「do..while文を使った繰り返し処理」の動作を確認してみました。
以下のページを参考にしました。https://www.javadrive.jp/start/for/index7.html
# 実装
以下のファイルを作成しました。
“`JSample7_1.java
import java.util.Random;class JSample7_1{
public static void main(String[] args){
int num;
Random rand = new Random();System.out.println(“6が出たら終わりです”);
do{
num = rand.nextInt(6) + 1;
System.out.println(“no = ” + num);
}while (num != 6);
}
}
“`以下のコマンドを実行しました。
“`
$ javac JSample7_1.java
$ java JSample7
javaとtypescriptの開発3日目
前回からToDoアプリケーションを作成しました。
ブラウザ表示は簡素なものとなっていますが、サーバーからCRUPを行うAPIを実行できるようになっているので満足しています。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631649/7dd124f0-7f14-3d9c-d0f9-915788ee25d3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631649/bacca9ca-8cbe-be03-d160-94139d8d5404.png)最終的にこのようなディレクトリ構造になりました。
後学のために各ファイルの役割をメモも併せて記載するとこうなります。my-java-ts-project/
├── demo/ # バックエンド (Spring Boot)
│ ├── Dockerfile # Docke
【JavaGold SE8】ラムダ式とは何ぞや
## はじめに
**ラムダ式**って初見だと読めない独特なスタイルですよね。
ちょっと整理してみます。## 1.ラムダ式の基本形
こんなやつ
“`java
Runnable r = () -> System.out.println(“OK”);
// (引数リスト) -> メソッドの実装// 引数ありバージョン
Consumerconsumer = (str) -> System.out.println(str); // 戻り値ありバージョン
Suppliersupplier = () -> {return “OK”};
“`## 2.なんのため?
匿名クラスの実装を簡潔に記述するために利用する。#### ちょい脱線 「匿名クラス(無名クラス)」とは何か
まず、ローカルクラスというメソッドの処理中にクラスを宣言して利用できる仕組みがある。
##### ローカルクラス
“`java
public static void main(String[] args) {class Local implements Runnabl
【Java】継承とオーバーライドを覚える
通常のクラスのインスタンス化に対して、スーパークラスを継承したサブクラスをインスタンス化すると何ができるのか、覚えるための自分用メモです。
# 継承とは?
既存のクラスのフィールドとメソッドを引き継いで、新しいクラスを定義することです。
例えば、以下のクラスを“`Cat“`クラスに継承するとします。
“`java:Animal.java
public class Animal {
String name;public Animal(String name) {
this.name = name;
}public void talk() {
System.out.println(“私は” + this.name + “です。”);
}
}
“`
その場合、以下のように記述します(親クラスに引数なしのコンストラクタが無い場合、“`super()“`でコンストラクタを呼び出す必要あり)。
“`java:Cat.java
public class Cat extends Animal {
p
javaとtypescriptでの環境構築
前回javaとtypescriptの環境構築を行い、その後ホットリロード(ymlファイルにマウント設定追加しただけ)を実装しました。
次に、今回のアプリケーションで使うdbを設定します。
簡易的に 下記ファイルを含むmysqlフォルダを作りました。
my.cnf: MySQLの設定ファイル。
init.sql: データベース初期化用SQLスクリプト。現在のディレクトリツリーはこちらになります。
javaのディレクトリ名がspring bootで設定しなかったのでdemoのままになってたりtypescriptのディレクトリ名がmy-appで違和感ですね…
命名はちゃんとしましょうmy-java-ts-project/
├── demo/
│ ├── Dockerfile
│ ├── pom.xml
│ ├── mvnw
│ ├── .mvn/
│ │ └── (その他のMaven設定ファイル)
│ └── src/
│ ├── main/
│ ├── java/
│ │ └── com/
│
【JavaEE】CDIのDI
## まえがき
研修でJavaEEを学んでいる中で、CDIのインジェクションに苦しみました。とりあえず、現時点で理解したところまでを備忘録として書き留めました。## CDIとは
簡単に言うと、newを使わずにインスタンス化する仕組みのことです。
Context and Dependency Injectionの略で、訳は「コンテキストと依存性注入」。
今回はDIの部分である依存性注入についてまとめます。### 結局何がいいのか
– クラス間の依存関係を弱くしてくれる(疎結合に)
– テストしやすくなる
– インジェクトするクラスとされたクラスのスコープを互いに独立関係にできる## 依存性注入
通常、とあるクラスで別のクラスのオブジェクトを使う場合、
“`java:Game.java
public class Car {
Tire tire = new Tire();
public void CreateCar(){
start(tire);
}
…
}
“`
というようにnewを使ってインスタンス化する。