@Order(10000) @Order(1000)
上位2つは他のファイルも混じるのでstaticかpublic推奨
@CacheableをServiceの戻り値につけるとキャッシュ可能。Service内部での呼出の場合はCacheされないので注意。
項目 | 内容 | 備考 |
ContextPath変更 | server.contextPath=/hoge | staticも大丈夫っぽい |
スキャン対象パッケージ指定 | @SpringBootApplication(scanBasePackages = {"com.rutake.xxx"}) |
https://github.com/spring-guides/gs-multi-module/tree/master/complete
return new Jackson2ObjectMapperBuilder() .serializationInclusion(JsonInclude.Include.NON_NULL)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Singletonとなるが、Request単位に作成してほしいなどがあるはず。スコープは4種類?
http://jappy.hatenablog.com/entry/2016/06/04/042200
@Bean @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
@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
@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上で作成可能
mvn spring-boot:run ./gradlew bootRun
以下の設定だとDBデータを全部消すので、間違っても利用中のDBに向けてはいけない。
spring.jpa.hibernate.ddl-auto=create
updateにしておくと消すことはない。
none何もしない。updateはentityの差分を反映。createは作成するが、消すことはない。create-dropは起動時に作成して、終了時にdropする。
compile('org.springframework.boot:spring-boot-starter-cache')
@EnableCaching
SpringFoxのCacheableをimportしてハマる!
MACで設定翌日にWebアプリケーションが一切起動しない(どのプロジェクトも)トラブルで死亡。原因不明。ワークスペースを変更してもダメ。
application.propertiesに設定が必要だった。あとリソースファイルもクラスパスにないとだめ。全自動でできるのかは要調査!
デフォルトやデモだと同じパッケージを検索する。 サービスには@ComponentScan("パッケージ名")
http://yyama1556.hateblo.jp/entry/2016/08/10/175948
設定ファイルではスネークケースもキャメルケースもチェーンケース(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;
デフォルトでは@SpringBootApplicationが存在するパッケージ以下を検索する。それ以外のパッケージにRepositoryがある場合は@EnableJpaRepositories and its type-safe basePackageClasses=MyRepository.class parameter.を利用する。
http://qiita.com/tag1216/items/55742fdb442e5617f727
# for logging logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
logging.level.yourpackage=DEBUG
logging: config: classpath:logback-spring.xml level: com.zaxxer.hikari: DEBUG
@PageableDefault( page = 0, size = 10, sort = {"id"}, direction = Sort.Direction.DESC ) Pageable pageable
Page<T> list = xxxRepository.findAll(pageable);
エスケープしない | th:utext |
クエリーをつける(固定値でも可能) | th:href="@{/charges/{id}(id=${item.id})}" |
<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
1.5 | spring.http.multipart.location=/upload/temp |
2.0以降 | spring.servlet.multipart.location=/upload/temp |
メソッド名変更
フィールド名にemptyが使えない
SpringSecurityが常に403なので無効化
JPAのgetOneが引けない・・・
ここでギブアップ!!