読者です 読者をやめる 読者になる 読者になる

SIerだけど技術やりたいブログ

5年目のSIerのブログです

PostgreSQLのDockerイメージの使い方

ホスト環境を汚さずにいろいろなバージョンのミドルウェアを構築するために、Dockerは非常に有効な手段だと思います。 この記事は、PostgreSQLのDockerイメージを使うために試行錯誤したときのメモです。 動作確認環境 PostgreSQLの起動 PostgreSQLへの接続(…

SpringのContextHolderいろいろ

Springには、…ContextHolderというクラスがある。スレッドローカルに値を保存しておくことで、情報をいろんなところから参照できるようにする。スレッドローカルは…まあスレッド固有の値ですよね。(あたりまえ)TomcatなどのAPサーバはリクエストごとにwork…

jenkinsのpipeline入門(jenkinsfile)

本記事について、Jenkinsのpipelineが最近(2017/2/20時点で)DSLがごっそり入れ替わったっぽいので内容が古いです。注意。 Jenkins2では、Groovy DSLを用いたpipelineの記述ができるようになったらしい。若干の時代遅れ感があるけど、最近仕事で使う機会があ…

makeのshell関数の実行タイミングは直感と異なる

makeのshell関数の実行タイミングは直感と異なる Makefile作成時にshell関数の実行タイミングが直感と異なっていてハマったのでメモ。 やりたかったこと これ。 www.rhoboro.comsphinxドキュメントをビルドするときに、なるべくビルド環境を汚さず、CIツール…

ブロッキングとかノンブロッキングを理解したい

Spring Framework5では「Reactive」対応が目玉だと言われているが、そもそもその前段のブロッキングやノンブロッキングというのが何なのか、いまいちしっくりこなかったので基本から調べた。(今回は特にネットワーク部分に絞って調べた)また、tomcatの実装で…

Springの@RequestScopeや@SessionScopeは結局どこに保存されるのか?我々は真相に迫った

ある日の出来事 我々は真相に迫った まずはデバッグ Javadocを読んでみる 結論 追加 ある日の出来事 SpringのBeanのスコープ、便利ですよね。ライフサイクル管理を任せられるのはDIコンテナを利用するメリットの大きなところだと思います。いつもは何も考え…

Springの@Asyncで非同期処理をする

この記事の内容 DataSourceTransactionManagerはスレッドごとにTx管理するので、@Async使うときは気をつけよう。 この記事の内容 @Asyncアノテーション サンプルコード スレッド生成ルールのカスタマイズ WEBシステムで使うときの疑問点 検証の題材 ソースコ…

Spring Framework で同一アプリ内でのイベントを扱う(ApplicationEvent、EventPublisher)

なぜイベントを使うのか デフォルトで提供されているイベント Listenerの実装方法 ApplicationListenerを実装する方法(~spring4.1) @Eventlistenerアノテーションを使う方法(spring4.2~) カスタムイベントの実装方法 サンプルアプリの題材説明 Application…

Spring管理外のクラスでSpringのBeanを使う

Spring管理外のクラスでSpringのBeanを使う Spring管理外のクラスでSpringのBeanを使いたい場面がある。 そもそも自分でnewすればいいだけでは?という場面もあるけど、@ProfileでどんなBeanが来るのか実行時までわからない、とか複雑な初期化あるとかいう前…

Spring REST Docs でAPIドキュメントを作成する

この記事の内容 Spring REST Docsを利用すれば、テストコードから以下のようなAPIドキュメントを作成できるようになる。 この記事の内容 Spring REST Docs とは サンプル 使い方 mavenのpom.xmlにversionを指定する Asciidoctorでasciidocからhtmlを生成する…

SpringBoot @Valueで任意の型にセットする CustomPropertyEditorの作成

はじめに Springには外部定義から値を読み込んで、Javaのフィールドにセットする機能がある。application.propertiesにメッセージを記述し、 message=helloJavaクラスで利用すると、 @Service public MessageServiceImpl implements MessageService { @Value…

SpringMVC 複数のフォームを送信する方法

よくやり方忘れるのでメモ。 こんな画面をSpringMVCで作りたい familyNameとgivenNameが1つのFormで、それを複数繰り返す。 実装方法(サーバ側) Controllerクラスの引数に受け取るFormを用意する 本筋と外れるけど、入力値チェックも設定する。 @Data @AllAr…

SpringSecurity 権限に基づいて認可処理をする

この記事の内容 SpringSecurityを理解すればこんな感じの、権限に基づいた制御を簡単に実現できる。 概要 SpringSecurityのサンプルでは、ROLEに基づいて認可してることが多い。 @Override protected void configure(HttpSecurity httpSecurity) throws Exce…

SpringのAOP @Pointcutの使いどころ

SpringのAOP @Pointcutの使いどころ SpringのAOPのアノテーションで、@Pointcutだけ使い方がよくわからなかったのでメモ。 SpringのAOPってなに? 具体的な処理と関係のない処理(ロギングとか)が混じっていると、煩雑になって保守性が下がる。なので、具体的…

SpringSecurityでEL式を拡張してカスタムルールを作るときのメモ

SpringSecurityでカスタムルールを作る SpringSecurityで提供されているEL式(hasRole()とか)で足りなくなった場合に、独自のEL式を作成する方法のメモ。前の記事で作成してたプロジェクトからちょっとカスタマイズして作成。 kimulla.hatenablog.com カスタ…

SpringCloudBusで簡単にConfigの更新をアプリにブロードキャストする

以下のエントリの続き。 kimulla.hatenablog.com SpringCloudBusとは? メッセージングサービス(AMQP)を利用して、アプリケーション内に色々な情報をブロードキャストするためのプロダクト。 具体例 SpringCloudConfigを利用しているときを例にとって説明する…

簡単 Spring SessionでKVSを用いたセッションストア

そもそもセッションってなに? Spring Sessionってなに? どんな動き? 実装方法 Redisの準備 アプリケーションコード HttpSessionを利用する側 動作確認する サンプル まとめ 参考にしたサイト そもそもセッションってなに? セッションはAPサーバ固有のデータ…

HttpServletRequest を拡張して独自HttpSessionを登録する

SpringSessionのリファレンスを見てると、「SpringSessionはHttpServletRequestを拡張して実現していますよ」的なことが記載されていた。Spring Session Fortunately both HttpSession and HttpServletRequest (the API for obtaining an HttpSession) are b…

Spring Cloud Configのリファレンス読んだ

Spring Cloud Configとは 何がいいの? サンプル書いた 実装方法 Configサーバ Configクライアント クライアントから見たときのファイル名とアプリの関連性は? 設定変更の反映 でも全部のConfigクライアントに/refreshなんてしたくない 参考にしたサイト Spr…

ブログにコマンド実行結果をgifで貼り付けるためのメモ

linuxコマンドの実行結果のgifが技術ブログによく貼り付けられてる。(イメージは以下)これを作成する方法のメモ。 対象OS ubuntu ツール byzanz-record (位置指定してgifを作るコマンド) アニメーションをGIFファイルとして録画(Ubuntu) - TIM Labs xwinfo (…

dockerコマンドのジョークコマンドをgo言語で作った

dockerのチュートリアルをやってると、こんなタイプミスをした。 $ ducker run hello-world コマンド 'ducker' は見つかりませんでした。もしかして: ... duckerコマンドないなら作ればいいか。と思い、go言語の勉強がてらにdockerのジョークコマンドを作っ…

jQueryのajaxメソッドでHTTPリダイレクト(ステータスコード302)を受け取った時は、リダイレクト先の結果しかdone(),fail()メソッドに渡せない

springsecurity使うときにこの挙動がわかってなくて困ったのでメモ。タイトル長っ。 どんな内容? jQueryのajax関数内でリスエストを送った結果がHTTPリダイレクト(ステータスコード 302) だった場合、jQueryのdone(),fail()メソッドがコールされる前にブラウ…

細かくて忘れがちなシェルの便利コマンド

細かくて忘れがちなシェルの便利コマンドをメモする。動作確認はbashのみ。 cd - &ltEsc .> !コマンド履歴番号 グロビング(*,?,{},[]) * ? [] {} ヒアドキュメント bashをviのキーバインドで操作する vimからシェルを実行する cd - カレントディレクトリの前…

SpringSecurityでFORM認証

SpringSecurityとは springプロダクトのひとつ。 認証認可の機能を提供してくれる。 認証(アクセスしてきたのは誰か?) BASIC認証、DIGEST認証、LDAP、FORM認証、openID認証など、色々サポート 認可(そのユーザが何をできるか?) デフォルトはROLEベースの制…

リアルタイムなwebアプリを実現する方法(ポーリング、Comet、Server Sent Events、WebSocket)

実現方法の一覧 具体的にどんな方法?どんなメリットがあるの? サンプルコード ポーリング(Ajax) クライアント側 サーバ側 Comet(ロングポーリング) 同期 クライアント側 サーバ側 Comet(ロングポーリング) 非同期 クライアント側 サーバ側 Server Sent Eve…

SpringBootでHelloWorld

最近の流行りに乗っかれていないので、SpringBootを試してみる。 そもそもSpringBootとは JavaEEと並んでメジャーなフレームワークに『Spring』というものがある。 Springは以下のような複数のプロジェクト(抜粋)から構成されていて、このプロジェクトのひと…