Category Archives: Spring Boot

[Spring-Boot] 배포 별 환경설정 다르게 가져가기.

Spring-boot의 환경설정과 관련된 내용은 application.properties에 들어가게 된다.

이 환경설정과 관련된 내용은 어디서 배포하느냐에 따라 다를 수 있는데 (production, test, dev 등…)

이를 다음과 같이 하면 분리 가능 하다.

 

[application.properties]

spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.content-type=text/html;charset=UTF-8
spring.velocity.expose-session-attributes=true
spring.velocity.expose-request-attributes=true
spring.session.store-type=redis
server.session.timeout=900

 

[application-dev.properties]

server.port=18081
spring.datasource.url=jdbc:log4jdbc:mysql://123.123.123.123:3306/chain?useUnicode=true&characterEncoding=utf8
spring.datasource.username=123
spring.datasource.password=123
spring.redis.host=105.23.12.34
spring.redis.port=6379

 

[application-deploy.properties]

server.port=18080
spring.datasource.url=jdbc:log4jdbc:mysql://127.0.0.1:3306/chain?useUnicode=true&characterEncoding=utf8
spring.datasource.username=123
spring.datasource.password=123
spring.redis.host=127.0.0.1
spring.redis.port=6379

 

이런식으로 application-XXX.properties 파일을 만들었다면, 서버를 실행할 경우에 이 옵션을 주면 된다.

-Dspring.profiles.active=dev

XXX를 저 = 내용에 넣는다면, 해당 프로필을 읽어 실행을 하게 된다.

[Spring-Boot] Redis 로 세션관리

Spring-boot에서는 Redis를 이용하여 세션을 관리할 수 있다.

우왕 싱기방기 하다.

Application.properties

spring.session.store-type=redis
server.session.timeout=5
spring.redis.host=localhost
spring.redis.port=6379

먼저 위와 같이 application properties에서 spring session을 redis로 관리할 것을 선언하자. 그리고 redis의 주소와 포트를 입력해주자.

그리고 config 에

@EnableRedisHttpSession

이 Annotation을 붙여주면 끝이다.

 

redis-spring-boot1

이 세션이 redis 에 저장되어 있는지 확인해보자

keys *

redis-spring-boot2

요로코롬 저장 되어 있는 것을 볼 수 있다.

session expirations는 저 unixtimestmap대에 지워지는 세션들의 id정보를 담고 있다. 귀찮아서 거기까진 안보련다.

그런데 저 세션 키 값.. 탐난다.. 알고 시프다..

hkeys “세션value”

redis-spring-boot3

세션에 저런 값이 있다는 것을 알 수 있다.

저 값도 알고 싶다..

hget “세션value” “세션attribute”

redis-spring-boot4

명령어를 쳐보면 알겠지만 곧이 곧대로 값이 나오는 건 아니다.

 

신기하다 /ㅅ\

Spring-Boot, Velocity, JDBC 한글 (UTF-8) 세팅

한글이 어디서 왜 깨지는지 몰라서 다 뒤져야만 했다.

Spring-Boot

@Bean
   public HttpMessageConverter<String> responseBodyConverter() {
       return new StringHttpMessageConverter(Charset.forName("UTF-8"));
   }

   @Bean
   public Filter characterEncodingFilter() {
       CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
       characterEncodingFilter.setEncoding("UTF-8");
       characterEncodingFilter.setForceEncoding(true);
       return characterEncodingFilter;
   }

JDBC

jdbc:log4jdbc:mysql://localhost:3306/block?useUnicode=true&characterEncoding=utf8

Velocity

spring.velocity.charset=UTF-8

 

다음 주 까지 너무 바쁘다.ㅠㅠ

[Spring-boot] Error 페이지 redirect

@Configuration
public class ServerCustomization {
    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return new EmbeddedServletContainerCustomizer() {
            @Override
            public void customize(ConfigurableEmbeddedServletContainer container) {
                container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/WEB-INF/view/404.html"));
            }
        };
    }
}

이런식으로 하면 해당 에러에 대해서 에러페이지로 리다이렉트 시킬 수 있습니다. 주의할 점은 view resolver의 설정을 타지 않으므로 저런식으로 명시해 줘야 한다는 것입니다.

[Spring-boot] Springboot 스프링부트 기본설정

어제 오랜 시간을 헤맨 끝에 Springboot에서 어떻게 설정하는지에 대한 답을 얻을 수 있었다.

Spring boot는 기존에 bean과 xml로 대변되는 복잡하고 어려운 설정들을 java file로 가능케 함으로써 사용자의 편의성을 증대시켰다.

또한 이미 spring-boot-web에 많은 기능 들이 내장되어 있어 별도로 크게 설정할 필요가 없어졌다.

다음은 내가 기본으로 진행했던 설정파일이다.

Application.java

Main메소드가 있는 것으로 보아 진입점이 됨을 알수 있다. 진입 점임을 알리기 위해 @SpringbBootApplication Annotation을 삽입했다.

이 main 메소드를 바로 실행할 경우 provided로 설정되어 있는 각종 기능을 사용할 수 없으니, 꼭 spring-boot:run으로 실행해야 한다.

package com.sds.fdtf.adminweb;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;


@MapperScan(value = {"com..web.mapper"})
@SpringBootApplication
public class Applicationextends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

}

MvcConfig

ViewResolver를 설정하였다.

package com.sds.fdtf.adminweb.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

/**
 * Created by yceffort on 2016-07-05.
 */
@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter {
    @Bean
    public ViewResolver getViewResolver() {
        System.err.println("view resolver");
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/view/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

MybatisConfig

mybatis 를 설정하였다.

package com.sds.fdtf.adminweb.config;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

/**
 * Created by yceffort on 2016-07-05.
 */
@Configuration
public class MyBatisConfig {
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {

        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);

        Resource[] res =
                new PathMatchingResourcePatternResolver().
                        getResources("classpath:mappers/*Mapper.xml");
        sessionFactory.setMapperLocations(res);

        return sessionFactory.getObject();
    }
}