- 1. Javaを使ってPDFドキュメントにテーブルを追加する方法
- 2. [Spring]メール送信機能
- 3. [Gradle]War作成時、含まれるapplication.propertiesを環境ごとに切り替える
- 4. [DDD]Apache POIでExcelドメインを作成する
- 5. AtCoder Beginner Contest 012をやった(Java)
- 6. Java Silver SE11 3章
- 7. Log4Shellに脆弱な環境をSpring Bootでつくる
- 8. 【Java】StreamAPIと拡張for文の違い・使い分け
- 9. Java SE 11 パイプでOutputStreamとInputStreamを接続する
- 10. OCIのオブジェクトストレージにJavaからファイルをアップロードする
- 11. Javaを通してWordテキストボックスを追加する方法
- 12. 開発ツール(Checkstyle, Spotbugs, Formatter)について
- 13. 【Scala, Java】LocalDateから月の第何週かを取得する
- 14. 【Java】logback.xml でINFOログの圧縮
- 15. AtCoder Beginner Contest 011をやった(Java)
- 16. 【POC検証】Apache log4j 脆弱性(Log4Shell:CVE-2021-44228)
- 17. SolrJ で NoSuchMethodError
- 18. Java コンビネーション
- 19. SpringBoot × MyBatis中間テーブルからINNER JOINで値を取得する方法
- 20. Java のラムダ式のクラスファイルを調べてみた!
Javaを使ってPDFドキュメントにテーブルを追加する方法
##背景
この記事では、Javaプログラミングを介してPDFドキュメントにテーブルを追加する方法を紹介します。テーブルを追加するときに、テーブルの境界線、セルの配置、セルの背景色、セルの結合、画像の挿入、行の高さ、列の幅、フォント、フォントサイズなどの基本的な属性を設定できます。##下準備
使用ツール:Free Spire.PDF for Java(無料版)
JARファイルの取得とインポート:
公式ウェブサイトからjarファイルパッケージをダウンロードします。ダウンロードした後、ファイルを解凍し、libフォルダー内のSpire.Pdf.jarファイルをJavaプログラムにインポートします。##コード一覧
“`
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import com.spire.pdf.grid.PdfGrid;
import java.awt.*;public class AddTable {
public static void main(String[]args){
[Spring]メール送信機能
## はじめに
`spring-boot-starter-mail`を使用して、Gmailでメールを送信できるようにしていきます
基本的に詳細はjavadocで記載しています## 環境
Java 11
Spring Boot 2.6.1
Gradle 2.24
spring-boot-starter-mail 2.6.1## 依存の追加
“`build.gradle
dependencies {
implementation group: ‘org.springframework.boot’, name: ‘spring-boot-starter-mail’, version: ‘2.6.1’
}
“`## 設定の追加
今回はGmailを使用します“`application.properties
spring.mail.default-encoding=UTF-8
spring.mail.protocol=smtp
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.usern
[Gradle]War作成時、含まれるapplication.propertiesを環境ごとに切り替える
## 環境
Java 11
Spring Boot 2.6.1
Gradle 2.24## 環境ごとにapplication.propertiesを配置
`src/main`配下に、環境毎にresourcesディレクトリを作成し、application.propertiesを配置していきます
![スクリーンショット 2021-12-29 10.08.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539971/d1ec7c7e-a9e0-c4be-69f3-4d1cf6ec67e6.png)## build.gradleにwar作成ロジックを記載
`srcDirs “src/main/resources_$env”`で環境変数毎に作成するresourcesディレクトリを指定しますGradleは最初に`src/main/resources`ディレクトリをコピーするようなので、
↓を記載して、上書きするようにします
`duplicatesStrategy = DuplicatesStrate
[DDD]Apache POIでExcelドメインを作成する
## はじめに
DDD×Apache POI でエクセル出力ドメインを作成していきます## Apache POIとは
> Apache POI(以前はJakarta POIと呼ばれていました)はJavaアプリケーションからExcelやWordなどのMicrosoft製品のフォーマットファイルを読み書きするためのAPIです。https://www.javadrive.jp/poi/
## 環境
Java 11
Spring Boot 2.6.1
Gradle 2.24
Apache POI 4.1.2## 設定
poi-ooxmlも追加することで、 `xlsx`、`dock`といった2007形式のファイルの読み書きが可能となります。“`build.gradle
dependencies {implementation(‘org.apache.poi:poi:4.1.2’)
implementation(‘org.apache.poi:poi-ooxml:4.1.2’)}
“`## エクセルドメイン
ここからDDDの出番です
まずは、`Ex
AtCoder Beginner Contest 012をやった(Java)
AtCoder Beginner Contest 012をやった。
D問題もパッと見た感じ解けそうな気がするので、明日以降に挑戦したく。
※D問題追記予定##[A](https://atcoder.jp/contests/abc012/tasks/abc012_1)
入力された二つの値を入れ替える問題“`Java
import java.util.*;public class Main {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
int A = scan.nextInt();
int B = scan.nextInt();if(A == B){
System.out.println(A + ” ” + B);
} else {
System.out.println
Java Silver SE11 3章
# Java Silver SE11 3章
[黒本](https://www.amazon.co.jp/gp/product/4295007625/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)をもとに学んだことをアウトプットしていきます。
主に問題を解いていて、間違えた箇所もしくは知らなかった内容になります。## インクリメント デクリメント
変数の値に1を加算、減算するための演算子。例
“`java
public class Main {public static void main(String[] args) {
int a = 3;
int b = a += 5; //1.a = a+5 2.b = a
System.out.println(a); //8
System.out.println(b); //8//コンパイルエラー intにlongを格納させようとしている
int c = 2 * 3L; //エラーint d = 10;
int e = d++ + d
Log4Shellに脆弱な環境をSpring Bootでつくる
勉強がてら、話題のLog4Shellに脆弱な環境を作ってみます。
**Log4j2のバージョン2.14.0を使っていると簡単に脆弱な環境を作れました。すぐにバージョンアップしないと危険です!**脆弱性に対するSpring公式サイトの解説
https://spring.io/blog/2021/12/10/log4j2-vulnerability-and-spring-boot
# 題材
公式の[Getting Started Guides](https://spring.io/guides)の中にある[Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/)をベースにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/43c562fd-3989-fc82-ed2d-5ae8f08426f1.png)
* GitHubからソースコードの取得
https://git
【Java】StreamAPIと拡張for文の違い・使い分け
現在、参画しているプロジェクトではjavaを用いて開発しています。
その際、StreamAPIと拡張for文を使う場面が多く、それぞれの違いや、場面によっての使い分けを例をあげてまとめてみました。#Stream API とは
Stream APIとはJava SE 8から追加されたイテレーションの拡張APIです。
ListなどのCollectionを扱う為のもので、値の集計やデータを使った処理などが出来る便利なAPIです。**基本的な流れ**
1. コレクションからstreamを取得
2. streamに対して「中間操作」を実行
3. 「終端操作」で変換したコレクションの中身に対して処理を適用###中間操作の例
| メソッド | 内容 |
|:———–|:——————————|
|filter() | ( )内の式がtrueの要素だけを集める|
|map() | 要素を変換 |
|distinct()
Java SE 11 パイプでOutputStreamとInputStreamを接続する
“`
/* インスタンス */
PipedOutputStream pipedOutputStream = new PipedOutputStream(); //パイプの送信側 上流
PipedInputStream pipedInputStream = new PipedInputStream(); //パイプの受信側 下流/* 送信側と受信側の接続 */
pipedOutputStream.connect(pipedInputStream); //connect()は送信側と受信側のどちら一方から呼び出す/* パイプへの送信 */
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(pipedOutputStream))
bufferedWriter.write(“テキスト”);
bufferedWriter.flus
OCIのオブジェクトストレージにJavaからファイルをアップロードする
OCIのAlways Freeアカウントにある10GBのオブジェクトストレージを活かしたいなーと思っていろいろググって見たもののいい感じにまとまっている資料が[これ](“https://orablogs-jp.blogspot.com/2019/01/cloud-java-controlling-your-cloud.html”)くらいだったし、探すのも大変だったので整理する意味も込めて作成。
#環境
– Ubuntu 20.04
– Visual Studio Code#下準備
– configファイルを作成する
今回使ったのは接続情報をクライアントにもたせる形式なので、configファイルを作成する。
この辺を参考に設定。[Oracleの公式資料]
(“https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/climanualinst.htm”)
[Oracle Cloud(OCI)のoci cli設定ファイルの使い方をまとめてみた](“https://qiita.com/feifo/items/29d842
Javaを通してWordテキストボックスを追加する方法
##背景
Word文書の中で、テキストボックスとは、移動することが可能で、サイズの調整も可能なテキスト、またはグラフィックコンテナというものを指します。テキストボックスにテキスト、画像、テーブル、およびその他のオブジェクトを追加できます。以下では、Javaプログラミングを使用して上記のオブジェクトをWordテキストボックスに追加する方法をご紹介致します。###使用ツール:Free Spire.Doc for Java(無料版)
**JARファイルの取得とインポート:**
公式Webサイトからjarパッケージを**[ダウンロード](https://www.e-iceblue.com/Download/doc-for-java-free.html)**します。ダウンロードした後、ファイルを解凍し、libフォルダー内のSpire.Doc.jarファイルをJavaプログラムにインポートします。(以下の画像の示すように)
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/d908482
開発ツール(Checkstyle, Spotbugs, Formatter)について
開発ツール(Checkstyle, Spotbugs, Formatter)について
Checkstyleについて
→コーディング規約に則ったJavaコードを書くのを補助する開発ツール
https://checkstyle.sourceforge.io/Spotbugsについて
→Javaプログラムの中のバグを見つけるプログラム(ツール)
https://spotbugs.readthedocs.io/ja/latest/introduction.htmlFormatterについて
→コーディング規約に沿ってソースを修正してくれるツール
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Formatter.html
【Scala, Java】LocalDateから月の第何週かを取得する
`java.time.temporal.WeekFields#weekOfMonth` を使うことで、指定日が月の第何週にあたるかを取得できる。
週の始まりを日曜日とするか月曜日とするかも指定できる。このカレンダーを例とする。
“`
???????? – ????
??|??|??|??|??|??|??
??|??|??|??|??|??|??
??|??|??|??|??|??|??
??|??|??|??|??|??|??
??|??|??|??|??|??|??
??|??|??|??|??|??|??
“`カレンダーはこちらを使わせていただきました。
https://qwerty.dev/calendar-generator/## 実装
### 週の始まりを日曜日とするなら
“`scala
val date = LocalDate.of(2021, 12, 26)
val weekField = WeekFields.SUNDAY_START.weekOfMonth()println(date.get(weekField)) // -> 5
“
【Java】logback.xml でINFOログの圧縮
### 概要
JavaのシステムログとしてINFOレベルのログも大量に出力する際、最大バイト数で区切りログファイルを圧縮し保存する。### 修正前
“`logback.xml
…
./logs/maker/system.log
./logs/maker/system.log.%d{yyyy-MM-dd}.gz
7
<
AtCoder Beginner Contest 011をやった(Java)
AtCoder Beginner Contest 011をやった。
~~C問題できませんでした、、、[こちら](https://qiita.com/Zombie_PG/questions/778515700fa8fca0a731)でも投稿しましたが、どなたかご助力いただけませんか。。。~~
~~C問題できたら追記します。~~
C問題追記しました!##[A](https://atcoder.jp/contests/abc011/tasks/abc011_1)
場合分けにより実装。“`Java
import java.util.*;public class Main {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
if(N == 12){
System.out.println(1);
【POC検証】Apache log4j 脆弱性(Log4Shell:CVE-2021-44228)
# 【POC検証】Apache log4j 脆弱性(CVE-2021-44228)
## :black_medium_square: はじめに
2022年12月9日頃~IT業界を騒がせている「Apache log4j 脆弱性(CVE-2021-44228)」なのですが、
各社、確認に追われている方も多いと思っています。
こちらについて、この機会に調べて実際に動きを確かめてみましたので共有と知識整理のために記載します。## :black_medium_square: 対象者
– log4jの脆弱性がどんなものなのか知りたい方
– log4jの脆弱性を実際にローカル環境で動かして試してみたい方
– 攻撃手法について簡単に概要を抑えたい方
– log4jの脆弱性についてまとめて、身近な人に共有したいなと思っている方## :black_medium_square: Apache log4j 脆弱性(Log4Shell:CVE-2021-44228)とは
– 概要
– 今回の脆弱性は「Log4Shell」と呼ばれていて「別名:CVE-2021-44228」というCVE番号
SolrJ で NoSuchMethodError
# 現象
SolrJ を利用したら NoSuchMethodError org.apache.http.impl.conn.PoolingHttpClientConnectionManager.setValidateAfterInactivity(int) が出た.
“`
Exception in thread “main” java.lang.NoSuchMethodError: ‘void org.apache.http.impl.conn.PoolingHttpClientConnectionManager.setValidateAfterInactivity(int)’
at org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:297)
at org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:348)
at org.apache.solr.
Java コンビネーション
# 概要
Java のコンビネーションパターンを試してみました
結果は、関数型(コンビネーションパターン)の方がコードは可読性が増すけど、メモリを多く消費するようです。速度はほとんど変わりがないようでした。
## 参考
– [Combinator Pattern in Java 8](https://www.slideshare.net/gtrefs/combinator-pattern-in-java-8)
– [Javaラムダ式:コンビネーターパターンの改善](https://www.fixes.pub/program/54986.html)
– [functional programming](https://stackoverflow.com/questions/69079291/combinator-pattern-java-function-e-t)# やり方
## 手続き型
“`java
public ValidationResult imperativeValidate(Parson parson) {
var result =
SpringBoot × MyBatis中間テーブルからINNER JOINで値を取得する方法
#はじめに
今回の実装は、「**ログインユーザーの保有するN件のチャットルームを取得する**」という実装を行いました。私の場合、roomsテーブルにはusersを参照する外部キーカラムがなく、中間テーブルであるroom_usersテーブルにroom_idカラムと、ログインユーザーのidが入るcurrent_user_idカラム、ログインユーザーとチャットしているユーザーのidが入るuser_idカラムをカラムとして設定しています。
##usersテーブル
|id(PK) | email | password | password_conf | name | role | created_at | updated_at |
|——-|——–|———–|—————|——-|——-|————|————|
|int |varchar | varchar |varchar |varchar|varchar|Timestamp |Timestamp |
Java のラムダ式のクラスファイルを調べてみた!
(この記事は [地平線に行く](https://yujisoftware.hatenablog.com/entry/java_lambda_reverse_assemble) とのマルチポストです)
Java のラムダ式が、どのようにコンパイルされ実行されているか気になりますよね。
そこで、クラスファイルを分析して、その中身を調べてみました。なお、今回は OpenJDK 17.0.1 を使って調べています。
バージョンによって挙動が異なる場合があるので、ご注意ください。# 外側のローカル変数を参照しない場合
## おさらい:匿名クラスのコンパイル結果
本題のラムダ式を調べてみる前に、匿名クラスの場合にどのようにコンパイルされているかを確認しておきましょう。
(ご存じの方は、読み飛ばしてもらって大丈夫です)今回は、Runnable インタフェースを匿名クラスとして実装しました。
“`Main.java
public class Main {
public static void main(String[] args) throws InterruptedExce