技術関連の覚書

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

Linuxでのファイル復旧

このツールを使います DiskDiggerdiskdigger.org

なぜか拡張子がexe

$ sudo apt-get install libmono-system-windows-forms4*

Download DiskDigger, unzip it, and launch it with sudo:

$ wget http://diskdigger.org/diskdigger_linux.zip
$ unzip diskdigger_linux.zip
$ sudo mono DiskDigger.exe

If the above line gives an error, try explicitly specifying the runtime version:

$ sudo mono --runtime=v4.0 DiskDigger.exe

Elasticsearch

※この情報は古いのであまりあてになりません。現時点の最新版は5.3.0です。

インストール前提

jdk1.7以上をインストール済みであること rootユーザで実行する

インストール

yumを使ってインストールするためにアクセスキーをインポートする

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

/etc/yum.repos.d/elasticasearch.repo を作成する

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

yumでインストール

yum -y install elasticsearch

サービスを登録

systemctl daemon-reload
systemctl enable elasticseach
systemctl start elasticsearch

起動確認 サーバ上で

# curl http://localhost:9200
{
  "name" : "Him",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.3.3",
    "build_hash" : "218bdf10790eef486ff2c41a3df5cfa32dadcfde",
    "build_timestamp" : "2016-05-17T15:40:04Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0" 
  },
  "tagline" : "You Know, for Search" 
}

プラグインの導入

プラグインを導入するためのコマンドは Elasticsearchインストールディレクトリ /bin/plugin パスを通すかフルパス指定で実行してインストール plugin install インストールプラグイン名 入れておきたいプラグイン

プラグイン インストール文字列 用途
Marvel Documentation elasticsearch/marvel/latest 管理、モニタ用
Kuromoji /elasticsearch/elasticsearch-analysis-kuromoji/2.0.0 日本語解析
CSV River Plugin river-csv -url https://github.com/AgileWorksOrg/elasticsearch-river-csv/releases/download/2.0.1/elasticsearch-river-csv-2.0.1.zip CSVデータインポート

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、ファイルへのアクセスパターンから設計し、作成していきます ただ、データをファイルに展開するのでいろいろと面倒な事が多い