본문 바로가기
Java

자바 스프링부트 버전업

by NaHyungMin 2023. 12. 28.

예전부터 생각해왔던, 스프링부트 버전업이 완료되어 테스트 서버에서 확인중이다.

버전업을 하며, 느낀 점을 정리한다. 

1. 일단 책임자한테 미루는게 제일 좋다. -_-

2. 일단 기존 설정파일 로드 형식을 변경했다.

spring:
  application:
    name: server
  config:
    import:
      - optional:file:/home/apps/server/config/server.yml
      - optional:/Users/apps/server/config/
      - optional:file:/home/apps/server/config/application.yml
  profiles:
    active: navtive

개인적으로 외부에서 프로필을 주입하는 형식은 좋아하지 않는다. 다른 사람이 처음 환경설정할 때, 사람에게 의존성이 생기기 때문이다.

일단 리눅스와 윈도우는 같은 형식으로 처리할 수 있는데, 파일 명이 다르게 설정되어 있어서 굳이 공통화까지 진행하진 않았다.

3. 작업 도중 여러 의존성을 해결해줘야 한다.

 - 데이터베이스 커넥터 변경

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.48</version>
</dependency>

 

- 레디스도 오류 발생

[org.springframework.data.redis.connection.jedis.JedisConnectionFactory]: Factory method 'connectionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: redis/clients/jedis/util/SafeEncoder

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.6.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>2.4.13</version>
    <!--<version>1.7.5.RELEASE</version>-->
</dependency>

 

- 스케쥴러도 추가

@Configuration
public class ScheduledTaskRegistrarConfig {
    @Bean
    public ScheduledTaskRegistrar scheduledTaskRegistrar() {
        return new ScheduledTaskRegistrar();
    }
}

 

- 히카리풀도 변경

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.build.artifactiId>${project.build.finalName}</project.build.artifactiId>
    <java.version>1.8</java.version>
    <hikaricp.version>3.3.1</hikaricp.version>
    <mybatis.version>1.1.1</mybatis.version>
</properties>

 

- gson도 변경

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

 

- 테스트도 변경

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.HashMap;
import java.util.Map;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = TestServiceConfiguration.class)
public class AndroidServiceTest {
  @Autowired AndroidService androidService;

  @Test
  public void testComplianceAndroidSMS() {
  }
}

 

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;

import java.util.HashMap;
import java.util.Map;

@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = TestServiceConfiguration.class)
public class AndroidServiceTest {
  @Autowired AndroidService androidService;

  @Test
  public void testComplianceAndroidSMS() {
  }
}

 

- 추가로 작업할 내용이 더 생김. 다국어 처리 변경, 이 경우는 해당 프로젝트가 /messages/messages에 있어서 변경했다.

@Bean
public MessageSourceAccessor messageSourceAccessor(MessageSource messageSource) {
  return new MessageSourceAccessor(messageSource, Locale.ENGLISH);
}

 

@Bean
public ReloadableResourceBundleMessageSource messageSource() {
  ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
  messageSource.setDefaultEncoding("UTF-8");
  messageSource.setBasenames("classpath:/messages/messages");
  messageSource.setCacheSeconds(5);
  return messageSource;
}

@Bean
public MessageSourceAccessor messageSourceAccessor() {//(MessageSource messageSource) {
  return new MessageSourceAccessor(messageSource());
}

 

- 이메일 형식 변경

@Bean
  public VelocityConfig velocityConfig() {
    VelocityConfigurer velocityConfig =new VelocityConfigurer();
    velocityConfig.setResourceLoaderPath("classpath"); //("classpath");
    return velocityConfig;
  }

 

@Bean
public VelocityEngine velocityEngine() {
  VelocityEngine velocityEngine = new VelocityEngine();
  velocityEngine.setProperty("resource.loader", "class");
  velocityEngine.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
  velocityEngine.setProperty("classpath.resource.loader.path", "classpath:/templates");
  return velocityEngine;
}
<dependency>
    <groupId>com.alibaba.spring</groupId>
    <artifactId>spring-webmvc-velocity</artifactId>
    <version>4.3.18.RELEASE</version>
</dependency>

 

- 로컬 캐시 변경 Guava -> caffeine

@Bean
  public GuavaCache loginCache() {
    return new GuavaCache(LOGIN_CACHE, CacheBuilder.newBuilder()
            .expireAfterWrite(60, TimeUnit.MINUTES)
            .build());
  }
@Bean
public CacheManager cacheManager() {
  SimpleCacheManager cacheManager = new SimpleCacheManager();
  cacheManager.setCaches(Arrays.asList(
          new CaffeineCache(LOGIN_CACHE, Caffeine.newBuilder()
                          .expireAfterWrite(60, TimeUnit.MINUTES)
                          .build())
  ));
  return cacheManager;
}

@Bean
public CaffeineCache loginCache(CacheManager cacheManager) {
  return caffeineCache(cacheManager, LOGIN_CACHE);
}

 private CaffeineCache caffeineCache(CacheManager cacheManager, String cacheName) {
    CaffeineCache loginCache = (CaffeineCache) cacheManager.getCache(cacheName);
    return loginCache;
  }

 

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
</dependency>

종속성은 메이븐 저장소에서 스프링버전 별로 찾아서 처리했다.

이메일을 보내는 라이브러리도 변경된 부분이 많지만, 사용하지 않는 회사도 많을거라 생각하여 따로 정리하진 않는다.

- 날짜 형식 변경 1.5.8 -> SimpleDateFortmat에서 ObjectMapper형식으로 변경이 됐다고 한다. 그래서 클라이언트에서 오류가 발생.

파싱 하는 형식에 따라 다른 형식으로 변경해야 할듯.

@Bean
public ObjectMapper objectMapper() {
  ObjectMapper objectMapper = new ObjectMapper();

  objectMapper.registerModule(new JavaTimeModule());

  return objectMapper;
}
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

 

그리고. 티 안나니깐.트러블슈팅이나 책임자만 고쳐라 -_-. 아무도 안 알아준다.

'Java' 카테고리의 다른 글

구글 드라이브 시트 변경 / Google Drive Api, Slack Api  (1) 2024.01.22
파이어베이스 다중 푸시  (0) 2023.10.16
자바 Spring Boot 1.5 동적 Cron  (0) 2023.07.19
Java region  (0) 2023.02.16
자바 열거형 Find Value  (1) 2022.09.23