spring을 공부하면서 회원가입, 로그인, jwt token발급은 해본적이 없어서 개인적으로 작업중이였습니다.
환경변수는 .env.local파일에 작성된 내용을 application.yml파일에 불러왔고 다음과 같이 작성했습니다.
server:
port: ${PORT:8000}
spring:
config:
import: optional:file:.env.local[.properties]
# Using MySQL
datasource:
url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DB}
username: ${MYSQL_USER}
password: ${MYSQL_PASSWORD}
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
database: mysql
hibernate:
ddl-auto: create
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
show_sql: true
format_sql: true
use_sql_comments: true
jwt:
secret:
key: ${JWT_SECRET_KEY}
문제는 Application을 실행시키면서 나타났습니다.
어플리케이션을 실행하면서 나타난 오류는 다음과 같았습니다.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jwtUtil': Injection of autowired dependencies failed
jwtUtill에서 bean을 생성하지 못해 나타나는 에러였습니다.
원인은
@Value("${jwt.secret.key}") // 이곳이 원인
private String secretKey;
application.yml파일에서 jwt.secret.key를 불러오지 못해 나타나는 에러였습니다.
application.yml을 살펴보던중에 key부분 글자에 음영이 생성된걸 확인했습니다.
Cannot resolve configuration property 'spring. jwt. secret. key'
라는 오류였으며 구글링 결과 원인을 파악할 수 있었습니다.
모든 문제의 원인은 application.yml파일에서 jwt부분을 spring의 하단에 두어 발생한 문제였습니다.
jwt와 spring은 같은 line에 위치에 작성하니 정작적으로 작동하였습니다.
server:
port: ${PORT:8000}
spring:
config:
import: optional:file:.env.local[.properties]
# Using MySQL
datasource:
url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DB}
username: ${MYSQL_USER}
password: ${MYSQL_PASSWORD}
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
database: mysql
hibernate:
ddl-auto: create
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
show_sql: true
format_sql: true
use_sql_comments: true
jwt:
secret:
key: ${JWT_SECRET_KEY}