Application Event非同期

https://medium.com/@bau1537/springframework%E3%81%AB%E3%82%88%E3%82%8B%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AE%E5%AE%9F%E8%A3%85-5accbcc97957

Componentの生成順序

@Order(10000) @Order(1000)

同じフォームで処理メソッドを変更させる

静的ファイルの置き場所と優先順位

上位2つは他のファイルも混じるのでstaticかpublic推奨

  1. resources/META-INF/resources/
  2. resources/
  3. resources/static/
  4. resources/public/

Cache制御

マスターなどのデータキャッシュ

@CacheableをServiceの戻り値につけるとキャッシュ可能。Service内部での呼出の場合はCacheされないので注意。

Spring Bootでのthymeleadのキャッシュ無効化

kotlin対応

Tips

項目内容備考
ContextPath変更server.contextPath=/hogestaticも大丈夫っぽい
スキャン対象パッケージ指定@SpringBootApplication(scanBasePackages = {"com.rutake.xxx"})

multi module

https://github.com/spring-guides/gs-multi-module/tree/master/complete

20170922 チェック

例外ハンドラー

認証関連

チェック

       return new Jackson2ObjectMapperBuilder()
               .serializationInclusion(JsonInclude.Include.NON_NULL)
           mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

DIの基本

Singletonとなるが、Request単位に作成してほしいなどがあるはず。スコープは4種類?

http://jappy.hatenablog.com/entry/2016/06/04/042200

リクエスト単位にしてほしいBeanの設定

@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)

properitiesのConfigへの読み込み

   @Bean
   @ConfigurationProperties(prefix = "myprop.hoge")
   public HogeProperties hogeProperties() {
       return new HogeProperties();
   }
myprop:
  hoge:
    prop1: prop1
   

環境の切り替え

java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=production

ymlに環境変数かつデフォルト値

# myapps
com:
  rutake:
    yml:
      value: ${env.test:hogehoge}

環境変数でのマッピングにデフォルト値

   @Value("${com.rutake.env.value:test}")
   private String testFromEnv;

COM_RUTAKE_ENV_VALUEの定義がない場合はtestになる。

環境変数でのマッピング

  @Value("${com.rutake.env.value}")
  String value;
export COM_RUTAKE_ENV_VALUE=value
ymlに定義することもできるが、この場合で環境変数のCOM_RUTAKE_ENV_VALUEとOTHER_ENVが定義されていた場合は一致する環境変数である前者が優先される。
com:
   rutake:
      env:
         value: {other.env}

プロジェクト新規作成

Spring Bootの雛形をWeb上で作成可能

http://start.spring.io/

Document

http://terasolunaorg.github.io/guideline/5.3.0.RELEASE/ja/ArchitectureInDetail/WebApplicationDetail/Validation.html

特徴

起動

mvn spring-boot:run
./gradlew bootRun

注意点

以下の設定だとDBデータを全部消すので、間違っても利用中のDBに向けてはいけない。

spring.jpa.hibernate.ddl-auto=create

updateにしておくと消すことはない。

none何もしない。updateはentityの差分を反映。createは作成するが、消すことはない。create-dropは起動時に作成して、終了時にdropする。

Cache

Cacheableのimportを間違えて(3つある)有効にならずハマった!!

 compile('org.springframework.boot:spring-boot-starter-cache')
@EnableCaching  
SpringFoxのCacheableをimportしてハマる!

トラブル

MACで設定翌日にWebアプリケーションが一切起動しない(どのプロジェクトも)トラブルで死亡。原因不明。ワークスペースを変更してもダメ。

propertiesファイル

application.propertiesに設定が必要だった。あとリソースファイルもクラスパスにないとだめ。全自動でできるのかは要調査!

検索対象のパッケージ

デフォルトやデモだと同じパッケージを検索する。 サービスには@ComponentScan("パッケージ名")

http://yyama1556.hateblo.jp/entry/2016/08/10/175948

設定

application.propertiesとapplication.yml

  1. src/main/resources/config/application.ymlがあるとそれを優先。
  2. src/main/resources/application.propertiesが次に利用されるが、同じ項目がある場合は無視される。

application.yml

設定ファイルではスネークケースもキャメルケースもチェーンケース(driver-class-name)もOK

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;

Spring Boot Batch

デフォルトでは@SpringBootApplicationが存在するパッケージ以下を検索する。それ以外のパッケージにRepositoryがある場合は@EnableJpaRepositories and its type-safe basePackageClasses=MyRepository.class parameter.を利用する。

Spring DATA

http://qiita.com/tag1216/items/55742fdb442e5617f727

トラブルを防ぐために

ログ出力

Spring JPA SQLログ出力

# for logging
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

Spring mybatis SQLログ出力

 logging.level.yourpackage=DEBUG

Hikari DBCP

logging:
  config: classpath:logback-spring.xml
  level:
    com.zaxxer.hikari: DEBUG

Connection 関連設定

検証クエリーの有効化

hikari:
  connection-test-query: SELECT 1 FROM DUAL

フェイルオーバー

failover
loadbalance
sequential

ページング

Controller

@PageableDefault(
           page = 0,
           size = 10,
           sort = {"id"},
           direction = Sort.Direction.DESC
   ) Pageable pageable

Spring JPA

Page<T> list = xxxRepository.findAll(pageable);

Thymeleaf

Tips

テキストとして解釈をつけると/は割り算ではなくそのまま出力されるth:text="${item.storeName}/${item.normalizedStoreName}"
エスケープしないth:utext
クエリーをつける(固定値でも可能)th:href="@{/charges/{id}(id=${item.id})}"

Enum出力

<select>
   <option th:each="state : ${T(com.rutake.enums.Direction).values()}"
           th:value="${state.value}"
           th:text="${state.label}">
   </option>
</select>
spring:
  profiles:
    active: local

2.0対応

一時ファイル保存場所

1.5spring.http.multipart.location=/upload/temp
2.0以降spring.servlet.multipart.location=/upload/temp

JPA

メソッド名変更

フィールド名にemptyが使えない

SpringSecurityが常に403なので無効化

JPAのgetOneが引けない・・・

ここでギブアップ!!

Counter: 3331, today: 2, yesterday: 1

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-10-14 (金) 13:16:53