makotanの勉強日記

勉強したこととか設定系のメモとかそういうのを集めたもの

SpringBootのEmbeddedServletContainerでアクセスログをlogbackにする

必要なjarは

ch.qos.logback:logback-access

あとはEmbeddedServletContainerCustomizerを使ってセットする。jarの中にあるのでfile名の取得のところが気持ち悪いけど、設定で変更可能にすると幸せになれるかも

@Bean
public EmbeddedServletContainerCustomizer containerCustomizer(){
    return new EmbeddedServletContainerCustomizer() {
        @Override
        public void customize(ConfigurableEmbeddedServletContainer factory) {

            if(factory instanceof TomcatEmbeddedServletContainerFactory){
                TomcatEmbeddedServletContainerFactory containerFactory = (TomcatEmbeddedServletContainerFactory) factory;

                URL url = this.getClass().getResource("/logback-access.xml");
                LogbackValve logbackValve = new LogbackValve();
                logbackValve.setFilename(url.getFile());
                containerFactory.addContextValves(logbackValve);


            }

        }
    };
}

抽象化宗教

いくつかの宗教を抽象化してみた

この3つが主なキーワード

  • 何のために生きるのか

人にはそれぞれ与えられた役割がある。それを全うすること

役割は自分自身の中に既にあるので自分と向き合う事

  • どうやって生きるべきか

心を安定した状況に保ち、良い事を見て、聞いて、口にすることで心が良い方向に向かう

そうする事で自分の周りも良い方向に向かう

  • 不安の対処

長い目で見れば悪い時もあれば良いときもある。悪いときにも心を安定した状態に保ち自分の役割を全うする事 そうすれば良いときには更に良い事が訪れる

死は全ての終わりでは無い、次への始まりである

応用

  • 何のために作るのか

ソフトウェアにはそれぞれ与えられる役割がある

役割は既にその会社の中にあるのでそこから導き出す事

  • どうやって作るべきか

安定した開発プロセスを使用し、必要な情報を見て、必要な人に聞いて、共有する事で良い方向に向かう

そうすることでユーザにとっても使いやすいソフトウェアになる

  • トラブルの対処

プロジェクトの間には予想外の悪い事も起きるし、想定より良い事もある。予想外の時にも落ち着いて役割を全うするにはどうすれば良いかを考える

そうすればきっと解決の糸口が見つかる

ソフトウェア開発は終わりでは無い、運用の始まりである

SpringBootでEmbeddedServletContainerで別ポートのServletコンテナを起動する

この方法でコンテナとしてはいくつでも起動出来る

    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(9090);
    servletContainer = factory.getEmbeddedServletContainer((c) -> {
        ServletRegistration.Dynamic dispatcher =
                c.addServlet("dispatcher", new DispatcherServlet(appContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    });
    servletContainer.start();

appContextは普通のWebApplicationContext あとは好きなフィルターを追加したり、initParamで識別用の文字列を設定したりする

もう来てる次の時代のアーキテクチャの単なるメモ

microservice:ちっちゃいさーびすをたくさん作ってそれらを連携させる

認証:ユーザのパスワードを使わないAPIベースの認証

認可:細かいレベルでのアクセス認可

クラウド:サーバが必要なタイミングで必要な数取得できる

service間連携:ちっちゃいサービスの間の自動連携

これらを上手く使ったアーキテクチャを実現するには・・・

メリットは

小さいサービスなので保守やメンテナンスが楽

API的な互換性さえ保てればどの言語やどんな環境でも使用できる

課題は

  • サービスの粒度

大きすぎると今と変わらないし、小さすぎると・・・

  • データの共有

ある種のデータは多くのサービスで参照される。そのデータをどうやって安全に同期するか

  • レポートやデータの活用

レポートとしてまとめたり、データを二次三次で活用したいと思ったときに分散しすぎるんじゃないかと

Ninja インストール

必須

java7

maven 3.1以上

アプリの作成

mvn archetype:generate -DarchetypeGroupId=org.ninjaframework -DarchetypeArtifactId=ninja-servlet-archetype-simple

テストで動かす

cd MY_INSTALLED_PROJECT

mvn clean install

mvn ninja:run

ブラウザで開く

http://localhost:8080

これで開ければOK!

IntelliJ IDEAのClojureプラグイン

言語だけなら普通にプラグインで入る La Clojure を入れる

でも、Leiningenも込みでサポートが欲しい場合はこれを入れる

Cursive: The IDE for beautiful Clojure code

ライセンスを書いてないのがちょっと気になる

IntelliJ IDEAがエラーで動かなくなったときの対策

IntelliJ標準以外のプラグインの関係などでIntelliJが動かなくなったときに、IntelliJ IDEAの設定を削除して動かすようにするまでの記録

現象

IntelliJ IDEAを12から13に更新しようとした

それまで使っていたClojureプラグインがIDEA 13に対応していないのが原因っぽくて、IntelliJをバージョンアップして言われるままにプラグインをバージョンアップするとエラーになって、それ以降起動直後にエラーメッセージがでて何も出来ない

困ったこと

そもそも設定画面すら開けないので、当然のことながらプラグインの更新すら出来ない

対応

IDEA 13をアプリケーションから削除して、IDEA 12を起動してプラグインをremove

IDEA 13の設定周りのディレクトリをディレクトリごと削除、削除の対象はこのあたりに Project and IDE Settings

12で使っていたプロジェクトのIntelliJ関係のディレクトリやファイルを削除(念のためなので不要かも)

再度IDEA 13を入れて起動。これで13が動くようになるのでプラグインを入れ直す

これで出来た!