Tag Archives: java

[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] 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();
    }
}

 

[Spring Boot] Application.properties 분리

요즘 Spring boot를 하는데 재밌다.

기존에 Spring은 너무 배우기 어렵고 복잡하다는 느낌이었는데, Spring boot는 확실히 Spring 보다 가벼운 느낌이다.

 

DB가 두 종류가 있는데, 하나는 개발을 할때, 하나는 실제 deploy할 때 써야한다.

이 때문에 application.properties에 각각을 분리해서 명시해줘야 하는데, 이럴 때는 application-[이름].properties를 쓰면 된다.

 

applictaion.properties

spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/SEXY
spring.datasource.username=user
spring.datasource.password=user
spring.datasource.testWhileIdle=true
spring.datasource.timeBetweenEvictionRunsMillis=120000
spring.datasource.validationQuery=SELECT 1
server.port=19921

application-dev.properties

spring.datasource.url=jdbc:log4jdbc:mysql://127.0.0.1:53306/SEXY
server.port=8080
debug=true

 

이렇게 두개로 나누었다고 가정하자.

이제 실행할때 -Dspring.profiles.active=dev 를 (J)VM argument 로 주게 되면

dev properties를 읽어서 기존에 application.properties를 overriding 하게  된다.

mvn -Dspring.profiles.active=dev package

응용하여 이렇게 옵션을 걸면 maven이 dev properties를 읽어 ~.jar를 떨궈주게 될 것이다.

[Java] 피보나치 수를 더 빠르게 구하는 법

피보나치 수를 구할 때 흔히들 재귀함수로 호출하여 많이 구한다.

그러나 재귀호출을 하게 되면 너무나 많이 호출하게 되므로, 약간은 비효율적으로 작동할 수도 있다.

재귀호출을 이요하지 않고, 한번 계산한 내용을 배열에 저장해서 구한다면 훨씬 빠르게 구할 수 있다.

public class Fibo {

  static int recursiveNum;
  static int listNum;
  static int list[];

  public static void main(String[] args) {

    recursiveNum = 0;
    listNum = 0;

    list[1] = 1;
    list[2] = 1;
    
    int n = 10;
    
    list = new int[n + 1];
    
    System.out.println("재귀호출");
    System.out.println(recursiveFibo(n));
    System.out.println(recursiveNum);
    
    System.out.println("==============================");

    System.out.println("배열호출");
    System.out.println(listFibo(n));
    System.out.println(listNum);

    
  }

  public static int recursiveFibo(int n) {
    recursiveNum++;
    if (n <= 2) {
      return 1;
    } else {
      return recursiveFibo(n - 2) + recursiveFibo(n - 1);
    }
  }

  public static int listFibo(int n) {
    listNum++;
    if (list[n] == 0) {
      list[n] = listFibo(n - 1) + listFibo(n - 2);
    }

    return list[n];
  }

}

결과

재귀호출
55
109
==============================
배열호출
55
17