springboot」タグアーカイブ

spring-boot-starter-parentのバージョンアップ時メモ

小さいシステムバージョンアップしようとしたら色々コンパイルエラー(他)が出たので作業しながらメモ残す。新バージョンのライブラリ(Junitとか)は極力新しい奴のデフォルトに合わせる予定だが、つらくなったら妥協する。

作業内容

  • 2.1.6.RELEASEから3.2.3
  • JDKは11から17(21のバイナリで17動作指定)

Junitのエラー

Junit4系から5系に変わりった。

以下2つがコンパイルエラー。

  • import org.junit.Test
  • import org.junit.runner

org.junit.jupiter.api.Test に代わってrunnerはいらない

import static org.junit.Assert.assertHOGE

import static org.junit.jupiter.api.Assertions.assertHOGEに

import javax.servlet.http.HttpServletRequest;

import jakarta.servlet.http.HttpServletRequest;にパッケージ名が変わっている

import org.hibernate.validator

jakarta.validation.constraints.HOGEへ

以下はいれてコンパイルエラーは消えるがすでに org.hibernate.validatorはDuplicateだった。

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-validation</artifactId>
		</dependency>

import javax.persistence.HOGE

jakarta.persistence.HOGEへ

とりあえずコンパイルエラーは消えた。このあと実行時のやつらを

実行時のjar重複

Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts

こちらによるとほかの依存している奴と重複すると警告がでる。

依存関係から除外

		<dependency>
			<groupId>jp.co.epea</groupId>
			<artifactId>jpholiday</artifactId>
			<version>0.0.1</version>
			<exclusions>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

LogLevelの型?

Failed to bind properties under 'logging.level.org.hibernate.sql' to org.springframework.boot.logging.LogLevel:

    Property: logging.level.org.hibernate.sql
    Value: "DUBUG"
    Origin: class path resource [application.properties] - 12:33
    Reason: failed to convert java.lang.String to org.springframework.boot.logging.LogLevel (caused by java.lang.IllegalArgumentException: No enum constant org.springframework.boot.logging.LogLevel.DUBUG)

Action:

Update your application's configuration. The following values are valid:

    DEBUG
    ERROR
    FATAL
    INFO
    OFF
    TRACE
    WARN

application.propertiesのログレベル指定をorg.springframework.boot.logging.LogLevel=DUBUGにしたらとりあえず動くけどそんなプロパティないと警告出ている。また、デバックログは出てないっぽい。そもそもなにも働いていないからエラーにもならないだけだな。

Description	Resource	Path	Location	Type
'org.springframework.boot.logging.LogLevel' is an unknown property.	application.properties	/momoyama-web/src/main/resources	line 12	Language Servers

あらためて確認すると

  • logging.level.sql=DEBUG
  • logging.level.org.hibernate.SQL=DEBUG
  • logging.level.org.hibernate.orm.jdbc.bind=TRACE

これらは使えるっぽい(上ふたつは多分同じものさす)

改めて設定したら使えた。クラスパスの反映とかがうまくいってないかったのかな?ちょっと様子見。

それはそうとSTSでapplication.properties触ろうとするとかなりの確率でフリーズする。

HHH90000025

HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
spring.jpa.database=POSTGRESQL
spring.datasource.driverClassName=org.postgresql.Driver

がいらなくなったらしい

HHH000489

HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)

調べ中

これはそういうものとここに書いてある。とりあえず受け入れる。

spring.datasource.hoge

spring.sql.init.hogeに変更

Spring Securityのユーザ認証でちょこっと躓いた

DB認証を設定しようとして

@Entity
public class User implements UserDetails {

private static final long serialVersionUID = 1L;

public enum Authority {ROLE_USER, ROLE_ADMIN}

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(nullable = false, unique = true)
private String username;

@Column(nullable = false)
private String password;

Userというクラス名でテーブルの生成をしようとしたら、以下のエラーが発生

Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near “user”Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near “user”  ポジション: 13 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2455) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7] at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2155) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7] at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:288) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7] at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:430) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7] at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:356) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]

Postgresの予約語とかさなったとのこと。リンク先のとりあえずの手段として以下のようにエスケープを二重にしたら動いた。(password列も必要とのこと)

@Entity
@Table(name = “`USER`”)
public class User implements UserDetails {

ただ、そもそも予約語と重ならないほうがよいよということなので後で変える