예전부터 생각해왔던, 스프링부트 버전업이 완료되어 테스트 서버에서 확인중이다.
버전업을 하며, 느낀 점을 정리한다.
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 |