技術関連の覚書

案件でやったり自宅で試したことの覚書

Apache Solr

概要

インストール

  1. apache solrのページからダウンロード

  2. ダウンロードファイルを解凍する

  3. 解凍したディレクトリへ移りbin/solr -p ポート番号 で起動する

$ wget http://ftp.tsukuba.wide.ad.jp/software/apache//lucene/solr/5.3.0/solr-5.5.0.tgz
$ tar -zxvf solr-5.5.0.tgz
$ cd solr-5.5.0
$ bin/solr -p 接続ポート

PostgreSQL

インストール

yum -y install postgresql postgresql-server

postgresql-setup initdb

/var/lib/pgsql/data/postgresql.confの編集

#listen_addresses = 'localhost'         # what IP address(es) to listen         on; <=ローカルホストのみ、コメントアウト
listen_addresses = '*'          # what IP address(es) to listen on; <= コメントアウトを外して、全ホストからのアクセスを許可
[root@zeke ~]# systemctl start postgresql
[root@zeke ~]# systemctl enable postgresql
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql.service to /usr/lib/systemd/system/postgresql.service.

[root@zeke ~]# firewall-cmd --add-service=postgresql --permanent
success
[root@zeke ~]# firewall-cmd --reload
success

[root@zeke ~]# firewall-cmd --add-service=postgresql --permanent
success
[root@zeke ~]# firewall-cmd --reload
success

初期設定

デフォルトユーザ(postgres)のパスワード変更

[root@zeke ~]# su - postgres
-bash-4.2$ psql -c "alter user postgres with password 'password'" 
ALTER ROLE

ユーザとDBの作成

-bash-4.2$ createuser user
-bash-4.2$ createdb dbname -O user

MyBatis

ファイル構成

種類 クラス名パターン 役割 ジェネレータで生成するもの 注意点
エンティティ テーブル名のキャメルケース テーブル項目の内容を保持するためのbean テーブル項目名に該当するフィールド、getter、setter キー項目はKeyクラスに実装
キー エンティティ+Key テーブルのキー項目の内容を保持するためのbean キー項目に該当するフィールド、getter、setter エンティティの親クラス
Example エンティティ+Example エンティティに対する条件などを保持する 条件式の実装はサブクラスのCriteriaに設定する
Mapper エンティティ+Mapper SQL文とマッピングするためのインタフェース update,insert,selectByExample,selectByPrimaryKey

エンティティの結合

結合エンティティ

全項目列挙→契約エンティティ、契約異動履歴エンティティクラスのフィールドとgetter,setterに変更

結合エンティティMapper.xml

SQLのSELECTをエイリアス.項目名 エイリアス_項目名 で列挙して、すべての項目に別名を作成 resultMapタグ内を以下のように設定 共通IDフィールドは各テーブルに持つ共通の項目となるもの エンティティのresultMapは外部参照ができるので 1対多の場合はcollectionタグを使う collectionにはofTypeにリスト要素の型を指定する

<mapper namespace="jp.example.exex.data.mapper.BindMapper" >
  <resultMap id="結合ResultMap" type="パッケージ.結合エンティティ" >
    <id property="共通IDフィールド1" column="共通IDカラム1"/>
    <association property="t1" columnPrefix="t1_" javaType="パッケージ.エンティティ1" resultMap="マッパー名1.リザルトマップ名"/>
    <association property="t2" columnPrefix="t2_" javaType="パッケージ.エンティティ2" resultMap="マッパー名2.リザルトマップ名"/>
    <collection property="t3" ofType="エンティティ3" columnPrefix="t3_" javaType="パッケージ.エンティティ3" resultMap="マッパー名3.リザルトマップ名"/>
  </resultMap>
  <sql id="t1Columns">
    t1.共通IDカラム 共通IDカラム,
    t1.IDカラム1 t1_IDカラム1, t1.IDカラム2 t1_IDカラム2, t1.IDフィールド t1_フィールド, ...
  </sql>
  <sql id="t2Columns">
    t2.IDカラム1 t2_IDカラム1, t2.IDカラム2 t2_IDカラム2, t2.IDカラム3 t2_IDカラム3, t2.IDフィールド t2_フィールド, ...
  </sql>
  <sql id="t3Columns">
    t3.IDカラム1 t3_IDカラム1, t3.IDカラム2 t3_IDカラム2, t3.IDカラム3 t3_IDカラム3, t3.IDフィールド t3_フィールド, ...
  </sql>
  <select id="selectマッパーメソッド名" resultMap="結合ResultMap">
    SELECT
      <include refid="t1Columns"/>,
      <include refid="t2Columns"/>
    FROM
      テーブル1 t1,テーブル2 t2
      ...
  </select>
   :

エンティティクラスの実装

public class BindEntity {
    /** 共通のIDカラムの型 */
    private DataType id;
    /** T1テーブルエンティティオブジェクト */
    private T1 t1;
    /** T2テーブルエンティティオブジェクト */
    private T2 t2;
    /** T3エンティティのリスト */
    private List<T3> t3List;

    // それぞれのgetter,setter
}

resultMapは結合エンティティのリストへ設定 テーブル内容のマッピングはassociationのプロパティで設定したフィールド名とjavaTypeで指定した型でcolumnPrefixで指定したプレフィックスを持つ項目をエンティティオブジェクトへ挿入する

Spring

Spring Frameworkとは

Spring Framework は、Javaプラットフォームに基づいたアプリケーションを作成しようとするJava開発者や組織が直面する課題に解決策を与える。Spring FrameworkJava EE だけと結びついているわけではなく、広範囲なインテグレーションが可能であり、それが広く採用されている重要な理由でもある。 Spring Framework は従来的なプログラミングモデルを使わずに、効率的に複雑なアプリケーションを作成するのに必要な機能を提供する。また、Javaプラットフォームにおいても目新しい機能をいち早く取り入れることでも知られている。 Spring Framework は、一貫したモデルを提供し、そのモデルをJavaプラットフォーム上で作成される様々なアプリケーションに適用可能にするフレームワークである。 (Wikipediaから引用)

DI(Dipendency Injection)

あるクラスが別のクラスをインスタンス変数に持つなどして利用している場合に、インスタンス変数の設定をクラス内で行うのではなく、外部から設定するという考え方。 Spring の場合は、その外部が Core モジュールである DI コンテナになる。

DIの考え方は、あるクラスが何かをするときにをクラスから生成せずに、クラスの実行を監視して実行時に依存するクラスのインスタンスを注入する方式です。

Spring boot

概要

mavenやgladleとアノテーションでほぼできてしまうフレームワークです(中身や画面の構築は別で) アプリケーションはjarで構築され、アプリケーションサーバなしでWebアプリケーションを起動することができます Spring bootによるプログラムの作成手順

Spring batch

概要

バッチの作成に特化したフレームワークです DB、ファイルへのアクセスパターンから設計し、作成していきます ただ、データをファイルに展開するのでいろいろと面倒な事が多い

grub rescureが出たときの対処

何らかの理由でgrub rescueと表示されてCUIしか立ち上がらなくなった場合の対処法

>ls
(hd0)(hd0,11)...

これを順にls (hd0)/ と試していき、/boot が含まれるディレクトリが見つかるまで続ける 見つかったらそのディレクトリでgrubを立ち上げる

> set prefix=(hd0,9)/boot/grub
>insmod (hd0,9)/boot/grub/normal.mod
>normal

OSが立ち上がったらgrubを再インストールする

>sudo grub-install /dev/sda

ログ解析

ログ解析のためにElasticsearch+Logstash+Kibanaを動かすためのdocker-compose.ymlを作成

# elasticsearch
elasticsearch:
  image: khiraiwa/docker-elasticsearch:1.0.0
  volumes:
    - /data_elasticsearch:/data_elasticsearch
  ports:
    - "9200:9200" 
    - "9300:9300" 

# kibana
kibana:
  image: khiraiwa/docker-kibana:1.0.0
  volumes:
    - /data_kibana:/data_kibana
  ports:
    - "5601:5601" 
  links:
    - elasticsearch:docker-elasticsearch

# logstash
logstash:
  image: khiraiwa/docker-logstash:1.0.0
  volumes:
    - /data_logstash:/data_logstash
  links:
    - elasticsearch:docker-elasticsearch
  environment:
    - AWS_ACCESS_KEY_ID=dummy
    - AWS_SECRET_ACCESS_KEY=dummy

# tdagent
tdagent:
  image: khiraiwa/docker-tdagent:1.0.0
  volumes:
    - /data_tdagent:/etc/td-agent
  links:
    - elasticsearch:docker-elasticsearch
  environment:
    - AWS_ACCESS_KEY_ID=dummy
    - AWS_SECRET_ACCESS_KEY=dummy

docker-compose実行

docker-compose up -d

あとはダウンロード、インストール、実行が終わるまで待つ

/vm/virtualmachine/docker/elasticsearch$ docker-compose up -d
Removing elasticsearch_elasticsearch_1...
Recreating a59fac6833_elasticsearch_elasticsearch_1...
Recreating elasticsearch_tdagent_1...
Pulling logstash (khiraiwa/docker-logstash:1.0.0)...
1.0.0: Pulling from khiraiwa/docker-logstash
9943fffae777: Already exists
fb15e825cb68: Already exists
b9583a207297: Already exists
a3ed95caeb02: Pull complete
d911ec1fa7cf: Pull complete
f0c854dd1717: Pull complete
5380778f135e: Pull complete
aed5c72d060f: Pull complete
08090ea0c159: Pull complete
f37ecc1c5d68: Pull complete
ed8769fe50aa: Pull complete
73e14b87d475: Pull complete
Digest: sha256:bd50c6e4f09063e4b349838974478f03bd0e39271d378bbf30036a6fd6b3ec90
Status: Downloaded newer image for khiraiwa/docker-logstash:1.0.0
Creating elasticsearch_logstash_1...
Pulling kibana (khiraiwa/docker-kibana:1.0.0)...
1.0.0: Pulling from khiraiwa/docker-kibana
8387d9ff0016: Pull complete
3b52deaaf0ed: Pull complete
4bd501fad6de: Pull complete
a3ed95caeb02: Pull complete
6779bbe01753: Pull complete
0c358e156fc0: Pull complete
cd518798f0c1: Pull complete
c8c155b2eacb: Pull complete
5d565163900c: Pull complete
47aab7a97a6f: Pull complete
1286cc3f4894: Pull complete
Digest: sha256:b568bb2f3d3ecd1d94589f5db0bdc0fadf1968dd0570673ab9c8627110928a97
Status: Downloaded newer image for khiraiwa/docker-kibana:1.0.0
Creating elasticsearch_kibana_1...

実行後の動作確認 Elasticsearch

/vm/virtualmachine/docker/elasticsearch$ curl localhost:9200
{
  "name" : "Grim Reaper",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.0.0",
    "build_hash" : "de54438d6af8f9340d50c5c786151783ce7d6be5",
    "build_timestamp" : "2015-10-22T08:09:48Z",
    "build_snapshot" : false,
    "lucene_version" : "5.2.1" 
  },
  "tagline" : "You Know, for Search" 
}

Kibana

http://localhost:5601"へブラウザでアクセスする