ide는 인텔리제이 커뮤니티 버전을 사용하므로, 그와 관련된 설정으로 진행한다.
기본적인 스프링부트 개발환경에 mysql 붙이는 정도의 내용으로 정리.
ide 에서 gradle 프로젝트로 생성하면, 위 wrapper 포함해 생성되므로, 별도로 gradle 을 설치할 필요는 없다~
알아서 다운로드한다.
만약 별도록 해당 파일을 구성하려면,
인스톨러 패키지 관리자 등으로 gradle 설치~
gradlew 생성
$ gradle wrapper --gradle-version 3.3
폴더 구성
gradle 프로젝트는 src/main 아래에 소스들이 구성된다. 정확히 말하면 gradle 의 java plugin 의 소스 폴더 위치가 src/main/java, src/test/java 로 구분된다.
소스 폴더의 위치를 변경하려면 아래처럼 기술하고, 해당 폴더를 적용해 주면 된다.
sourceSets {
main {
java {
srcDir 'src/main/java'
}
resources {
srcDir 'src/main/resources'
}
}
test {
java {
srcDir 'src/test/java'
}
}
}
Application.java 파일에 ComponentScan 어노테이션이 위치하므로, 콤포넌트들은 그 하위에 위치해야 한다.
기본 구성
src/
main/
java/
myproject/
Application.java
OtherConfig.java
sub/
controller/
model/
repository/
service/
src/
main/
resources/
application.properties
src/
main/
resources/
templates/
src/
main/
webapp/
META-INF/
gradlew
gradlew.bat
gradle/
wrapper/
gradle-wrapper.jar
gradle-wrapper.properties
build.gradle
// 외부 플러그인에 대한 의존성 기술
// 해당 저장소(repositories)들에서 gradle plugin을 사용함을 정의.
buildscript {
repositories {
mavenLocal()
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.2.RELEASE");
}
}
// 플러그인 적용
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
// 라이브러리 저장소
repositories {
mavenCentral()
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/libs-milestone" }
}
// 사용할 라이브러리들
dependencies {
compile 'org.springframework.boot:spring-boot-starter-web:1.5.2.RELEASE'
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
compile 'mysql:mysql-connector-java:5.1.30'
compile 'org.springframework.boot:spring-boot-starter-thymeleaf'
}
내부 라이브러리나 하위 프로젝트 참조.
compile files('libs/my-lib.jar')
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':libs:project-name')
jsp 사용하려면 추가
compile 'javax.servlet:jstl'
compile 'org.apache.tomcat.embed:tomcat-embed-jasper'
Application.properties
DB 관련 정보와 시스템 설정이 들어간다.
자세한 내용은 링크 참조.
http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
server.port=포트
spring.datasource.url=jdbc:mysql//localhost/test
spring.datasource.username=user
spring.datasource.password=pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
JSP
뷰로 jsp 사용시 별도 위치( /src/main/webapps/WEB-INF)
spring.view.prefix=/WEB-INF/home/
spring.view.suffix=.jsp
thymeleaf 템플릿 뷰 위치 변경
spring.thymeleaf.check-template-location=true
spring.thymeleaf.prefix=/WEB-INF/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
spring.thymeleaf.cache=false
jar 외부 폴더로 지정 : file: 사용..
spring.thymeleaf.prefix=file:./templates/
spring.resources.static-location=file:///C:/project/resource/static/
spring.resource.cache-period=0
application.yml
추가적인 설정 작업
운영상 데몬으로 실행할 경우 pid를 알아야 하는 경우가 있는데, 스프링부트 실행시 pid 정보를 파일로 남기도록 설정할 수 있다.
spring:
pid:
file:file-name.pid
Configuration
Application.java
entry point 역할을 하며, main 메쏘드가 위치하게 된다. 하위로 component 들을 스캔하므로, 다른 요소들보다 상위 폴더에 위치해야 한다.
import org.springframework.boot.SpringApplication:
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
@SpringBootAppliction
// 위는 아래와 같다.
//@Configuration
//@EnableAutoConfiguration
//@ComponentScan
public class Application {
public static void main(String[] args) { SpringApplication.run(Application.class, args); }
}
@ComponentScan
모든 컴포넌트를 검색한다.
@EnableAutoConfiguration
메인 설정에서 한번만 정의하는 요소로 스프링 어플리케이션을 자동으로 설정할지 여부를 결정
특정 클래스의 자동설정을 제외하는 경우
@EnableAutoConfiguration(exclude={OtherConfiguration.class})
모델
import javax.persistence.*;
@Entity
@Table(name= "table_name")
public class MyData {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private Long id;
@Column(name = "TITLE", nullable = false)
private String title;
// getter , setter
public Long getId() { return id; }
public void setId( Long id) { this.id = id; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
}
@Id : PK 항목
@GeneratedValue : 값을 지정할때 누가 담당하는지 지정한다.
@Column : 컬럼명이 다른경우 사용
저장소
간단히 인터페이스만을 상속해 정의해 두면 된다. 자바 리플렉션을 사용해 스프링에서 해당 객체를 생성하게 된다. JpaRepository는 기본적인 Create / Read / Update / Delete 메쏘드들이 정의되어 있다.
@Repository
public interface MyRepository extends JpaRepository<MyData, Long>
{
}
컨트롤러
비지니스 로직은 서비스쪽에 위치하지만 일단 샘플이므로, 컨트롤러에 작성~
@Controller
@ResponseBody
//@RestController : 위 두개 합친것
// 맵핑할 URL을 정의한다.
//@RequestMapping(value = "/test",method=RequestMethod.GET)
// spring 4.3 이후 Get, Post 에 대한 어노테이션 추가되어 아래처럼 정의 가능.
//@GetMapping("/test")
public class MyController {
@autowired
private MyRepository repo;
@RequestMapping(value="/test/add")
public MyData addData( MyData data )
{
MyData my = repo.save(data);
return my;
}
@RequestMapping("/test/list")
public List<MyData> list( )
{
List<MyData> dataList = repo.findAll();
return dataList;
}
@ResponseBody
String test() {
return "HelloWorld";
}
// 뷰 설정 : 리턴값은 뷰의 파일명으로 jsp의 경우 위에 정의된 폴더의 "view.jsp" 파일이다.
@RequestMapping("/view")
public String test(Model model) {
model.addAttribute("test", "Hello World");
return "view";
}
}
@Controller 자동스캔으로으로 등록된다.
@RequestMapping 은 클래스->메쏘드로 상속되며, 클래스에는 @RequestMapping("/test/*") 로 지정하고, 메소드에는 @RequestMapping 만 붙이면, /test/메소드명 형태의 패턴으로 매핑된다.
뷰
타임리프와 같이 템플릿으로 지원되는 녀석들은 기본 템플릿 폴더에 작성하면된다. 하지만 이경우 함께 빌드되어 jar로 포함되므로, 뷰 수정시에도 빌드가 일어나야 하는 단점이...
기본 정적 폴더 위치
src/main/resources/templates/ :html파일
src/main/resources/static/ : css, javascript, image
정적 위치 등록.
@Configuration
public class StaticConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandler(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/test/**").addResourceLocations( "file:/opt/mypath/");
}
}
'프로그래밍 > Web' 카테고리의 다른 글
Gradle Wrapper (0) | 2017.03.06 |
---|---|
스프링 요청/응답 (0) | 2017.02.26 |
JPA 쿼리 이것저것 (0) | 2017.02.22 |
[spring] 프로퍼티 값 읽기 (0) | 2017.02.21 |
[spring] 핸들러 인터셉터 (0) | 2017.01.24 |
[spring] batch 작업관련 요소들 (0) | 2012.09.28 |
[spring] JAVA코드 테스트를 위한 Spring설정 (0) | 2012.09.25 |
[MyBatis] 기본 사용법 (0) | 2012.05.13 |
톰캣 (0) | 2012.05.10 |
[spring] dispatch servlet 기본 (0) | 2011.05.13 |