書き足りなかった部分をプラス
途中からSpringも混ざりますが、ご容赦願います。
メモ
- $ gradlew xxx -Pargs="hoge"
- -Pargs:引数の設定
- jarだけ消す
-
$ gradle cleanJar
[root]/build/libsディレクトリ配下にあるjarを消去できます。
生成済みのclassファイルは残ったままです。 - サーバポートを変更してwebアプリjarを実行する
-
$ java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8888
でいけるはずですが、、、
no main manifest attribute, in demo-0.0.1-SNAPSHOT.jar
となりました。デフォルトポートで実行するぶんにはマニフェストファイル不要なんですがね。。。
mavenで作った際は指定できましたが、gradleだと何か足りていないみたいでした。 - spring boot devtoolsを使用する
-
compile('org.springframework.boot:spring-boot-starter-web',
'org.springframework.boot:spring-boot-devtools')
結果、立ち上げ時のmainプロセスが、restartedMainプロセスに変わります。
これでホットデプロイできるらしいですが、これは完全サポートが保証されているわけではないみたいです。 - build.gradle
-
sourceCompatibility:受け付けるソースコードのバージョン
targetCompatibility:クラスファイルのバージョン - SpringBootTest
-
Assertはstaticでないといけないっていうのが気をつけどこpackage com.example; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import static org.junit.Assert.*; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.boot.test.web.client.TestRestTemplate; import static org.hamcrest.CoreMatchers.is; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class DemoApplicationTests { @Autowired TestRestTemplate template; @Test public void contextLoads() { ResponseEntity
res = template.getForEntity("/", String.class); assertThat(res.getStatusCode(), is(HttpStatus.OK)); assertThat(res.getBody(), is("Hello world")); } } - Java / try with resources句
-
tryに()カッコをつけて、その中で閉じる必要があるインスタンスを生成する
finally句がなくてOK - IntelliJでlombokを入れる
-
Preferencies → Install JetBrains plugin...
→ lombokで検索 → Install
libraryに追加した後にビルドパスに追加するのをお忘れなく。。。
Eclipseでもそうですが、libraryにjarをコピーしただけでは使えません。
また、Annotation Processorsを有効にしないと@AllArgsConstructorなどが認識されない
参考:Lombokプラグインをインストールする
Preferencies → Build, Execution, Deployment
→ Compiler → Annotation Processors
Defaultを選んで、右のペインで「Enable annotation processing」にチェックを入れる - IntelliJにCoverageというプラグインが入っている
- Run with Coverageで実行するとどれだけテストがカバーできているかが表示される
- Spring / @SpringBootApplication
-
下記3つのアノテーションを1つにまとめた効果
- @EnableAutoCOnfiguration
- @Configulation
- @ComponentScan
- Spring / CommandLineRunnerインターフェース
-
DIが可能になる(プロパティに@Autowiredをつけて、インスタンスを自動生成できる)
また、mainメソッドに
SpringApplication.run(xxx.class, args);
とすることでアプリを立ち上げられる。
もちろん、自クラスにrunメソッドを記載すること。 - Java可変長引数([type]... hoges)
-
そんなに使わないから、ググりました。
ひしだま's 技術メモページ
- 配列としてメソッド内で使える
- 引数のうち一つだけ
- 最後の引数の時だけ使用可能
- 可変長引数と同じ型でオーバーロードして、どちらにも適用されるような呼び出しは、可変長で「ない」メソッドに引数を渡す
- Spring / @ComponentScanの対象になるアノテーション
-
- @Component
- @Controller
- @Service
- @Repository
- lombok/ @AllArgsConstructor
- プロパティ全てを引数に取るコンストラクタを自動生成するCC
- Java / ConcurrentMapインターフェース
-
スレッドセーフなマップ
実装はConcurrentHashMapクラスか、ConcurrentSkipListMapクラス。 - Postgre SQL / ユーザの一覧
-
$ select rolname from pg_roles;
or
=> \du
Describe Userかな。。。 - psql / \c (database name)
- pslqでのDB接続は\c (database name)
- Spring / JDBCでの接続
-
必要なもの
- DBコネクタライブラリ
- spring-boot-starter-jdbc
- NamedParameterJdbcTemplateインスタンス
- SQL文字列
- MapSqlParameterSourceインスタンス(SqlParameterSourceインターフェース)
- NamedParameterJdbcTemplateのqueryForObjectメソッド実行
- H2DBでインメモリな設定
-
spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE spring.datasource.username=sa spring.datasource.password= spring.datasource.sql-script-encoding=UTF-8
- H2DBで永続化する
-
spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:file:./target/db/testdb spring.datasource.username=sa spring.datasource.password= spring.datasource.sql-script-encoding=UTF-8
- SQL / テーブルがなかったら、、、
- CREATE table if not EXISTS salse_table ( id int, date timestamp );
0 件のコメント:
コメントを投稿