Java/Spring/SpringBoot
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
-SpringBoot
#contents
*Application Event非同期 [#lb92fd97]
https://medium.com/@bau1537/springframework%E3%81%AB%E3%8...
*Componentの生成順序 [#lb9ba860]
-@Orderで数値が小さいほど後で生成される。
@Order(10000)
@Order(1000)
*同じフォームで処理メソッドを変更させる [#c8e0deb0]
-HTMLのsubmitとname=hogeとつける
-Action側でparams=hoge
*静的ファイルの置き場所と優先順位 [#a9874903]
上位2つは他のファイルも混じるのでstaticかpublic推奨
+resources/META-INF/resources/
+resources/
+resources/static/
+resources/public/
*Cache制御 [#r5727de5]
**マスターなどのデータキャッシュ [#n3b04247]
@CacheableをServiceの戻り値につけるとキャッシュ可能。Serv...
**Spring Bootでのthymeleadのキャッシュ無効化 [#zc591260]
-spring.thymeleaf.cache = falseに加え
-intelljの設定が必要。registoryの変更でcompiler.automake....
-上記でもうまく行かない(linux intellij)
https://qiita.com/takehilo/items/72d2872cc9a89ef9a02a
*kotlin対応 [#y352eeb2]
-https://www.slideshare.net/CASREAL_seminar/intellij-idea...
-https://qiita.com/Kaoru_Yamamoto/items/d43a10a7cbdd7e5d7...
*Tips [#q3628f3c]
|項目|内容|備考|
|ContextPath変更|server.contextPath=/hoge|staticも大丈夫...
|スキャン対象パッケージ指定|@SpringBootApplication(scanBa...
*multi module [#v903b715]
https://github.com/spring-guides/gs-multi-module/tree/mas...
*20170922 チェック [#udd50bd4]
**例外ハンドラー [#id3631df]
-ResponseEntityExceptionHandler
**認証関連 [#yeb8fa43]
-HttpStatusReturningLogoutSuccessHandler
-SimpleUrlAuthenticationSuccessHandler
-ApplicationEventPublisher
-AuthorizationServerConfigurerAdapter
*チェック [#m5d37cb2]
-RequestBody
-@ComponentScan("com.rutake.app")
-MapperScan
-ConfigurationProperties
-@Transactional
-springfox-swagger2
-@ConditionalOnBean(HogeProperties.class)
-@ConditionalOnProperty("hoge.fuga")
-Stream.of(args).anyMatch(StringUtils::isBlank);
-@PreAuthorize("permitAll()")
-com.jaredsburrows:gradle-license-plugin
-@ExceptionHandler & @ResponseStatus(HttpStatus.BAD_REQUE...
-Pageable Page<Emp> page = repository.findAll(new PageReq...
-JsonSerialize.Inclusion.NON_NULL
return new Jackson2ObjectMapperBuilder()
.serializationInclusion(JsonInclude.Inclu...
mapper.configure(DeserializationFeature.FAIL_...
*DIの基本 [#g2737f53]
Singletonとなるが、Request単位に作成してほしいなどがある...
http://jappy.hatenablog.com/entry/2016/06/04/042200
**リクエスト単位にしてほしいBeanの設定 [#f40ac940]
@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, prox...
**properitiesのConfigへの読み込み [#gf420c4e]
@Bean
@ConfigurationProperties(prefix = "myprop.hoge")
public HogeProperties hogeProperties() {
return new HogeProperties();
}
-application.yml
myprop:
hoge:
prop1: prop1
*環境の切り替え [#n7c9d394]
java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --spring...
**ymlに環境変数かつデフォルト値 [#z656586c]
# myapps
com:
rutake:
yml:
value: ${env.test:hogehoge}
-ENV_TESTまたはCOM_RUTAKE_YML_VALUEが定義されていればその値
-なければhogehoge
**環境変数でのマッピングにデフォルト値 [#oca057e8]
@Value("${com.rutake.env.value:test}")
private String testFromEnv;
COM_RUTAKE_ENV_VALUEの定義がない場合はtestになる。
**環境変数でのマッピング [#yece6af8]
@Value("${com.rutake.env.value}")
String value;
export COM_RUTAKE_ENV_VALUE=value
ymlに定義することもできるが、この場合で環境変数のCOM_RUT...
com:
rutake:
env:
value: {other.env}
*プロジェクト新規作成 [#w0bfdaa9]
Spring Bootの雛形をWeb上で作成可能
http://start.spring.io/
*Document [#ya857879]
http://terasolunaorg.github.io/guideline/5.3.0.RELEASE/ja...
*特徴 [#a58f1bbe]
-SpringMVCを設定レスにした感じ。
*起動 [#hc69eb91]
mvn spring-boot:run
./gradlew bootRun
*注意点 [#p9003978]
以下の設定だとDBデータを全部消すので、間違っても利用中のD...
spring.jpa.hibernate.ddl-auto=create
updateにしておくと消すことはない。
none何もしない。updateはentityの差分を反映。createは作成...
*Cache [#g446f84f]
**Cacheableのimportを間違えて(3つある)有効にならずハマ...
-buid.gradle
compile('org.springframework.boot:spring-boot-starter-c...
-Application.java
@EnableCaching
-import org.springframework.cache.annotation.Cacheable;
SpringFoxのCacheableをimportしてハマる!
*トラブル [#ib317326]
MACで設定翌日にWebアプリケーションが一切起動しない(どのプ...
**propertiesファイル [#m465e21d]
application.propertiesに設定が必要だった。あとリソースフ...
**検索対象のパッケージ [#p8837014]
デフォルトやデモだと同じパッケージを検索する。
サービスには@ComponentScan("パッケージ名")
-componentの探し方
http://yyama1556.hateblo.jp/entry/2016/08/10/175948
*設定 [#jdf4899f]
**application.propertiesとapplication.yml [#n684580b]
+src/main/resources/config/application.ymlがあるとそれを...
+src/main/resources/application.propertiesが次に利用され...
***application.yml [#p0cd9892]
設定ファイルではスネークケースもキャメルケースもチェーン...
server:
port: 9020
spring:
datasource:
url: jdbc:mysql://mysql.example.com/test
username: User
password: Password
driverClassName: com.mysql.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
hoge:
fuga:
@Value("${hoge.fuga:#{null}")
String hoge;
@Value("${hoge.fuga.interval:3600}")
private long interval;
-http://takayukii.me/post/201704041080
*Spring Boot Batch [#i3b1d995]
デフォルトでは@SpringBootApplicationが存在するパッケージ...
*Spring DATA [#w47d037c]
http://qiita.com/tag1216/items/55742fdb442e5617f727
**トラブルを防ぐために [#webf32a2]
-RequestParamを設定している場合はパスが一致しているだけで...
-アソシエーションにいきなりチャレンジするのではなく単体で...
-メソッド追加時はパラメータの数が一致していないとわけのわ...
-アソシエーションはきちんとキャメルケースになっていないと...
-アソシエーションがあるとデータを全部持ってこようとするの...
*ログ出力 [#b2f787a2]
**Spring JPA SQLログ出力 [#j0f784c2]
# for logging
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBin...
**Spring mybatis SQLログ出力 [#l2af1a3c]
-mapperのあるパッケージを指定すればOK
logging.level.yourpackage=DEBUG
**Hikari DBCP [#f9ef587b]
logging:
config: classpath:logback-spring.xml
level:
com.zaxxer.hikari: DEBUG
*Connection 関連設定 [#ga49d3e8]
**検証クエリーの有効化 [#c92c7df0]
-Spring Boot 2.0系のデフォルトなら以下のプロパティを入れ...
hikari:
connection-test-query: SELECT 1 FROM DUAL
**フェイルオーバー [#xbfe66b0]
|failover|
|loadbalance|
|sequential|
*ページング [#va59f470]
**Controller [#l65cbe19]
-Controllerの各メソッドの引数に以下の値を設定しておくとク...
@PageableDefault(
page = 0,
size = 10,
sort = {"id"},
direction = Sort.Direction.DESC
) Pageable pageable
**Spring JPA [#mfcd982a]
-デフォルトで用意されているメソッドの引数にpageableを入れ...
Page<T> list = xxxRepository.findAll(pageable);
*Thymeleaf [#ta74fc65]
**Tips [#j436a197]
|テキストとして解釈 | をつけると/は割り算ではなくそのまま...
|エスケープしない|th:utext|
|クエリーをつける(固定値でも可能)|th:href="@{/charges/{id...
**Enum出力 [#lae7bea9]
<select>
<option th:each="state : ${T(com.rutake.enums.Directi...
th:value="${state.value}"
th:text="${state.label}">
</option>
</select>
spring:
profiles:
active: local
*2.0対応 [#reeebdec]
**一時ファイル保存場所 [#eaae8847]
|1.5|spring.http.multipart.location=/upload/temp|
|2.0以降|spring.servlet.multipart.location=/upload/temp|
**JPA [#sf4501be]
メソッド名変更
-findOneがgetOne
-deleteがdeleteById
-updateがupdateAll
フィールド名にemptyが使えない
-@Columnアノテーションで逃げた
SpringSecurityが常に403なので無効化
JPAのgetOneが引けない・・・
ここでギブアップ!!
#counter
終了行:
-SpringBoot
#contents
*Application Event非同期 [#lb92fd97]
https://medium.com/@bau1537/springframework%E3%81%AB%E3%8...
*Componentの生成順序 [#lb9ba860]
-@Orderで数値が小さいほど後で生成される。
@Order(10000)
@Order(1000)
*同じフォームで処理メソッドを変更させる [#c8e0deb0]
-HTMLのsubmitとname=hogeとつける
-Action側でparams=hoge
*静的ファイルの置き場所と優先順位 [#a9874903]
上位2つは他のファイルも混じるのでstaticかpublic推奨
+resources/META-INF/resources/
+resources/
+resources/static/
+resources/public/
*Cache制御 [#r5727de5]
**マスターなどのデータキャッシュ [#n3b04247]
@CacheableをServiceの戻り値につけるとキャッシュ可能。Serv...
**Spring Bootでのthymeleadのキャッシュ無効化 [#zc591260]
-spring.thymeleaf.cache = falseに加え
-intelljの設定が必要。registoryの変更でcompiler.automake....
-上記でもうまく行かない(linux intellij)
https://qiita.com/takehilo/items/72d2872cc9a89ef9a02a
*kotlin対応 [#y352eeb2]
-https://www.slideshare.net/CASREAL_seminar/intellij-idea...
-https://qiita.com/Kaoru_Yamamoto/items/d43a10a7cbdd7e5d7...
*Tips [#q3628f3c]
|項目|内容|備考|
|ContextPath変更|server.contextPath=/hoge|staticも大丈夫...
|スキャン対象パッケージ指定|@SpringBootApplication(scanBa...
*multi module [#v903b715]
https://github.com/spring-guides/gs-multi-module/tree/mas...
*20170922 チェック [#udd50bd4]
**例外ハンドラー [#id3631df]
-ResponseEntityExceptionHandler
**認証関連 [#yeb8fa43]
-HttpStatusReturningLogoutSuccessHandler
-SimpleUrlAuthenticationSuccessHandler
-ApplicationEventPublisher
-AuthorizationServerConfigurerAdapter
*チェック [#m5d37cb2]
-RequestBody
-@ComponentScan("com.rutake.app")
-MapperScan
-ConfigurationProperties
-@Transactional
-springfox-swagger2
-@ConditionalOnBean(HogeProperties.class)
-@ConditionalOnProperty("hoge.fuga")
-Stream.of(args).anyMatch(StringUtils::isBlank);
-@PreAuthorize("permitAll()")
-com.jaredsburrows:gradle-license-plugin
-@ExceptionHandler & @ResponseStatus(HttpStatus.BAD_REQUE...
-Pageable Page<Emp> page = repository.findAll(new PageReq...
-JsonSerialize.Inclusion.NON_NULL
return new Jackson2ObjectMapperBuilder()
.serializationInclusion(JsonInclude.Inclu...
mapper.configure(DeserializationFeature.FAIL_...
*DIの基本 [#g2737f53]
Singletonとなるが、Request単位に作成してほしいなどがある...
http://jappy.hatenablog.com/entry/2016/06/04/042200
**リクエスト単位にしてほしいBeanの設定 [#f40ac940]
@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, prox...
**properitiesのConfigへの読み込み [#gf420c4e]
@Bean
@ConfigurationProperties(prefix = "myprop.hoge")
public HogeProperties hogeProperties() {
return new HogeProperties();
}
-application.yml
myprop:
hoge:
prop1: prop1
*環境の切り替え [#n7c9d394]
java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --spring...
**ymlに環境変数かつデフォルト値 [#z656586c]
# myapps
com:
rutake:
yml:
value: ${env.test:hogehoge}
-ENV_TESTまたはCOM_RUTAKE_YML_VALUEが定義されていればその値
-なければhogehoge
**環境変数でのマッピングにデフォルト値 [#oca057e8]
@Value("${com.rutake.env.value:test}")
private String testFromEnv;
COM_RUTAKE_ENV_VALUEの定義がない場合はtestになる。
**環境変数でのマッピング [#yece6af8]
@Value("${com.rutake.env.value}")
String value;
export COM_RUTAKE_ENV_VALUE=value
ymlに定義することもできるが、この場合で環境変数のCOM_RUT...
com:
rutake:
env:
value: {other.env}
*プロジェクト新規作成 [#w0bfdaa9]
Spring Bootの雛形をWeb上で作成可能
http://start.spring.io/
*Document [#ya857879]
http://terasolunaorg.github.io/guideline/5.3.0.RELEASE/ja...
*特徴 [#a58f1bbe]
-SpringMVCを設定レスにした感じ。
*起動 [#hc69eb91]
mvn spring-boot:run
./gradlew bootRun
*注意点 [#p9003978]
以下の設定だとDBデータを全部消すので、間違っても利用中のD...
spring.jpa.hibernate.ddl-auto=create
updateにしておくと消すことはない。
none何もしない。updateはentityの差分を反映。createは作成...
*Cache [#g446f84f]
**Cacheableのimportを間違えて(3つある)有効にならずハマ...
-buid.gradle
compile('org.springframework.boot:spring-boot-starter-c...
-Application.java
@EnableCaching
-import org.springframework.cache.annotation.Cacheable;
SpringFoxのCacheableをimportしてハマる!
*トラブル [#ib317326]
MACで設定翌日にWebアプリケーションが一切起動しない(どのプ...
**propertiesファイル [#m465e21d]
application.propertiesに設定が必要だった。あとリソースフ...
**検索対象のパッケージ [#p8837014]
デフォルトやデモだと同じパッケージを検索する。
サービスには@ComponentScan("パッケージ名")
-componentの探し方
http://yyama1556.hateblo.jp/entry/2016/08/10/175948
*設定 [#jdf4899f]
**application.propertiesとapplication.yml [#n684580b]
+src/main/resources/config/application.ymlがあるとそれを...
+src/main/resources/application.propertiesが次に利用され...
***application.yml [#p0cd9892]
設定ファイルではスネークケースもキャメルケースもチェーン...
server:
port: 9020
spring:
datasource:
url: jdbc:mysql://mysql.example.com/test
username: User
password: Password
driverClassName: com.mysql.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
hoge:
fuga:
@Value("${hoge.fuga:#{null}")
String hoge;
@Value("${hoge.fuga.interval:3600}")
private long interval;
-http://takayukii.me/post/201704041080
*Spring Boot Batch [#i3b1d995]
デフォルトでは@SpringBootApplicationが存在するパッケージ...
*Spring DATA [#w47d037c]
http://qiita.com/tag1216/items/55742fdb442e5617f727
**トラブルを防ぐために [#webf32a2]
-RequestParamを設定している場合はパスが一致しているだけで...
-アソシエーションにいきなりチャレンジするのではなく単体で...
-メソッド追加時はパラメータの数が一致していないとわけのわ...
-アソシエーションはきちんとキャメルケースになっていないと...
-アソシエーションがあるとデータを全部持ってこようとするの...
*ログ出力 [#b2f787a2]
**Spring JPA SQLログ出力 [#j0f784c2]
# for logging
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBin...
**Spring mybatis SQLログ出力 [#l2af1a3c]
-mapperのあるパッケージを指定すればOK
logging.level.yourpackage=DEBUG
**Hikari DBCP [#f9ef587b]
logging:
config: classpath:logback-spring.xml
level:
com.zaxxer.hikari: DEBUG
*Connection 関連設定 [#ga49d3e8]
**検証クエリーの有効化 [#c92c7df0]
-Spring Boot 2.0系のデフォルトなら以下のプロパティを入れ...
hikari:
connection-test-query: SELECT 1 FROM DUAL
**フェイルオーバー [#xbfe66b0]
|failover|
|loadbalance|
|sequential|
*ページング [#va59f470]
**Controller [#l65cbe19]
-Controllerの各メソッドの引数に以下の値を設定しておくとク...
@PageableDefault(
page = 0,
size = 10,
sort = {"id"},
direction = Sort.Direction.DESC
) Pageable pageable
**Spring JPA [#mfcd982a]
-デフォルトで用意されているメソッドの引数にpageableを入れ...
Page<T> list = xxxRepository.findAll(pageable);
*Thymeleaf [#ta74fc65]
**Tips [#j436a197]
|テキストとして解釈 | をつけると/は割り算ではなくそのまま...
|エスケープしない|th:utext|
|クエリーをつける(固定値でも可能)|th:href="@{/charges/{id...
**Enum出力 [#lae7bea9]
<select>
<option th:each="state : ${T(com.rutake.enums.Directi...
th:value="${state.value}"
th:text="${state.label}">
</option>
</select>
spring:
profiles:
active: local
*2.0対応 [#reeebdec]
**一時ファイル保存場所 [#eaae8847]
|1.5|spring.http.multipart.location=/upload/temp|
|2.0以降|spring.servlet.multipart.location=/upload/temp|
**JPA [#sf4501be]
メソッド名変更
-findOneがgetOne
-deleteがdeleteById
-updateがupdateAll
フィールド名にemptyが使えない
-@Columnアノテーションで逃げた
SpringSecurityが常に403なので無効化
JPAのgetOneが引けない・・・
ここでギブアップ!!
#counter
ページ名: