タグ

ブックマーク / int128.hatenablog.com (9)

  • Springでリクエストとレスポンスのログを出力する - GeekFactory

    Spring MVCでリクエストとレスポンスのログを出力する方法を説明します。 リクエストログだけなら CommonsRequestLoggingFilter もしくは AbstractRequestLoggingFilter を使う方法が簡単です。詳しくは下記の記事で説明しています。 int128.hatenablog.com 一方で、レスポンスログを出力するには一工夫が必要です。通常、レスポンスボディはストリームに書き込まれてメモリから消えてしまうため、メモリに一時的に保持する必要があります。Springで用意されている ContentCachingResponseWrapper というクラスを使うと、レスポンスボディをバイト配列で取り出すことができます。 実装例 AbstractRequestLoggingFilter を参考にしてフィルタを実装してみました。 ContentCach

    Springでリクエストとレスポンスのログを出力する - GeekFactory
    uehaj
    uehaj 2017/11/03
  • Doma 2をGroovyで使用する時に気を付けること - GeekFactory

    気付いた範囲でまとめてみます。 フォルダ配置 Doma 2はAnnotation ProcessorでDAOの実装クラスを自動生成します。Doma 2のAnnotation ProcessorはJavaのコードにのみ対応しているため、DAOやエンティティはGroovyではなくJavaで書く必要があります。また、GroovyとJavaのコードが互いに参照する場合は両者を /src/main/groovy に配置する必要があります。 具体的には以下のような配置になります。 src/main/ groovy/ example/entity/ Hello.java エンティティクラスはJavaで書く必要がある Groovyで書いてもよい example/dao/ HelloDao.java DAOインタフェースはJavaで書く必要がある resources/ META-INF/example/da

    Doma 2をGroovyで使用する時に気を付けること - GeekFactory
    uehaj
    uehaj 2017/04/18
  • trait内のクロージャからプライベートメソッドが見えない - GeekFactory

    Groovy 2.3から導入されたtraitを使っていて、妙な事象に遭遇したのでまとめてみます。具体的には、traitの中でクロージャを使う場合に、クロージャからプライベートメソッドが見えない仕様があるようです。 例えば、下記のような trait T があるとします。 trait T { private a(x) { "--$x--" } // プライベートメソッドを直接呼んでいる def b(x) { a(x) } // クロージャの中からプライベートメソッドを呼んでいる def c(xs) { xs.collect { x -> a(x) } } } 下記のように、この trait を適用した class P および class Q を定義します。 // implementsでtraitを適用する class P implements T {} // withTraitsでtraitを

    trait内のクロージャからプライベートメソッドが見えない - GeekFactory
    uehaj
    uehaj 2015/02/07
  • Groovyのcall()をプロパティに対して適用するには? - GeekFactory

    TLDR Groovyの call() はローカル変数に対しては機能するが、クラスのプロパティに対しては機能しない。解決法をご存じでしたら教えてください。 やりたいこと 変数に関数呼び出し演算子を適用した場合の処理を書きたいことがあります。例えば、下記のようにクロージャでプロパティを設定できたら便利です。 def x = new X() x { value = 100 } そんな時は当該クラスに call() メソッドを定義します。 class X { def value = 50 def call(Closure c) { def cloned = closure.clone() as Closure cloned.resolveStrategy = Closure.DELEGATE_FIRST cloned.delegate = this cloned.call() } } def x

    Groovyのcall()をプロパティに対して適用するには? - GeekFactory
    uehaj
    uehaj 2015/01/07
    callを期待するのではなくclosureにしてしまうと良いようである(理由はよくわからない:)
  • Gradleプラグインのテンプレートプロジェクトを公開します #gadvent - GeekFactory

    G*Advent Calendar(Groovy,Grails,Gradle,Spock...) Advent Calendar 2014 - Qiitaの9日目です。 GradleはビルドスクリプトをGroovy DSLで書くため、現実のプロジェクトで複雑な問題が発生した場合に柔軟に対処できる特徴を持っています。現実のプロジェクトでは、Jarを生成する前にファイル処理を差し込みたいとか、Develpment/Productionでビルド内容を変えたいといった特殊な要件がしばしば発生します。こういった特殊な要件は、来は開発フローやリリースフローを見直すことで解決すべきですが、どうしても解決できない泥臭いケースも存在します。Groovyを書けば何でもできてしまうところがGradleの素晴らしいところであり、また、闇でもあります。 そして、ビルドスクリプトに複雑な処理を書いているうちに、それ

    Gradleプラグインのテンプレートプロジェクトを公開します #gadvent - GeekFactory
    uehaj
    uehaj 2014/12/12
  • GradleによるJVMアプリケーションのパッケージングと配布 #gadvent - GeekFactory

    G*Advent Calendar(Groovy,Grails,Gradle,Spock...) Advent Calendar 2014 - Qiitaの10日目です。 アプリケーションを公開する際、ユーザが使いやすい形でアプリケーションを配布することで、より多くのユーザに使ってもらえることが期待できます。また、アプリケーションをサービスとして公開する際にも、インフラにデプロイしやすい形でアプリケーションをリリースすることで、より早くユーザに提供することができます。どんなに優れたアプリケーションであっても、インストールや実行に面倒な手間がかかる場合は魅力が半減してしまいます。 JVMベースのアプリケーションを配布する際の課題 JVMベース(Java、Groovy、Scalaなど)のアプリケーションをユーザに配布するには以下の課題が考えられます。 まず、アプリケーションの実行に必要な ja

    GradleによるJVMアプリケーションのパッケージングと配布 #gadvent - GeekFactory
    uehaj
    uehaj 2014/12/12
  • プロキシの内側でDockerを使う - GeekFactory

    プロキシの内側でDockerを使おうとすると以下の問題に直面します。 docker pullでプロキシ経由でイメージを取得させる必要がある。 docker runでアプリ実行時にプロキシ設定を与える必要がある。 docker buildでビルド実行時にプロキシ設定を与える必要がある。 1はデーモンの起動時に環境変数http_proxyを与えることで解決できます。また、2はdocker runの引数に-e http_proxy=...を与えることで解決できます。3はDockerfileに env http_proxy ... を追記することで解決できますが、Dockerfileやイメージのポータビリティが低下します。ポータビリティが必要ない場合はこれが現実的な解決法になると思います。 稿では、一風変わった解決法として、Dockerホストに透過型プロキシを設置する方法を説明します。この方法で

    プロキシの内側でDockerを使う - GeekFactory
    uehaj
    uehaj 2014/10/31
    Dockerホストに透過型プロキシを設置することで、Dockerfile中でenv HTTP_PROXYすることを回避する。httpsは駄目なのか無念。
  • Gradleプラグインの作り方 - GeekFactory

    G* Advent Calendar 2013の19日目です。 Gradleでビルドスクリプトを書いていると、他でも再利用できるタスクや関数が出てくることがあります。ビルドスクリプトの一部をプラグインに切り出すことで、他のGradleプロジェクトで再利用できます。 bluepapa32さんのG* Advent Calendar 12日目の記事でGradleプラグインの作り方が紹介されています。ネタがちょっとかぶってしまいましたが、稿では違う視点から説明してみたいと思います。 Gradleプラグインの作り方 Gradleプラグインの実体はクラスファイルや設定ファイルを固めたJARです。Gradleプラグインを作るには、Gradleでプロジェクトを作って成果物としてJARを生成するのが簡単です。JARはMaven CentralやGitHubなどで配布します。 例えば、HelloPlugin

    Gradleプラグインの作り方 - GeekFactory
    uehaj
    uehaj 2013/12/20
    G* Advent Calendar 2013の19日目です #gadvent
  • Gradleを開発プロジェクトで使うときのこと - GeekFactory

    G* Advent Calendar 2013の5日目です。今日はGradleを開発プロジェクトで使う時に考えることを書いてみます。いわゆるビルド職人の仕事をゆるふわに考えてみたいと思います。 対象はJVMベースのWebアプリとバッチアプリとします。記述言語はJavaを想定していますが、Groovyでもだいたい同じです。 プロジェクトの構造 稿では以下の前提で話を進めます。 プロジェクトは複数のアプリから構成されます。 アプリは複数のモジュールから構成されます。 アプリはそれぞれ異なるサーバで実行されます。 どのモジュールをどのアプリに含めてどのサーバに配置するか、といった依存関係はすぐに複雑化してしまいます。Gradleのマルチプロジェクト構成を使うことで、依存関係やタスクを整理できます。 アプリ 依存するモジュール ほげほげWebアプリ ・ほげほげWebアプリ ・モジュールA ふがふ

    Gradleを開発プロジェクトで使うときのこと - GeekFactory
    uehaj
    uehaj 2013/12/08
    #gadvent の5日目です
  • 1